|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
solve函数是解方程经常使用的函数,有很多坛友在使用该函数时经常遇到问题,现简单汇总如下1 d; x9 }% Z4 \& B
一、使用用法老旧: A) \ S$ K' }* y$ b4 b) Q
例
! R F0 Y& h3 w! d/ P# J% K- syms x
- a=1;
- equ='x^2==a';
- xs=solve(equ,x)
$ @% m$ w+ Z6 m/ L
( ^+ ]/ I# @/ @' v6 f4 I[color=rgb(51, 102, 153) !important]复制代码
3 G W5 f/ h8 J9 S
( l( L8 `. @9 `6 d! Z% a会报错
% S4 L1 F6 P3 J9 aError using solve>getEqns (line 418)
4 U7 X8 O8 f2 v1 a; }0 s0 v2 F3 ^List of equations must not be empty.! I/ q* t: F7 I& S4 p5 ?
错误在于使用用法过于陈旧,现使用的MATLAB多为高版本
" Q* q% B: N" p2 P. X" y, [5 x解决办法9 y/ q S: R0 m/ T! @
使用用法改变,具体参见solve帮助文档
4 B5 c2 u1 u' s7 ] Z7 v! @6 [例 J5 k+ D1 H3 V" F! ?1 n
- syms x
- a=1;
- equ=x^2==a;
- xs=solve(equ,x): |3 Q7 @0 Y( N; b8 _, A
8 x) s4 k+ p5 k& j' e1 A[color=rgb(51, 102, 153) !important]复制代码
J- C& g0 Q }) P7 X* W: p: @( h+ _# R( `0 |2 [( t5 U
xs =; J+ P3 m `- O: [; N1 i7 }! K& g
# i2 @, X0 e4 v2 `8 o/ m6 }. p-1
$ K( B" n2 o8 V. J$ { 1/ d/ [1 n+ q$ s
二、循环求解
& p( H. N# @! b, ?* j7 B解方程经常遇到方程的一个或多个参数是变化的. F% a) [0 U9 j" H# \; P& ~+ O
例如例子的变量a分别等于1、4、9、16% I7 C& k$ |& s2 q1 `
经常会出现以下代码, E, S$ p5 m5 t# y0 g" f' h/ n# j R6 m
- syms x
- a=[1,4,9,16];
- equ=x^2==a;
- xs=solve(equ,x)
" S& K1 P" M6 H; c4 ^3 q + h8 ]% \$ Y) V
[color=rgb(51, 102, 153) !important]复制代码
0 Q6 f8 l. Z# }( _
2 Q$ j8 x7 P% ~$ i" j& d$ yMATLAB运算无解
# |3 M$ E. [" _" c7 F% [xs =$ h7 |% R( M% i0 \- W
# V% m& {5 N |( Y5 a& \9 `
Empty sym: 0-by-1* d" t* z/ @6 \0 u$ I
这种情况应使用循环求解& j( [; s: h: J* Z$ Q3 @
但有时会遇到以下情况- h/ v4 |4 A* \" [' y
- syms x
- a=[1,4,9,16];
- for i=1:length(a)
- equ=x.^2==a(i);
- x=solve(equ,x)
- end
8 K7 v8 |( a/ Q! n2 a' s
3 z1 g0 c3 `: \& k+ h( T* L0 u/ w[color=rgb(51, 102, 153) !important]复制代码" W+ ]; I, H" t$ C j+ n' d/ j) b @5 |
6 m* Q: u! P5 y5 D4 i' b% m, F V
报错如下
; w& i6 Z* D/ H9 ?x =
+ Z( }6 Z5 v+ s" o) f2 x( b) u" s2 P5 r6 [4 w, W0 \3 d% d
-18 d0 ^+ s$ E' J Z9 w
1
% o) W: z0 F3 c, w/ z, R |9 {8 S) M: u
Error using sym.getEqnsVars>checkVariables (line 92)" I# _3 M7 S& n/ L1 }: |
Second argument must be a vector of symbolic variables.$ C0 `, `! N$ U$ g, G* a1 J
原因在于经过第一次循环后,变量x以转变为具体数值(-1,1),即导致在第二次循环中方程里无未知量
, ?( Z8 n5 k* B0 c/ U f8 x解决办法保存解得变量名改变
7 b4 E5 f6 |- `) ?' Z循环求解方程并保存变量的代码如下/ x+ W2 v0 l; \& H) R; k# y
- syms x
- a=[1,4,9,16];
- for i=1:length(a)
- equ=x.^2==a(i);
- xs(i,
=solve(equ,x); - end6 Z7 s+ }9 q% W f) U3 C; N# w& \
( m6 O( k5 x% v9 R- Y( X4 e
[color=rgb(51, 102, 153) !important]复制代码
6 J# w2 N' u+ Q" l+ U8 I+ z3 H& s* F4 B- [5 ^7 X
运行后在命令窗口输入xs即可看到全部解如下
1 h( _$ C) u8 n' v! z>> xs
, Y$ z, o4 p# `* B% v; Y: \; t! r+ G& P: o9 H; O# z' N0 c6 {
xs =" Y Z2 t: A3 @# ]; |
3 O& z/ G; u$ |, |7 B/ m! c# L
[ -1, 1]% X. R( S( g& x" b7 i2 C
[ -2, 2]5 ~, \' O& a. v7 R8 W) [
[ -3, 3]
6 i; V8 A3 v# N3 E" h Y[ -4, 4]6 R5 _4 D3 b/ @9 W6 W* h/ |
希望对需要的坛友有所帮助,也希望大家多提宝贵意见,共同进步 |
5 T' G+ P+ I' n/ I Y, f4 B |
|