|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
solve函数是解方程经常使用的函数,有很多坛友在使用该函数时经常遇到问题,现简单汇总如下
* G! F' j0 q# q( F$ M, r7 g/ \% D一、使用用法老旧
9 N2 V0 h5 o, P4 I例4 a- ]3 F: N6 m7 ?/ g$ {
- syms x
- a=1;
- equ='x^2==a';
- xs=solve(equ,x)
( f) A. A P# W1 I
5 G. U2 _: k R/ W6 |2 M0 h[color=rgb(51, 102, 153) !important]复制代码
# T7 r) X# f7 U1 ^* {$ @' G; l: M* M- I* k5 y& f2 g/ ^
会报错
( M& G; R; Y- J/ l. D9 X: EError using solve>getEqns (line 418) _# T' E7 m, ` K( Z. l7 D( N, _
List of equations must not be empty.9 C" L7 }/ F. N/ E+ P+ g6 _8 f- S3 C
错误在于使用用法过于陈旧,现使用的MATLAB多为高版本
G: \! m H s解决办法# v: M/ G5 u3 T, ^# W* h( B; ]
使用用法改变,具体参见solve帮助文档7 U* [+ a' G1 {- E: ?" y( f
例
+ q- |( F0 o! C% z- syms x
- a=1;
- equ=x^2==a;
- xs=solve(equ,x)2 t7 u5 D, i+ |9 b
2 j. T5 d* e0 ?) V1 j$ z [[color=rgb(51, 102, 153) !important]复制代码
0 o$ H* G9 J+ a/ c. A5 D" K3 f' ~, i _
xs =; F" D$ g+ i: q6 d1 n8 f0 q
4 l/ o3 ?) R0 K& ~' v3 U3 C/ |
-1+ s) o& ~: u3 F9 n0 }( \- T1 \! C
1
- S1 @2 M$ P' f' J- }% K0 q" r$ ~二、循环求解
1 p/ D3 C! R* h; I0 F解方程经常遇到方程的一个或多个参数是变化的
+ M1 e6 d9 u3 H7 E. e+ p: P例如例子的变量a分别等于1、4、9、16
9 @2 E- I" o8 n' \经常会出现以下代码
- Q! p& R# l9 D. L' _9 p% F- syms x
- a=[1,4,9,16];
- equ=x^2==a;
- xs=solve(equ,x)% B' v; n# }' X7 j
+ u7 w5 p0 |# X) a
[color=rgb(51, 102, 153) !important]复制代码
0 ]' [5 [( [( ?( c/ R5 x/ U9 ], a3 k1 \ C( L8 l1 ?# t x: `5 V
MATLAB运算无解: ^3 d3 q$ h% J
xs =0 u* i6 S7 \; a; E
; _- J7 N1 K# o* d+ b; c5 j' }Empty sym: 0-by-1
& F5 b2 _( u y0 ^6 f这种情况应使用循环求解
2 G, [. B0 L7 F. p" P0 m' H但有时会遇到以下情况) @" G+ t, x& y" E/ A* ^3 [# V! a) I. W
- syms x
- a=[1,4,9,16];
- for i=1:length(a)
- equ=x.^2==a(i);
- x=solve(equ,x)
- end# C+ U5 r* B6 k, r% s, Z- t
5 i# d8 D" Y) B2 ^- [
[color=rgb(51, 102, 153) !important]复制代码% j7 ~! B, D6 E6 [
% y2 t/ R3 O1 ~" ^! ^3 ?, _报错如下' K/ W* q, F8 t0 {
x =& h4 B! t6 N9 s$ z: y, E
) S% ?% O' }3 J o" ^( S: B7 N-1; e" y% @% ]. {' `- a# e$ K' v8 g
1
% n& c* I; Y0 B, t# T
2 i0 _! j! \# d4 `8 s+ NError using sym.getEqnsVars>checkVariables (line 92)
- g2 N4 S, x+ b8 G3 QSecond argument must be a vector of symbolic variables.
$ w' H& G9 x, l1 B. `; |- E2 i. ?3 H2 I0 I原因在于经过第一次循环后,变量x以转变为具体数值(-1,1),即导致在第二次循环中方程里无未知量$ U' L+ G7 N( M- O& }
解决办法保存解得变量名改变& N& W d6 {5 f E4 m
循环求解方程并保存变量的代码如下" P' v$ ?) F1 ^; S
- syms x
- a=[1,4,9,16];
- for i=1:length(a)
- equ=x.^2==a(i);
- xs(i,
=solve(equ,x); - end
; k# W6 f+ G" z4 r3 M / w9 T( X; J6 F# {
[color=rgb(51, 102, 153) !important]复制代码/ _9 l! y! j) r* [% p
% ~/ v1 J A0 e% a
运行后在命令窗口输入xs即可看到全部解如下1 x2 U2 |0 f4 E9 X1 U3 {
>> xs# E* S2 f5 s) d1 S) d$ j7 q5 r8 U, E
% J0 `& Y( u6 Q# b, P- L, ^" Xxs =
6 m5 N" C; q. R5 T2 G* z0 ]
8 @: D. r" h' O[ -1, 1]1 h, Z% t) P7 {- _" M; n
[ -2, 2]
' ~, F1 X. ?; B8 e# N! A9 X' f[ -3, 3]+ w* }3 ]4 n; x9 H( v
[ -4, 4]
' p5 U8 c/ E! x% b6 r' A7 _希望对需要的坛友有所帮助,也希望大家多提宝贵意见,共同进步 | ; h3 {0 B# v! T
|
|