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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
solve函数是解方程经常使用的函数,有很多坛友在使用该函数时经常遇到问题,现简单汇总如下
* G! F' j0 q# q( F$ M, r7 g/ \% D一、使用用法老旧
9 N2 V0 h5 o, P4 I4 a- ]3 F: N6 m7 ?/ g$ {
  • syms x
  • a=1;
  • equ='x^2==a';
  • xs=solve(equ,x)
    ( f) A. A  P# W1 I

5 G. U2 _: k  R/ W6 |2 M0 h[color=rgb(51, 102, 153) !important]复制代码

# T7 r) X# f7 U1 ^* {$ @' G; l: M* M- I* k5 y& f2 g/ ^
会报错
( M& G; R; Y- J/ l. D9 X: EError using solve>getEqns (line 418)  _# T' E7 m, `  K( Z. l7 D( N, _
List of equations must not be empty.
9 C" L7 }/ F. N/ E+ P+ g6 _8 f- S3 C
错误在于使用用法过于陈旧,现使用的MATLAB多为高版本
  G: \! m  H  s解决办法# v: M/ G5 u3 T, ^# W* h( B; ]
使用用法改变,具体参见solve帮助文档7 U* [+ a' G1 {- E: ?" y( f

+ q- |( F0 o! C% z
  • syms x
  • a=1;
  • equ=x^2==a;
  • xs=solve(equ,x)2 t7 u5 D, i+ |9 b

2 j. T5 d* e0 ?) V1 j$ z  [[color=rgb(51, 102, 153) !important]复制代码

0 o$ H* G9 J+ a/ c. A5 D" K3 f' ~, i  _
xs =; F" D$ g+ i: q6 d1 n8 f0 q
4 l/ o3 ?) R0 K& ~' v3 U3 C/ |
-1+ s) o& ~: u3 F9 n0 }( \- T1 \! C
  1
- S1 @2 M$ P' f' J- }% K0 q" r$ ~二、循环求解
1 p/ D3 C! R* h; I0 F解方程经常遇到方程的一个或多个参数是变化的
+ M1 e6 d9 u3 H7 E. e+ p: P例如例子的变量a分别等于1、4、9、16
9 @2 E- I" o8 n' \经常会出现以下代码
- Q! p& R# l9 D. L' _9 p% F
  • syms x
  • a=[1,4,9,16];
  • equ=x^2==a;
  • xs=solve(equ,x)% B' v; n# }' X7 j
+ u7 w5 p0 |# X) a
[color=rgb(51, 102, 153) !important]复制代码

0 ]' [5 [( [( ?( c/ R5 x/ U9 ], a3 k1 \  C( L8 l1 ?# t  x: `5 V
MATLAB运算无解: ^3 d3 q$ h% J
xs =0 u* i6 S7 \; a; E

; _- J7 N1 K# o* d+ b; c5 j' }Empty sym: 0-by-1

& F5 b2 _( u  y0 ^6 f这种情况应使用循环求解
2 G, [. B0 L7 F. p" P0 m' H但有时会遇到以下情况) @" G+ t, x& y" E/ A* ^3 [# V! a) I. W
  • syms x
  • a=[1,4,9,16];
  • for i=1:length(a)
  • equ=x.^2==a(i);
  • x=solve(equ,x)
  • end# C+ U5 r* B6 k, r% s, Z- t
5 i# d8 D" Y) B2 ^- [
[color=rgb(51, 102, 153) !important]复制代码
% j7 ~! B, D6 E6 [

% y2 t/ R3 O1 ~" ^! ^3 ?, _报错如下' K/ W* q, F8 t0 {
x =& h4 B! t6 N9 s$ z: y, E

) S% ?% O' }3 J  o" ^( S: B7 N-1; e" y% @% ]. {' `- a# e$ K' v8 g
  1
% n& c* I; Y0 B, t# T
2 i0 _! j! \# d4 `8 s+ NError using sym.getEqnsVars>checkVariables (line 92)
- g2 N4 S, x+ b8 G3 QSecond argument must be a vector of symbolic variables.

$ w' H& G9 x, l1 B. `; |- E2 i. ?3 H2 I0 I原因在于经过第一次循环后,变量x以转变为具体数值(-1,1),即导致在第二次循环中方程里无未知量$ U' L+ G7 N( M- O& }
解决办法保存解得变量名改变& N& W  d6 {5 f  E4 m
循环求解方程并保存变量的代码如下" P' v$ ?) F1 ^; S
  • syms x
  • a=[1,4,9,16];
  • for i=1:length(a)
  • equ=x.^2==a(i);
  • xs(i,=solve(equ,x);
  • end
    ; k# W6 f+ G" z4 r3 M
/ w9 T( X; J6 F# {
[color=rgb(51, 102, 153) !important]复制代码
/ _9 l! y! j) r* [% p
% ~/ v1 J  A0 e% a
运行后在命令窗口输入xs即可看到全部解如下1 x2 U2 |0 f4 E9 X1 U3 {
>> xs# E* S2 f5 s) d1 S) d$ j7 q5 r8 U, E

% J0 `& Y( u6 Q# b, P- L, ^" Xxs =
6 m5 N" C; q. R5 T2 G* z0 ]
8 @: D. r" h' O[ -1, 1]1 h, Z% t) P7 {- _" M; n
[ -2, 2]
' ~, F1 X. ?; B8 e# N! A9 X' f[ -3, 3]+ w* }3 ]4 n; x9 H( v
[ -4, 4]
' p5 U8 c/ E! x% b6 r' A7 _希望对需要的坛友有所帮助,也希望大家多提宝贵意见,共同进步
; h3 {0 B# v! T
  • TA的每日心情
    开心
    2022-11-22 15:53
  • 签到天数: 2 天

    [LV.1]初来乍到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-29 14:16 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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