EDA365电子论坛网

标题: solve求解方程的若干常见问题 [打印本页]

作者: zxcvbvbnmn    时间: 2020-10-20 13:36
标题: solve求解方程的若干常见问题
solve函数是解方程经常使用的函数,有很多坛友在使用该函数时经常遇到问题,现简单汇总如下& N) j- ?# k2 s( f' M3 m
一、使用用法老旧- |# Z' a; s! M8 |) o% [# h

0 @9 c7 M- r" J3 k4 E' F) A3 ]
  • syms x
  • a=1;
  • equ='x^2==a';
  • xs=solve(equ,x)6 ~5 X/ X; X, l# O; H
9 f! O+ N: x8 M; R9 Z/ K% K. S
[color=rgb(51, 102, 153) !important]复制代码

* M' V" K. |, d* h2 K; q; d% \; w! e% X6 p) f% W- {  L9 z
会报错
# v* m+ H. A- ]' S) L: jError using solve>getEqns (line 418)
0 @0 T& t+ l3 V4 S3 a5 KList of equations must not be empty.
! c/ x$ Y  C$ D) L8 [0 J, N  h; ^
错误在于使用用法过于陈旧,现使用的MATLAB多为高版本; g6 s% c0 A. E. }$ g
解决办法
# G1 j4 Z* |. K- E; m7 R! ^使用用法改变,具体参见solve帮助文档) [, M) g% _, X2 Y
; j8 s7 |& G3 z6 T
  • syms x
  • a=1;
  • equ=x^2==a;
  • xs=solve(equ,x)
    2 y6 x% L9 Y* s1 q# b4 i
" M: `/ B" T! o7 ^! J5 k  a( C7 B
[color=rgb(51, 102, 153) !important]复制代码

9 |3 U/ h+ D) |0 o  H/ h
$ {; k" t! g% `7 G9 r8 rxs =4 L7 B+ Y; R8 x
3 o. w- U# L, P- }
-17 a! }  n8 B) Z
  1
) c; m7 C3 P( O- |! G3 W3 V二、循环求解3 v& h( I( E) M- x7 G
解方程经常遇到方程的一个或多个参数是变化的
1 `  J5 ^6 u& ]9 P例如例子的变量a分别等于1、4、9、16" f3 [3 C) c: ^
经常会出现以下代码+ s- \. ]' L' U- U) ~% W& e: c0 T
  • syms x
  • a=[1,4,9,16];
  • equ=x^2==a;
  • xs=solve(equ,x)
    4 O0 D) F/ Q, M0 ~+ y' }

7 c& d  D5 V7 ?/ I8 V9 u: N[color=rgb(51, 102, 153) !important]复制代码
* ^4 e% U( c% [( P
" D6 l8 U4 R" o! ~" t+ j
MATLAB运算无解4 s8 j) F8 {, g1 h: P
xs =3 v+ \3 t7 a( q

, [* m3 M/ W  `" ?+ VEmpty sym: 0-by-1
' f# o% O5 E2 ~& J
这种情况应使用循环求解- k; @+ z) K# C
但有时会遇到以下情况
0 k3 T2 I- [) P  T" [6 z
  • syms x
  • a=[1,4,9,16];
  • for i=1:length(a)
  • equ=x.^2==a(i);
  • x=solve(equ,x)
  • end+ y+ Z: t" C$ Y( z

0 N3 ^# \5 L1 H7 x( Z) l[color=rgb(51, 102, 153) !important]复制代码
' f8 J; f' b! S6 A# n1 E+ z5 I
6 B! q8 b4 m8 g5 @6 O% \
报错如下$ l! p9 [- G8 @8 [  A- h) ]
x =
  w- w3 i" @/ B  X; T+ f
. I8 y& {( j* E4 ~-1
1 {2 B0 R0 q" M) }1 i7 t  1
/ Y$ A& X: x% h: X% B6 R) J6 ?; B9 I- `/ t! g, ]
Error using sym.getEqnsVars>checkVariables (line 92)
. z4 t: }$ ~5 I- sSecond argument must be a vector of symbolic variables.
, G  n* o: M) [; M) b' J
原因在于经过第一次循环后,变量x以转变为具体数值(-1,1),即导致在第二次循环中方程里无未知量
2 Z$ m0 L; |" w解决办法保存解得变量名改变) ?! x+ X& T3 P" j# |
循环求解方程并保存变量的代码如下
9 B& B" H6 j; B- M( T: R) L
  • syms x
  • a=[1,4,9,16];
  • for i=1:length(a)
  • equ=x.^2==a(i);
  • xs(i,=solve(equ,x);
  • end
    # J' n6 _1 Z) v/ p

* R/ J. }5 t% I# u  ?: V[color=rgb(51, 102, 153) !important]复制代码

$ s; k, ]* H- b( g/ M/ b  ^5 i
0 G7 [/ f4 t+ S  i2 r0 @3 X运行后在命令窗口输入xs即可看到全部解如下0 E1 `6 ^1 T& C3 P, O
>> xs
. s7 Z, @- `# y1 r
# m1 Y3 p7 x% `6 Q7 T$ U- N4 lxs =
# W! W& X' f9 `' |- D& T1 @% Z/ a  y( V  e2 E
[ -1, 1]0 E4 H5 `! [3 [% g
[ -2, 2]
, b, F$ n4 c+ w[ -3, 3]
  ]& q0 Z: X- n( u$ ?[ -4, 4]: n8 G) S+ }  D6 V. L
希望对需要的坛友有所帮助,也希望大家多提宝贵意见,共同进步
) o: e% C) [& ]6 {: n( l/ c' ?

作者: fantasyqqq    时间: 2020-10-20 14:39
楼主很细心




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2