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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
solve函数是解方程经常使用的函数,有很多坛友在使用该函数时经常遇到问题,现简单汇总如下
% M* X; l1 G, G5 {* M, D/ }, T一、使用用法老旧+ A9 T8 f) \/ ?- ?
3 m( q! {2 D$ O/ M8 w
  • syms x
  • a=1;
  • equ='x^2==a';
  • xs=solve(equ,x)
    ; Y2 {5 z" s. J0 L, k
/ C3 p! X7 S$ U1 M9 N( I
[color=rgb(51, 102, 153) !important]复制代码
) Q' _+ G4 O- i0 P. [, t$ t! U

) d# B2 ?; w4 H8 k会报错5 |2 I  V/ Y1 H+ C  Q
Error using solve>getEqns (line 418)
1 C9 s; ?. J4 }$ Z$ T- f0 l) JList of equations must not be empty.
* z2 u9 {+ f& Q3 Y
错误在于使用用法过于陈旧,现使用的MATLAB多为高版本3 {, m- k6 }6 w, r
解决办法
$ m: |1 Q9 \$ k2 J3 J使用用法改变,具体参见solve帮助文档
5 q9 A5 q: L/ P2 W& k4 l( a: z  w# d; ~( @+ Q
  • syms x
  • a=1;
  • equ=x^2==a;
  • xs=solve(equ,x)
      L1 e( q2 R( A, r4 |+ `
. a  T' K& a. \! Y5 t/ Y/ c
[color=rgb(51, 102, 153) !important]复制代码
5 u0 N# T; h- H& I

" S) y2 e- q: K/ L- o/ ]$ Dxs =) C( m: h3 Q, A* I

5 ~* a# j, Z. @% i-1+ i  `4 F1 y+ ]. K6 b9 s
  1  A2 Q# f* L& F% P1 D
二、循环求解. o3 d' n' s% y
解方程经常遇到方程的一个或多个参数是变化的: s' X) I- L- \  r$ S( X; k
例如例子的变量a分别等于1、4、9、16
: j4 V+ v* I1 W8 L( I8 E( ^6 H经常会出现以下代码3 ?' T4 J/ P4 n
  • syms x
  • a=[1,4,9,16];
  • equ=x^2==a;
  • xs=solve(equ,x)* M( I9 P- u6 Z/ H- N! w6 p
9 [3 H5 p  J( x6 v1 R7 E; i
[color=rgb(51, 102, 153) !important]复制代码
# _& z) g8 w' C/ O
! x. V/ g3 t" G- A0 _
MATLAB运算无解6 s6 H1 y3 l1 d* m. j( }0 p
xs =
( u: \+ I" }( `7 F8 P" s) r, Q5 P; }: C& R
Empty sym: 0-by-1
* L9 m" Q9 v9 L6 ?6 H8 O& j# ~
这种情况应使用循环求解
- C! K$ h0 p0 M% N5 C+ Q. R- Z+ N$ V但有时会遇到以下情况
9 K* N/ k/ v4 k7 K4 z% m7 N
  • syms x
  • a=[1,4,9,16];
  • for i=1:length(a)
  • equ=x.^2==a(i);
  • x=solve(equ,x)
  • end% `% q& n+ M- n$ h

: ^) @+ Z" T- x* P/ M2 k# Y3 ^0 l[color=rgb(51, 102, 153) !important]复制代码
9 q4 _% _- V$ v4 K5 v

1 ?; _( l4 R+ z报错如下  I+ A- L4 ^0 h% {  ?4 X# t+ e
x =4 |6 H% C( E5 ]$ \+ Q: [

0 K4 c! C6 D* ]" o  Y! k5 W- ]-1
1 ^. t2 t, z0 O3 a  1
9 f" T! V- q) }& ~" T$ r$ L; k6 m" B& `9 X7 s! a' g7 a$ o
Error using sym.getEqnsVars>checkVariables (line 92)
# d0 N1 C: _" |0 ?- Y- vSecond argument must be a vector of symbolic variables.
3 R. U* A2 f3 P! q
原因在于经过第一次循环后,变量x以转变为具体数值(-1,1),即导致在第二次循环中方程里无未知量6 o2 i! c! l: k! {" o
解决办法保存解得变量名改变
/ ^/ y8 ~9 n) k" s循环求解方程并保存变量的代码如下
: v% O3 @" H7 `4 v( B5 b8 |1 N
  • syms x
  • a=[1,4,9,16];
  • for i=1:length(a)
  • equ=x.^2==a(i);
  • xs(i,=solve(equ,x);
  • end
    8 `* T$ @: L$ |, Z. t5 `
2 p' U9 t# Y  H8 E$ A3 [7 c
[color=rgb(51, 102, 153) !important]复制代码
  ]2 W* @" P% x# J3 y! Q' P
$ ~: i7 v  H; x1 V& A, O
运行后在命令窗口输入xs即可看到全部解如下" ]6 I$ [1 O0 ?2 C5 ~
>> xs
* x; U! j  D, {- y/ q" ]0 p2 O- s0 y* g) Z0 s' q
xs =
" K: I! N( S* s' w  r2 F+ `# G9 @* _, Q3 f( i
[ -1, 1]7 A# h8 B+ E$ ^" x5 s" X( l, @
[ -2, 2], e  \) `0 R5 Y- A( W. H% z
[ -3, 3]
$ s: P! O0 Z; u) i4 j[ -4, 4]# S4 e  I( M, @1 q
希望对需要的坛友有所帮助,也希望大家多提宝贵意见,共同进步

% L: y: G3 c& [0 L' J
  • TA的每日心情
    开心
    2022-11-22 15:53
  • 签到天数: 2 天

    [LV.1]初来乍到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-8-13 08:17 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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