|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
solve函数是解方程经常使用的函数,有很多坛友在使用该函数时经常遇到问题,现简单汇总如下" f" x( m: U- N* p7 ~/ j
一、使用用法老旧$ @$ C: S2 p" f8 I# p. X' \6 V
例
5 \+ ]- Y3 R9 w) U7 ]2 H- syms x
- a=1;
- equ='x^2==a';
- xs=solve(equ,x)1 v0 K% z. H* Q5 {% R9 ^! I7 U8 d
1 ^5 B( x/ J' n# `2 F4 q
[color=rgb(51, 102, 153) !important]复制代码- F* g7 F# s/ j- }$ L$ x
; o' L& U; t1 ^+ {( }% R) N1 h
会报错0 Z/ m" |' a- V6 g) Y; D" r" J
Error using solve>getEqns (line 418)# `0 K) y6 |" V$ J" D
List of equations must not be empty.: u! ~7 I/ V1 G: t; n
错误在于使用用法过于陈旧,现使用的MATLAB多为高版本
5 N" g U! D U$ ^ |: i解决办法
+ t! n B% h! M$ E* `使用用法改变,具体参见solve帮助文档! p& d# g- r j4 e; M' k* h% R5 c
例
7 J1 ^9 ]8 r7 l8 }* \- syms x
- a=1;
- equ=x^2==a;
- xs=solve(equ,x)
# e/ T( J+ g0 \, ]7 R" P# p2 ^( O & A% H- U; e, ^, ~" C" l/ R
[color=rgb(51, 102, 153) !important]复制代码
( f* O/ o7 c1 f- Y3 u3 ?9 |
2 V$ t' U0 f1 I' ?7 _' Gxs =
9 k; X6 Z" c; |& d+ k. U
' Y r) O1 @* |-1
) r) g4 m' z1 A% w% D" c* l3 l 18 e& X1 ^+ Y9 k- F u& E/ v/ @9 _8 \# r
二、循环求解 C3 F t# ^: ~! i$ s* U0 f
解方程经常遇到方程的一个或多个参数是变化的* i9 ~1 C9 R9 l* {
例如例子的变量a分别等于1、4、9、162 R( \/ u- Z, K; I0 f- G+ ~
经常会出现以下代码4 `/ M' V% P! ^5 ?
- syms x
- a=[1,4,9,16];
- equ=x^2==a;
- xs=solve(equ,x). {! s6 r: ?/ V k1 f" c
' ?! Z% K m q
[color=rgb(51, 102, 153) !important]复制代码' R8 t3 I' V+ D2 q
* @ V. S" O4 U: W+ Y7 z% l
MATLAB运算无解9 g, o/ p7 _0 K6 X2 V+ B' f
xs =5 W1 R* `1 R- `! v ^. s% }6 l
$ R( |+ g# A& |! a4 Z. M( ?$ |) sEmpty sym: 0-by-1' N" g) d0 R1 I" x. |* |( ]
这种情况应使用循环求解
b( h3 q. a, e# J5 Z但有时会遇到以下情况; r, D) D0 e: }7 P, T! B
- syms x
- a=[1,4,9,16];
- for i=1:length(a)
- equ=x.^2==a(i);
- x=solve(equ,x)
- end
9 c1 x( r* i+ t& D7 j
1 q* `; r5 G9 `4 g9 |# v7 M[color=rgb(51, 102, 153) !important]复制代码
9 j* S% J5 g1 B5 f f. y, @! e% m5 E5 R$ M4 E+ e
报错如下
0 y6 }3 a$ {, C7 N$ p( Jx = n" `# W, [# ], E2 {
8 W0 W2 p& ~" X% f( U* P-1. _4 B2 X e9 D8 M: K; a6 Q( Z% {) O
1
# b+ b7 p8 E# o' I' [* \( |# E" O( L: ?, q- Y' h
Error using sym.getEqnsVars>checkVariables (line 92)( X/ t. G: t0 ]1 H( \ [
Second argument must be a vector of symbolic variables.
8 Q$ V, V; l% D( J0 k9 R9 q原因在于经过第一次循环后,变量x以转变为具体数值(-1,1),即导致在第二次循环中方程里无未知量
) \- C: T( g: o) ^# X解决办法保存解得变量名改变/ W2 X: J3 @# L
循环求解方程并保存变量的代码如下
$ j# G6 \: K( j# \! K7 p; o- syms x
- a=[1,4,9,16];
- for i=1:length(a)
- equ=x.^2==a(i);
- xs(i,
=solve(equ,x); - end& f4 p, A' g- v1 o- V# j
/ I8 C. ?/ Z4 {1 D- M& z4 b& r# f( I[color=rgb(51, 102, 153) !important]复制代码
1 m# J6 S- \( A. I$ a8 l# D; o' _5 d* v/ Q
运行后在命令窗口输入xs即可看到全部解如下+ y- e! q/ s6 c+ ~ W
>> xs1 ]$ O( }2 d1 A$ r; M6 h
0 |$ R8 ?# S% N: [& m
xs =/ E0 m2 m4 E6 h/ H
/ Y, K @; o( Z& S[ -1, 1]
& O3 l3 V& W4 `6 f8 g" z: l' M( V[ -2, 2]
; b* W" e. |' x. _[ -3, 3]
0 r* N9 N' l7 W5 I8 I[ -4, 4]) G4 I& t8 h' d4 P" Z( G
希望对需要的坛友有所帮助,也希望大家多提宝贵意见,共同进步 | ]$ u5 ?! O4 e. o2 F
|
|