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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
solve函数是解方程经常使用的函数,有很多坛友在使用该函数时经常遇到问题,现简单汇总如下1 d; x9 }% Z4 \& B
一、使用用法老旧: A) \  S$ K' }* y$ b4 b) Q

! R  F0 Y& h3 w! d/ P# J% K
  • syms x
  • a=1;
  • equ='x^2==a';
  • xs=solve(equ,x)
    $ @% m$ w+ Z6 m/ L

( ^+ ]/ I# @/ @' v6 f4 I[color=rgb(51, 102, 153) !important]复制代码

3 G  W5 f/ h8 J9 S
( l( L8 `. @9 `6 d! Z% a会报错
% S4 L1 F6 P3 J9 aError using solve>getEqns (line 418)
4 U7 X8 O8 f2 v1 a; }0 s0 v2 F3 ^List of equations must not be empty.
! I/ q* t: F7 I& S4 p5 ?
错误在于使用用法过于陈旧,现使用的MATLAB多为高版本
" Q* q% B: N" p2 P. X" y, [5 x解决办法9 y/ q  S: R0 m/ T! @
使用用法改变,具体参见solve帮助文档
4 B5 c2 u1 u' s7 ]  Z7 v! @6 [  J5 k+ D1 H3 V" F! ?1 n
  • syms x
  • a=1;
  • equ=x^2==a;
  • xs=solve(equ,x): |3 Q7 @0 Y( N; b8 _, A

8 x) s4 k+ p5 k& j' e1 A[color=rgb(51, 102, 153) !important]复制代码

  J- C& g0 Q  }) P7 X* W: p: @( h+ _# R( `0 |2 [( t5 U
xs =; J+ P3 m  `- O: [; N1 i7 }! K& g

# i2 @, X0 e4 v2 `8 o/ m6 }. p-1
$ K( B" n2 o8 V. J$ {  1/ d/ [1 n+ q$ s
二、循环求解
& p( H. N# @! b, ?* j7 B解方程经常遇到方程的一个或多个参数是变化的. F% a) [0 U9 j" H# \; P& ~+ O
例如例子的变量a分别等于1、4、9、16% I7 C& k$ |& s2 q1 `
经常会出现以下代码, E, S$ p5 m5 t# y0 g" f' h/ n# j  R6 m
  • syms x
  • a=[1,4,9,16];
  • equ=x^2==a;
  • xs=solve(equ,x)
    " S& K1 P" M6 H; c4 ^3 q
+ h8 ]% \$ Y) V
[color=rgb(51, 102, 153) !important]复制代码

0 Q6 f8 l. Z# }( _
2 Q$ j8 x7 P% ~$ i" j& d$ yMATLAB运算无解
# |3 M$ E. [" _" c7 F% [xs =$ h7 |% R( M% i0 \- W
# V% m& {5 N  |( Y5 a& \9 `
Empty sym: 0-by-1
* d" t* z/ @6 \0 u$ I
这种情况应使用循环求解& j( [; s: h: J* Z$ Q3 @
但有时会遇到以下情况- h/ v4 |4 A* \" [' y
  • syms x
  • a=[1,4,9,16];
  • for i=1:length(a)
  • equ=x.^2==a(i);
  • x=solve(equ,x)
  • end
    8 K7 v8 |( a/ Q! n2 a' s

3 z1 g0 c3 `: \& k+ h( T* L0 u/ w[color=rgb(51, 102, 153) !important]复制代码
" W+ ]; I, H" t$ C  j+ n' d/ j) b  @5 |
6 m* Q: u! P5 y5 D4 i' b% m, F  V
报错如下
; w& i6 Z* D/ H9 ?x =
+ Z( }6 Z5 v+ s" o) f2 x( b) u" s2 P5 r6 [4 w, W0 \3 d% d
-18 d0 ^+ s$ E' J  Z9 w
  1
% o) W: z0 F3 c, w/ z, R  |9 {8 S) M: u
Error using sym.getEqnsVars>checkVariables (line 92)" I# _3 M7 S& n/ L1 }: |
Second argument must be a vector of symbolic variables.
$ C0 `, `! N$ U$ g, G* a1 J
原因在于经过第一次循环后,变量x以转变为具体数值(-1,1),即导致在第二次循环中方程里无未知量
, ?( Z8 n5 k* B0 c/ U  f8 x解决办法保存解得变量名改变
7 b4 E5 f6 |- `) ?' Z循环求解方程并保存变量的代码如下/ x+ W2 v0 l; \& H) R; k# y
  • syms x
  • a=[1,4,9,16];
  • for i=1:length(a)
  • equ=x.^2==a(i);
  • xs(i,=solve(equ,x);
  • end6 Z7 s+ }9 q% W  f) U3 C; N# w& \
( m6 O( k5 x% v9 R- Y( X4 e
[color=rgb(51, 102, 153) !important]复制代码

6 J# w2 N' u+ Q" l+ U8 I+ z3 H& s* F4 B- [5 ^7 X
运行后在命令窗口输入xs即可看到全部解如下
1 h( _$ C) u8 n' v! z>> xs
, Y$ z, o4 p# `* B% v; Y: \; t! r+ G& P: o9 H; O# z' N0 c6 {
xs =" Y  Z2 t: A3 @# ]; |
3 O& z/ G; u$ |, |7 B/ m! c# L
[ -1, 1]% X. R( S( g& x" b7 i2 C
[ -2, 2]5 ~, \' O& a. v7 R8 W) [
[ -3, 3]
6 i; V8 A3 v# N3 E" h  Y[ -4, 4]6 R5 _4 D3 b/ @9 W6 W* h/ |
希望对需要的坛友有所帮助,也希望大家多提宝贵意见,共同进步

5 T' G+ P+ I' n/ I  Y, f4 B
  • 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:44 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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