|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
solve函数是解方程经常使用的函数,有很多坛友在使用该函数时经常遇到问题,现简单汇总如下
" A6 O! b! C5 y1 \% o; K0 R) j一、使用用法老旧
3 R: d# S; F) V! p3 ~例
! V# d3 k; y* y- b* Y% j- syms x
- a=1;
- equ='x^2==a';
- xs=solve(equ,x)& j; L! H+ v1 P8 @& x2 c
. |7 q! J2 X M- A- T0 `
[color=rgb(51, 102, 153) !important]复制代码7 ?% g8 `) @/ c/ h8 v8 _
4 S6 I1 }# x$ I9 Z, P8 b
会报错
* Q3 V1 y+ b- ~# g. g IError using solve>getEqns (line 418)
4 @# A% j! C7 h* s, f5 dList of equations must not be empty.; n, e4 I/ K# o% H/ }3 n9 \2 v/ s; V) j
错误在于使用用法过于陈旧,现使用的MATLAB多为高版本
& l9 j; Q' l* x解决办法
0 f$ s6 n+ O2 j9 {使用用法改变,具体参见solve帮助文档
R* q/ |9 \0 [8 d8 J3 d5 G例. k# @3 v1 X, O+ V2 g; J$ _- H0 w
- syms x
- a=1;
- equ=x^2==a;
- xs=solve(equ,x)0 c: ?* }& f1 ^8 b
* v4 u* s) I- c" c! A4 d[color=rgb(51, 102, 153) !important]复制代码
0 G+ @! L0 x* D5 }4 J
: H, n# ^$ X+ }4 d' z: P$ k) Dxs =
: ~- ]; Z/ P% m" J1 p; h0 z: r: O! B: L* a, |( A, f
-1( \: [ o5 B: H, v! ?
12 q& x" l1 x* p! m; ^3 H! A
二、循环求解
* G# l, T& a9 _5 [8 S解方程经常遇到方程的一个或多个参数是变化的
( r; F2 P: Q' \5 n例如例子的变量a分别等于1、4、9、166 Z' Z0 J9 X7 [( k' s" x5 r. ?7 M
经常会出现以下代码$ N& g2 Q0 i' v. f
- syms x
- a=[1,4,9,16];
- equ=x^2==a;
- xs=solve(equ,x)
# O* t' i' z) Z0 X- Z+ W
! u4 t. I8 l/ ^7 F2 N- M, G* d[color=rgb(51, 102, 153) !important]复制代码
; E( @4 @) f# H* H- g4 R' l8 t
0 Z4 a, Y9 l5 O. {, F" F2 ~- l) jMATLAB运算无解
7 I$ M0 B" W8 _8 ^4 {xs =
' b- K& W8 Y0 ^: j, }
- ?* L7 c i. I: u! }, HEmpty sym: 0-by-1
: g3 F6 Q3 u9 ]! L' G这种情况应使用循环求解
+ c& ?" Q+ h" j/ I! ~但有时会遇到以下情况
) i* W& R3 |& F( p- syms x
- a=[1,4,9,16];
- for i=1:length(a)
- equ=x.^2==a(i);
- x=solve(equ,x)
- end3 f. S; q, o5 ^$ h
8 T* @: N' o2 B: M7 B, k9 ?[color=rgb(51, 102, 153) !important]复制代码
# J7 G @: u8 K* k. F
) w: W* i/ K. z, R/ W报错如下8 P- L9 C( q# h+ q
x =
0 q! {7 p+ o: b+ m' \) c' x2 O9 R D) j: `7 V: t8 R5 l8 ]
-1
; x% {- B$ \+ l9 L 1
/ P7 y" Y/ z/ U6 G% F& k/ p; ?( }6 i
Error using sym.getEqnsVars>checkVariables (line 92)
; _# n0 _' T/ Z8 fSecond argument must be a vector of symbolic variables.
2 M/ o7 s1 f* N* l5 n* Q$ b原因在于经过第一次循环后,变量x以转变为具体数值(-1,1),即导致在第二次循环中方程里无未知量( p& N! {( b) U# W e- y7 w5 G
解决办法保存解得变量名改变
l6 M$ _3 l. V. }/ A* t循环求解方程并保存变量的代码如下
/ ^9 x3 K4 P/ V5 B$ A- syms x
- a=[1,4,9,16];
- for i=1:length(a)
- equ=x.^2==a(i);
- xs(i,
=solve(equ,x); - end
$ s% _; j4 \/ L$ l' W, ^; b' v5 L " X7 g% i$ h4 v
[color=rgb(51, 102, 153) !important]复制代码1 e0 o% X' v; P+ g
3 n* z7 B+ U. _& a L% i运行后在命令窗口输入xs即可看到全部解如下
9 b3 I& j: m% {: V& s* O4 V% B' D>> xs4 L% Y% _. \. d# @( n: v( d
" n5 C/ U# f! M$ txs =
% v6 J! w: p* {. ~. M; U& H; {3 I; Q" `" p# U/ w
[ -1, 1]
/ x' b, l$ p" `[ -2, 2]* e3 S9 f; ~6 ~" R* @
[ -3, 3]
( \. I; \, c: E& o3 }4 [# q" I[ -4, 4]) O6 N3 y) p: Y. ?
希望对需要的坛友有所帮助,也希望大家多提宝贵意见,共同进步 | / h7 J! x, k& m/ V. X0 _
|
|