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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
solve函数是解方程经常使用的函数,有很多坛友在使用该函数时经常遇到问题,现简单汇总如下
/ O+ F5 Y! C% M+ `8 E' ]+ d5 P一、使用用法老旧
; [( e" g: ]& A% B5 M0 R# M+ B7 G3 y$ D' \7 t& s  E( o% a4 N
  • syms x
  • a=1;
  • equ='x^2==a';
  • xs=solve(equ,x)
    $ J/ p2 \7 C# O
/ P& P3 r7 N! U
[color=rgb(51, 102, 153) !important]复制代码
/ ?3 j9 r( J: m# T3 ?
5 q& V: h% M* s  Q
会报错$ G! ~% F; A; [; o: `' {
Error using solve>getEqns (line 418)
% |- y( p$ E+ RList of equations must not be empty.
/ g. `" m2 C- h- I- o, h8 O
错误在于使用用法过于陈旧,现使用的MATLAB多为高版本3 \5 s# Z0 j  d5 U7 J
解决办法0 ]  J& R( j8 Z0 P6 l& o
使用用法改变,具体参见solve帮助文档
. G8 f0 j& H! C2 T. y, [
! T  a* c# Q0 w* s5 i: H) T+ [
  • syms x
  • a=1;
  • equ=x^2==a;
  • xs=solve(equ,x)
    / n, U! e8 g# T( X% _
% L& \( \4 T9 M, U" \3 x
[color=rgb(51, 102, 153) !important]复制代码

; f1 [+ {% Y) c" k4 Y7 g( |/ h- L, s6 T1 |3 H0 u
xs =
& ~' M( E, r+ @! h" o1 Q3 V/ t3 \! N8 v' X7 Z( G/ p
-1  m" `- H; @/ k0 h9 Y
  1/ H0 i) o% c9 P
二、循环求解
1 N3 e! T  V+ Q( e; ]0 z- w0 K8 m解方程经常遇到方程的一个或多个参数是变化的4 d$ ^" e7 j( Q
例如例子的变量a分别等于1、4、9、16
! o  k9 B' @4 C! o3 z9 c3 @经常会出现以下代码5 N' ]6 X: `1 k* R& q( x6 J1 l
  • syms x
  • a=[1,4,9,16];
  • equ=x^2==a;
  • xs=solve(equ,x)" c  o$ C0 Y+ ?+ U/ t
, @* q7 B9 B5 p
[color=rgb(51, 102, 153) !important]复制代码

0 S8 J0 s. H2 H. ^$ ]) O
' b) ?& Q5 V0 r2 f/ C' ?! ?( _" N+ AMATLAB运算无解' e8 v% w+ P7 o
xs =9 @1 a+ D5 O5 _- m, d# z
8 ]+ {3 ]& @* e2 ^- \
Empty sym: 0-by-1

1 @- J: o( p/ |这种情况应使用循环求解0 Y5 e9 Z2 g, k
但有时会遇到以下情况, ]+ e( h: T2 x0 }6 ~
  • syms x
  • a=[1,4,9,16];
  • for i=1:length(a)
  • equ=x.^2==a(i);
  • x=solve(equ,x)
  • end
    ' _, q; w9 `* Y% B
0 g( T/ s- m: r% Z5 h7 T
[color=rgb(51, 102, 153) !important]复制代码

. N( v; H6 J& h+ }3 b$ \! R7 ~
# x# V- e; ^* \( L& w7 i报错如下
9 T" I, t9 d# D) @x =
7 V1 H& [1 a; X4 y4 p) C1 @# J0 _
3 a" F8 N7 v. N-13 f7 t% n" d- `% h" G1 y
  1! s& `& S, u$ {# i
8 Q; M8 c# {. O5 ^" t7 M0 Q
Error using sym.getEqnsVars>checkVariables (line 92)
2 S( a+ J7 |; c% NSecond argument must be a vector of symbolic variables.

4 o$ H9 \3 G1 `, r" w" X5 L+ C原因在于经过第一次循环后,变量x以转变为具体数值(-1,1),即导致在第二次循环中方程里无未知量" e; D. b; {  V/ {
解决办法保存解得变量名改变
1 M- h- Q% R% F循环求解方程并保存变量的代码如下
9 u5 e6 L1 y5 j8 O
  • syms x
  • a=[1,4,9,16];
  • for i=1:length(a)
  • equ=x.^2==a(i);
  • xs(i,=solve(equ,x);
  • end
    ' Y: B) y8 M! C/ r$ S
+ c+ R% r" U1 u. g3 L; ^
[color=rgb(51, 102, 153) !important]复制代码

) o+ s- ~5 l2 @6 t
8 F' I) x6 o0 J* N, r2 _/ \运行后在命令窗口输入xs即可看到全部解如下' j( _+ [. D$ N2 m: V! K
>> xs
) H/ M9 _2 ]! ^& t  A+ `3 {7 U( U+ m. b1 R
xs =
" P% c* |: m: l* M
8 d& P  _" G+ B1 W[ -1, 1]6 n' q9 j! \! @; m( i4 `6 T) l
[ -2, 2]
  p2 M6 `  C" g9 `1 }. t; x, o, `[ -3, 3]
4 b& W* H7 B: `! T" _! R) }0 W[ -4, 4]) ]3 H. s- d7 B8 V* z* _' W
希望对需要的坛友有所帮助,也希望大家多提宝贵意见,共同进步

, z# e: p4 k1 A+ C/ G3 ]
  • 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 10:17 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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