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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
solve函数是解方程经常使用的函数,有很多坛友在使用该函数时经常遇到问题,现简单汇总如下
" A6 O! b! C5 y1 \% o; K0 R) j一、使用用法老旧
3 R: d# S; F) V! p3 ~
! V# d3 k; y* y- b* Y% j
  • syms x
  • a=1;
  • equ='x^2==a';
  • xs=solve(equ,x)& j; L! H+ v1 P8 @& x2 c
. |7 q! J2 X  M- A- T0 `
[color=rgb(51, 102, 153) !important]复制代码
7 ?% g8 `) @/ c/ h8 v8 _
4 S6 I1 }# x$ I9 Z, P8 b
会报错
* Q3 V1 y+ b- ~# g. g  IError using solve>getEqns (line 418)
4 @# A% j! C7 h* s, f5 dList of equations must not be empty.
; n, e4 I/ K# o% H/ }3 n9 \2 v/ s; V) j
错误在于使用用法过于陈旧,现使用的MATLAB多为高版本
& l9 j; Q' l* x解决办法
0 f$ s6 n+ O2 j9 {使用用法改变,具体参见solve帮助文档
  R* q/ |9 \0 [8 d8 J3 d5 G. k# @3 v1 X, O+ V2 g; J$ _- H0 w
  • syms x
  • a=1;
  • equ=x^2==a;
  • xs=solve(equ,x)0 c: ?* }& f1 ^8 b

* v4 u* s) I- c" c! A4 d[color=rgb(51, 102, 153) !important]复制代码

0 G+ @! L0 x* D5 }4 J
: H, n# ^$ X+ }4 d' z: P$ k) Dxs =
: ~- ]; Z/ P% m" J1 p; h0 z: r: O! B: L* a, |( A, f
-1( \: [  o5 B: H, v! ?
  12 q& x" l1 x* p! m; ^3 H! A
二、循环求解
* G# l, T& a9 _5 [8 S解方程经常遇到方程的一个或多个参数是变化的
( r; F2 P: Q' \5 n例如例子的变量a分别等于1、4、9、166 Z' Z0 J9 X7 [( k' s" x5 r. ?7 M
经常会出现以下代码$ N& g2 Q0 i' v. f
  • syms x
  • a=[1,4,9,16];
  • equ=x^2==a;
  • xs=solve(equ,x)
    # O* t' i' z) Z0 X- Z+ W

! u4 t. I8 l/ ^7 F2 N- M, G* d[color=rgb(51, 102, 153) !important]复制代码

; E( @4 @) f# H* H- g4 R' l8 t
0 Z4 a, Y9 l5 O. {, F" F2 ~- l) jMATLAB运算无解
7 I$ M0 B" W8 _8 ^4 {xs =
' b- K& W8 Y0 ^: j, }
- ?* L7 c  i. I: u! }, HEmpty sym: 0-by-1

: g3 F6 Q3 u9 ]! L' G这种情况应使用循环求解
+ c& ?" Q+ h" j/ I! ~但有时会遇到以下情况
) i* W& R3 |& F( p
  • syms x
  • a=[1,4,9,16];
  • for i=1:length(a)
  • equ=x.^2==a(i);
  • x=solve(equ,x)
  • end3 f. S; q, o5 ^$ h

8 T* @: N' o2 B: M7 B, k9 ?[color=rgb(51, 102, 153) !important]复制代码

# J7 G  @: u8 K* k. F
) w: W* i/ K. z, R/ W报错如下8 P- L9 C( q# h+ q
x =
0 q! {7 p+ o: b+ m' \) c' x2 O9 R  D) j: `7 V: t8 R5 l8 ]
-1
; x% {- B$ \+ l9 L  1
/ P7 y" Y/ z/ U6 G% F& k/ p; ?( }6 i
Error using sym.getEqnsVars>checkVariables (line 92)
; _# n0 _' T/ Z8 fSecond argument must be a vector of symbolic variables.

2 M/ o7 s1 f* N* l5 n* Q$ b原因在于经过第一次循环后,变量x以转变为具体数值(-1,1),即导致在第二次循环中方程里无未知量( p& N! {( b) U# W  e- y7 w5 G
解决办法保存解得变量名改变
  l6 M$ _3 l. V. }/ A* t循环求解方程并保存变量的代码如下
/ ^9 x3 K4 P/ V5 B$ A
  • syms x
  • a=[1,4,9,16];
  • for i=1:length(a)
  • equ=x.^2==a(i);
  • xs(i,=solve(equ,x);
  • end
    $ s% _; j4 \/ L$ l' W, ^; b' v5 L
" X7 g% i$ h4 v
[color=rgb(51, 102, 153) !important]复制代码
1 e0 o% X' v; P+ g

3 n* z7 B+ U. _& a  L% i运行后在命令窗口输入xs即可看到全部解如下
9 b3 I& j: m% {: V& s* O4 V% B' D>> xs4 L% Y% _. \. d# @( n: v( d

" n5 C/ U# f! M$ txs =
% v6 J! w: p* {. ~. M; U& H; {3 I; Q" `" p# U/ w
[ -1, 1]
/ x' b, l$ p" `[ -2, 2]* e3 S9 f; ~6 ~" R* @
[ -3, 3]
( \. I; \, c: E& o3 }4 [# q" I[ -4, 4]) O6 N3 y) p: Y. ?
希望对需要的坛友有所帮助,也希望大家多提宝贵意见,共同进步
/ h7 J! x, k& m/ V. X0 _
  • 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 15:49 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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