找回密码
 注册
关于网站域名变更的通知
查看: 519|回复: 1
打印 上一主题 下一主题

solve求解方程的若干常见问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-10-20 13:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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
  • TA的每日心情
    开心
    2022-11-22 15:53
  • 签到天数: 2 天

    [LV.1]初来乍到

    2#
    发表于 2020-10-20 14:39 | 只看该作者
    楼主很细心
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-24 09:04 , Processed in 0.156250 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表