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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
solve函数是解方程经常使用的函数,有很多坛友在使用该函数时经常遇到问题,现简单汇总如下, ~. d/ X: @1 f. o9 s  }
一、使用用法老旧
" x0 L' Q- u9 k, B% g7 F$ D% J: d7 a' `
  • syms x
  • a=1;
  • equ='x^2==a';
  • xs=solve(equ,x)1 H  O! S( M7 P8 E# q

. a" f' g$ z+ ~; b0 }( P[color=rgb(51, 102, 153) !important]复制代码

' x7 z, v, I& `8 v( P/ l' H; x9 T. c# U* R
会报错' A+ D& P% y) {: x4 q" z& J
Error using solve>getEqns (line 418)
& U1 ~" F0 L! E1 `List of equations must not be empty.
1 [1 o, I! U( ?- T. Y2 x
错误在于使用用法过于陈旧,现使用的MATLAB多为高版本
( Z2 T% e1 o: ~2 D  j# S3 @4 ?1 D解决办法% `) S, ~+ {5 l' k7 `
使用用法改变,具体参见solve帮助文档' o. h0 s( X/ S- ]( n9 s8 P; ~

, Z" b0 R/ q& _/ Z
  • syms x
  • a=1;
  • equ=x^2==a;
  • xs=solve(equ,x)
    , R- `. o0 M2 R5 a

1 k5 D& b0 o# R[color=rgb(51, 102, 153) !important]复制代码

2 L5 ~4 V/ J( b- v0 F0 z
; I& Y; d2 W* }3 E! o, I& ^0 R0 ~& Oxs =
5 h6 x! h+ s/ G! O
/ U+ u/ `0 T1 J: O; M9 N% Z-1
6 R% B1 J  z* }* t0 I. w% j  11 o, `2 j% k+ b+ ], V! L4 o3 ^
二、循环求解/ [% l7 L. T; |4 H
解方程经常遇到方程的一个或多个参数是变化的
) M9 S- R9 x) |: M  n例如例子的变量a分别等于1、4、9、16+ X+ D& _. x- j$ Z. X1 I' {3 q
经常会出现以下代码  k; Y& g8 ^9 H; z- C
  • syms x
  • a=[1,4,9,16];
  • equ=x^2==a;
  • xs=solve(equ,x)
    2 u+ [& Y' [, c# W" f: O

+ ]+ E/ S' u( f[color=rgb(51, 102, 153) !important]复制代码
) c# f: c0 [/ w4 @; c1 B

; E, }8 m+ O/ |  x! U5 ?* ]MATLAB运算无解; Z0 B+ Q+ b' b8 Q6 K
xs =) @: ^; W1 X" _3 {0 \- |

- f  R* B) f9 l% gEmpty sym: 0-by-1
0 f4 l9 L) w9 _! }& ]1 ~
这种情况应使用循环求解, o4 n9 U8 o. _6 z( E
但有时会遇到以下情况1 b, b# x+ A, P3 n/ z) x) M
  • syms x
  • a=[1,4,9,16];
  • for i=1:length(a)
  • equ=x.^2==a(i);
  • x=solve(equ,x)
  • end
    6 }* B. E; H- h
% i  Y# z6 ~  U* i& |' P
[color=rgb(51, 102, 153) !important]复制代码
& H  g& N5 G2 t( R9 O

: V# K* d$ ]' k: o: K+ N+ J4 P报错如下
" U6 Z( _; K) E3 b# Z; ?, N, c/ u& gx =  K+ N4 u9 e+ z- C2 a
  |0 s: L) p2 p6 a, r" d( z
-1" @' n8 U# ?# O6 e# r: e
  1
, t4 }8 Z0 G7 K& ~' F3 T: \/ Z* u1 O" W
Error using sym.getEqnsVars>checkVariables (line 92)
9 ^( ]) G* W, Z- C9 r' [Second argument must be a vector of symbolic variables.

" ]% z5 R2 X% [8 Z* I$ U原因在于经过第一次循环后,变量x以转变为具体数值(-1,1),即导致在第二次循环中方程里无未知量
$ A1 [  n) B  a: F  J解决办法保存解得变量名改变: }( b9 x7 z4 ?& `
循环求解方程并保存变量的代码如下7 l& ]8 J, s& U) ^  e
  • syms x
  • a=[1,4,9,16];
  • for i=1:length(a)
  • equ=x.^2==a(i);
  • xs(i,=solve(equ,x);
  • end
    . V; z. T2 y1 c; a9 Y8 Y
2 A6 d, F& O2 a  C7 T) Z9 p) d: W
[color=rgb(51, 102, 153) !important]复制代码

. d0 y& ?1 j$ _- d
5 Y5 S  M4 R0 O" {' Y! Y7 Q% ?运行后在命令窗口输入xs即可看到全部解如下- ]3 B9 |. ?6 [5 \( H
>> xs
  _2 A" {0 O9 C. h* I/ M) j  S) O
& U& ]/ i: Y7 Z& dxs =, s# [- {! g" P5 s; t

, Z* t% W  Y) C2 {[ -1, 1]! o8 c$ M# k, N. M2 n/ X: k8 h
[ -2, 2]* }$ P+ u. Y) }. }0 y
[ -3, 3]
5 ^$ T1 L+ h/ b: P+ r4 u' U3 a[ -4, 4]9 V1 o+ E- q9 }# I
希望对需要的坛友有所帮助,也希望大家多提宝贵意见,共同进步

/ h( w; }3 O" p4 U
  • 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:16 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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