|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
solve函数是解方程经常使用的函数,有很多坛友在使用该函数时经常遇到问题,现简单汇总如下$ }, V5 j r0 u7 p: p
一、使用用法老旧
3 K+ i/ `5 U4 r4 f( t n n/ O. P+ N例. _" ^2 x* `. W# S, W
- syms x
- a=1;
- equ='x^2==a';
- xs=solve(equ,x)
/ J, U. N: P) u4 }' k( M
) {( |/ `8 O3 L, V( l, N; R[color=rgb(51, 102, 153) !important]复制代码
; e2 f0 v" i! _4 t" f; Y6 a/ [! A% }% b2 _3 C) X! N2 K) q) h9 P
会报错
6 w+ |- s8 t: Y9 ^# p8 _8 N4 PError using solve>getEqns (line 418)# v- A& e( M3 i: G' f
List of equations must not be empty.7 F5 |( H* n! `6 G
错误在于使用用法过于陈旧,现使用的MATLAB多为高版本" s. Z7 ^% X. |
解决办法. T6 z6 G- e" k3 j3 y7 c2 Y2 u) E& u
使用用法改变,具体参见solve帮助文档$ @1 L: t0 \; P/ J* }0 i
例
5 F5 N; Q% N, a4 _' r: _# g6 ^- syms x
- a=1;
- equ=x^2==a;
- xs=solve(equ,x)% |$ T0 D+ A F- A9 |; K) l
) |; K p: L6 h" ~+ R0 y; i4 }( j J* y[color=rgb(51, 102, 153) !important]复制代码" H% O c3 P, S4 i+ C; o
8 f+ O7 @( o8 V2 h
xs =- y3 e1 `% a# m! h5 ^7 P
0 D- c) y0 V {# A& {2 I' w
-1
9 s! U' U4 P f/ C& _ 1! A4 `* N: K. Q/ m* H
二、循环求解
1 \3 I) J1 x1 W! X解方程经常遇到方程的一个或多个参数是变化的
5 Q% p, Z8 d, q$ T1 l例如例子的变量a分别等于1、4、9、16
( N1 m B1 }8 b经常会出现以下代码
/ o, N0 b1 W9 R! }8 N- syms x
- a=[1,4,9,16];
- equ=x^2==a;
- xs=solve(equ,x)' L5 I4 B' v5 \: q7 `0 f
, U& h4 ~; Y+ N- R) g0 ]
[color=rgb(51, 102, 153) !important]复制代码+ _; o5 ]' u& H/ P; j' C
2 u9 A' @' _. r( I* m0 A }MATLAB运算无解
+ A5 I7 T; _- wxs =
- J/ c9 L! b2 M: g* e: b; F# S; B0 @' I. `7 c2 _) G, T
Empty sym: 0-by-1$ f# |, B' H5 b4 R
这种情况应使用循环求解
4 d( K0 q9 }9 X但有时会遇到以下情况* M$ V5 ?' a7 S6 N @5 S
- syms x
- a=[1,4,9,16];
- for i=1:length(a)
- equ=x.^2==a(i);
- x=solve(equ,x)
- end( i ^+ w F; `: ?1 I6 r* }: p3 p
: {1 W& S! U8 @
[color=rgb(51, 102, 153) !important]复制代码3 v" K/ _7 `' ]% Y) t- b" N
$ n H- m4 i* v/ K, d, ^$ ~$ c报错如下
/ Y4 e$ r! y( v7 d) D8 Dx =) G# k0 \5 O: t4 S& t3 {
, I& s/ c, s9 s4 t-1
+ m4 A7 s$ F' s+ A3 u6 C# D/ L 1* S, i' x9 g- `; V3 m: \+ k
/ L" d0 e; k( y% p) b( J" j; l: ^Error using sym.getEqnsVars>checkVariables (line 92)! d& J) y& b+ m9 n% v. ^4 n! F1 K
Second argument must be a vector of symbolic variables., Z7 Q5 o1 [! U* _7 T
原因在于经过第一次循环后,变量x以转变为具体数值(-1,1),即导致在第二次循环中方程里无未知量
* Z- i3 F5 C# H% N Q& A+ t/ T- ~1 b解决办法保存解得变量名改变
+ k, b% A6 W& M9 y9 h: W: c: d8 T5 X循环求解方程并保存变量的代码如下
5 ^' n- l6 Z1 [% {& ?& v! d- syms x
- a=[1,4,9,16];
- for i=1:length(a)
- equ=x.^2==a(i);
- xs(i,
=solve(equ,x); - end" t3 U! T2 C/ F" w
# g8 x) r* G+ {, X2 ~
[color=rgb(51, 102, 153) !important]复制代码3 Y# I4 ?; {: M
" o5 o- T6 ]: b- _5 l
运行后在命令窗口输入xs即可看到全部解如下
1 A( j3 X5 j; l7 R& U) x>> xs
5 D* j k1 D c6 q
! V E" ^( n( k8 M$ b6 zxs =. ]& q3 i: h6 U6 a" N5 A4 X
4 i( }# @: l5 \- |* l* W" u0 o
[ -1, 1]
& D( |, z* Y. w- A% K[ -2, 2]; X+ |4 X& `) D. b8 x
[ -3, 3]8 u1 f# U0 N1 t: J3 E
[ -4, 4]
# }0 W4 D6 h9 s% Z, n9 @% B+ x$ _希望对需要的坛友有所帮助,也希望大家多提宝贵意见,共同进步 | 3 d' O' {. k. n0 ~7 O
|
|