|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
solve函数是解方程经常使用的函数,有很多坛友在使用该函数时经常遇到问题,现简单汇总如下, ~. d/ X: @1 f. o9 s }
一、使用用法老旧
" x0 L' Q- u9 k, B% g7 F例$ D% J: d7 a' `
- syms x
- a=1;
- equ='x^2==a';
- xs=solve(equ,x)1 H O! S( M7 P8 E# q
. a" f' g$ z+ ~; b0 }( P[color=rgb(51, 102, 153) !important]复制代码
' x7 z, v, I& `8 v( P/ l' H; x9 T. c# U* R
会报错' A+ D& P% y) {: x4 q" z& J
Error using solve>getEqns (line 418)
& U1 ~" F0 L! E1 `List of equations must not be empty.1 [1 o, I! U( ?- T. Y2 x
错误在于使用用法过于陈旧,现使用的MATLAB多为高版本
( Z2 T% e1 o: ~2 D j# S3 @4 ?1 D解决办法% `) S, ~+ {5 l' k7 `
使用用法改变,具体参见solve帮助文档' o. h0 s( X/ S- ]( n9 s8 P; ~
例
, Z" b0 R/ q& _/ Z- syms x
- a=1;
- equ=x^2==a;
- xs=solve(equ,x)
, R- `. o0 M2 R5 a
1 k5 D& b0 o# R[color=rgb(51, 102, 153) !important]复制代码
2 L5 ~4 V/ J( b- v0 F0 z
; I& Y; d2 W* }3 E! o, I& ^0 R0 ~& Oxs =
5 h6 x! h+ s/ G! O
/ U+ u/ `0 T1 J: O; M9 N% Z-1
6 R% B1 J z* }* t0 I. w% j 11 o, `2 j% k+ b+ ], V! L4 o3 ^
二、循环求解/ [% l7 L. T; |4 H
解方程经常遇到方程的一个或多个参数是变化的
) M9 S- R9 x) |: M n例如例子的变量a分别等于1、4、9、16+ X+ D& _. x- j$ Z. X1 I' {3 q
经常会出现以下代码 k; Y& g8 ^9 H; z- C
- syms x
- a=[1,4,9,16];
- equ=x^2==a;
- xs=solve(equ,x)
2 u+ [& Y' [, c# W" f: O
+ ]+ E/ S' u( f[color=rgb(51, 102, 153) !important]复制代码) c# f: c0 [/ w4 @; c1 B
; E, }8 m+ O/ | x! U5 ?* ]MATLAB运算无解; Z0 B+ Q+ b' b8 Q6 K
xs =) @: ^; W1 X" _3 {0 \- |
- f R* B) f9 l% gEmpty sym: 0-by-10 f4 l9 L) w9 _! }& ]1 ~
这种情况应使用循环求解, o4 n9 U8 o. _6 z( E
但有时会遇到以下情况1 b, b# x+ A, P3 n/ z) x) M
- syms x
- a=[1,4,9,16];
- for i=1:length(a)
- equ=x.^2==a(i);
- x=solve(equ,x)
- end
6 }* B. E; H- h % i Y# z6 ~ U* i& |' P
[color=rgb(51, 102, 153) !important]复制代码& H g& N5 G2 t( R9 O
: V# K* d$ ]' k: o: K+ N+ J4 P报错如下
" U6 Z( _; K) E3 b# Z; ?, N, c/ u& gx = K+ N4 u9 e+ z- C2 a
|0 s: L) p2 p6 a, r" d( z
-1" @' n8 U# ?# O6 e# r: e
1
, t4 }8 Z0 G7 K& ~' F3 T: \/ Z* u1 O" W
Error using sym.getEqnsVars>checkVariables (line 92)
9 ^( ]) G* W, Z- C9 r' [Second argument must be a vector of symbolic variables.
" ]% z5 R2 X% [8 Z* I$ U原因在于经过第一次循环后,变量x以转变为具体数值(-1,1),即导致在第二次循环中方程里无未知量
$ A1 [ n) B a: F J解决办法保存解得变量名改变: }( b9 x7 z4 ?& `
循环求解方程并保存变量的代码如下7 l& ]8 J, s& U) ^ e
- syms x
- a=[1,4,9,16];
- for i=1:length(a)
- equ=x.^2==a(i);
- xs(i,
=solve(equ,x); - end
. V; z. T2 y1 c; a9 Y8 Y 2 A6 d, F& O2 a C7 T) Z9 p) d: W
[color=rgb(51, 102, 153) !important]复制代码
. d0 y& ?1 j$ _- d
5 Y5 S M4 R0 O" {' Y! Y7 Q% ?运行后在命令窗口输入xs即可看到全部解如下- ]3 B9 |. ?6 [5 \( H
>> xs
_2 A" {0 O9 C. h* I/ M) j S) O
& U& ]/ i: Y7 Z& dxs =, s# [- {! g" P5 s; t
, Z* t% W Y) C2 {[ -1, 1]! o8 c$ M# k, N. M2 n/ X: k8 h
[ -2, 2]* }$ P+ u. Y) }. }0 y
[ -3, 3]
5 ^$ T1 L+ h/ b: P+ r4 u' U3 a[ -4, 4]9 V1 o+ E- q9 }# I
希望对需要的坛友有所帮助,也希望大家多提宝贵意见,共同进步 |
/ h( w; }3 O" p4 U |
|