|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
solve函数是解方程经常使用的函数,有很多坛友在使用该函数时经常遇到问题,现简单汇总如下 p- e9 s h s7 V
一、使用用法老旧- }: i: E3 a- ~* J3 ^
例6 ?2 H( j; |% J4 O4 q4 P
- syms x
- a=1;
- equ='x^2==a';
- xs=solve(equ,x), X0 g' Q) a1 l+ p
3 Z0 j: _3 n- E* Z
[color=rgb(51, 102, 153) !important]复制代码
$ W* C$ K1 G8 r& c6 V9 p! i6 B& \; M: H" q2 N: d3 P, l
会报错
+ W& ~" i% ^! Z0 Q+ F! d( e6 a+ Q& ]Error using solve>getEqns (line 418)
- Q) L0 E$ o! n% r! o8 KList of equations must not be empty.
5 E3 q: B; v* u9 [错误在于使用用法过于陈旧,现使用的MATLAB多为高版本& I8 S# K6 M0 G& c/ j' L; T
解决办法
" q6 B! C* K/ o/ U; x X4 B6 u使用用法改变,具体参见solve帮助文档
* ~( B8 z- I* b. N% d例
! j$ M6 l; @1 c9 ~' M# \- syms x
- a=1;
- equ=x^2==a;
- xs=solve(equ,x)
( _3 C2 R" g. X5 u
' a* e Y* a# Z7 e1 y+ ], Q: G[color=rgb(51, 102, 153) !important]复制代码/ N! H& J$ r" a$ O- h; X1 K8 S
) b+ c W5 P# X6 a; Xxs =) c* A1 x% Y! B
: ]4 M& X8 R+ R; o+ c% u* R
-1
9 O ^1 X' J% { O4 g- } 12 M$ {$ u9 ~. T
二、循环求解
$ f# |6 V, [ T2 f1 t: f, t解方程经常遇到方程的一个或多个参数是变化的
9 Z3 S9 f+ t' T" c. v. U1 w例如例子的变量a分别等于1、4、9、162 I1 j6 Q3 @! ?3 X4 k$ S+ Z
经常会出现以下代码
3 A5 T* n' @# K) u/ |- syms x
- a=[1,4,9,16];
- equ=x^2==a;
- xs=solve(equ,x)
) ?5 c$ M, y& @& N; D. x9 [
. b7 f: I Y1 c2 ]4 L2 [" S% V: m9 k[color=rgb(51, 102, 153) !important]复制代码" J0 y' P W# F! k: e# w
( F% O7 B/ c4 p
MATLAB运算无解; o& \- W& P8 K" W) F& g7 c0 z
xs =% E& O2 Y" L7 n( ?% s: `
+ L8 ]5 t9 g* q* A/ n e
Empty sym: 0-by-1
% b+ ]+ d3 I0 l9 o& J3 v! v这种情况应使用循环求解. a# D r7 M ^$ T2 N
但有时会遇到以下情况
l! J$ D8 k; z, b4 q- syms x
- a=[1,4,9,16];
- for i=1:length(a)
- equ=x.^2==a(i);
- x=solve(equ,x)
- end
. d! v" y. ]' Y ~* c9 B / U7 O; \9 F) Q$ h9 v
[color=rgb(51, 102, 153) !important]复制代码$ N3 F4 _/ F' T: [) W
9 ~" K5 u* \2 r6 U' Z! o9 y8 M( u
报错如下
* R. B2 x" Q- o7 d8 `" I# ^x =
/ T/ g4 `4 r; {* I7 J" j3 A" V9 z5 r8 a
-1% H; B0 G' _" r* G* V3 o0 E/ K
1. t3 x& t) H8 y! D
, |2 A- z! q/ k$ R) U3 L
Error using sym.getEqnsVars>checkVariables (line 92)
7 j& L2 M& P5 Q6 v1 ASecond argument must be a vector of symbolic variables.
% n! ]/ }1 f8 s) ]; H原因在于经过第一次循环后,变量x以转变为具体数值(-1,1),即导致在第二次循环中方程里无未知量- R- I/ U! n( Z; A
解决办法保存解得变量名改变" `/ R3 m4 X! J
循环求解方程并保存变量的代码如下
- o2 B4 }% m# ?9 i% \! l* u- P- syms x
- a=[1,4,9,16];
- for i=1:length(a)
- equ=x.^2==a(i);
- xs(i,
=solve(equ,x); - end# B9 ?9 w! V" R2 C
8 k6 S2 P3 l/ N4 ?: d& ~% Y
[color=rgb(51, 102, 153) !important]复制代码& F, X" i! t) {
7 d/ Z5 V! w& B& ^( Y运行后在命令窗口输入xs即可看到全部解如下
9 k4 k5 J9 O! a>> xs) y3 l7 j: R P
/ ^& O/ F7 a# Y! N) zxs =3 g& O9 v/ H3 C% v$ u9 g/ c$ {
( m z4 ]5 b# x/ f2 P: B
[ -1, 1]# `& C9 J( E3 H1 M+ k* o( W
[ -2, 2]
! l# z$ o2 ]4 Q% O6 m" {3 p[ -3, 3] z3 R" V' V- g
[ -4, 4]% n" s, i* S; d
希望对需要的坛友有所帮助,也希望大家多提宝贵意见,共同进步 | 1 P8 G# o: g4 b' O$ h6 f
|
|