|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
solve函数是解方程经常使用的函数,有很多坛友在使用该函数时经常遇到问题,现简单汇总如下
% M* X; l1 G, G5 {* M, D/ }, T一、使用用法老旧+ A9 T8 f) \/ ?- ?
例3 m( q! {2 D$ O/ M8 w
- syms x
- a=1;
- equ='x^2==a';
- xs=solve(equ,x)
; Y2 {5 z" s. J0 L, k / C3 p! X7 S$ U1 M9 N( I
[color=rgb(51, 102, 153) !important]复制代码) Q' _+ G4 O- i0 P. [, t$ t! U
) d# B2 ?; w4 H8 k会报错5 |2 I V/ Y1 H+ C Q
Error using solve>getEqns (line 418)
1 C9 s; ?. J4 }$ Z$ T- f0 l) JList of equations must not be empty.* z2 u9 {+ f& Q3 Y
错误在于使用用法过于陈旧,现使用的MATLAB多为高版本3 {, m- k6 }6 w, r
解决办法
$ m: |1 Q9 \$ k2 J3 J使用用法改变,具体参见solve帮助文档
5 q9 A5 q: L/ P2 W& k例4 l( a: z w# d; ~( @+ Q
- syms x
- a=1;
- equ=x^2==a;
- xs=solve(equ,x)
L1 e( q2 R( A, r4 |+ ` . a T' K& a. \! Y5 t/ Y/ c
[color=rgb(51, 102, 153) !important]复制代码5 u0 N# T; h- H& I
" S) y2 e- q: K/ L- o/ ]$ Dxs =) C( m: h3 Q, A* I
5 ~* a# j, Z. @% i-1+ i `4 F1 y+ ]. K6 b9 s
1 A2 Q# f* L& F% P1 D
二、循环求解. o3 d' n' s% y
解方程经常遇到方程的一个或多个参数是变化的: s' X) I- L- \ r$ S( X; k
例如例子的变量a分别等于1、4、9、16
: j4 V+ v* I1 W8 L( I8 E( ^6 H经常会出现以下代码3 ?' T4 J/ P4 n
- syms x
- a=[1,4,9,16];
- equ=x^2==a;
- xs=solve(equ,x)* M( I9 P- u6 Z/ H- N! w6 p
9 [3 H5 p J( x6 v1 R7 E; i
[color=rgb(51, 102, 153) !important]复制代码# _& z) g8 w' C/ O
! x. V/ g3 t" G- A0 _
MATLAB运算无解6 s6 H1 y3 l1 d* m. j( }0 p
xs =
( u: \+ I" }( `7 F8 P" s) r, Q5 P; }: C& R
Empty sym: 0-by-1* L9 m" Q9 v9 L6 ?6 H8 O& j# ~
这种情况应使用循环求解
- C! K$ h0 p0 M% N5 C+ Q. R- Z+ N$ V但有时会遇到以下情况
9 K* N/ k/ v4 k7 K4 z% m7 N- syms x
- a=[1,4,9,16];
- for i=1:length(a)
- equ=x.^2==a(i);
- x=solve(equ,x)
- end% `% q& n+ M- n$ h
: ^) @+ Z" T- x* P/ M2 k# Y3 ^0 l[color=rgb(51, 102, 153) !important]复制代码9 q4 _% _- V$ v4 K5 v
1 ?; _( l4 R+ z报错如下 I+ A- L4 ^0 h% { ?4 X# t+ e
x =4 |6 H% C( E5 ]$ \+ Q: [
0 K4 c! C6 D* ]" o Y! k5 W- ]-1
1 ^. t2 t, z0 O3 a 1
9 f" T! V- q) }& ~" T$ r$ L; k6 m" B& `9 X7 s! a' g7 a$ o
Error using sym.getEqnsVars>checkVariables (line 92)
# d0 N1 C: _" |0 ?- Y- vSecond argument must be a vector of symbolic variables.3 R. U* A2 f3 P! q
原因在于经过第一次循环后,变量x以转变为具体数值(-1,1),即导致在第二次循环中方程里无未知量6 o2 i! c! l: k! {" o
解决办法保存解得变量名改变
/ ^/ y8 ~9 n) k" s循环求解方程并保存变量的代码如下
: v% O3 @" H7 `4 v( B5 b8 |1 N- syms x
- a=[1,4,9,16];
- for i=1:length(a)
- equ=x.^2==a(i);
- xs(i,
=solve(equ,x); - end
8 `* T$ @: L$ |, Z. t5 ` 2 p' U9 t# Y H8 E$ A3 [7 c
[color=rgb(51, 102, 153) !important]复制代码 ]2 W* @" P% x# J3 y! Q' P
$ ~: i7 v H; x1 V& A, O
运行后在命令窗口输入xs即可看到全部解如下" ]6 I$ [1 O0 ?2 C5 ~
>> xs
* x; U! j D, {- y/ q" ]0 p2 O- s0 y* g) Z0 s' q
xs =
" K: I! N( S* s' w r2 F+ `# G9 @* _, Q3 f( i
[ -1, 1]7 A# h8 B+ E$ ^" x5 s" X( l, @
[ -2, 2], e \) `0 R5 Y- A( W. H% z
[ -3, 3]
$ s: P! O0 Z; u) i4 j[ -4, 4]# S4 e I( M, @1 q
希望对需要的坛友有所帮助,也希望大家多提宝贵意见,共同进步 |
% L: y: G3 c& [0 L' J |
|