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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
solve函数是解方程经常使用的函数,有很多坛友在使用该函数时经常遇到问题,现简单汇总如下$ }, V5 j  r0 u7 p: p
一、使用用法老旧
3 K+ i/ `5 U4 r4 f( t  n  n/ O. P+ N. _" ^2 x* `. W# S, W
  • syms x
  • a=1;
  • equ='x^2==a';
  • xs=solve(equ,x)
    / J, U. N: P) u4 }' k( M

) {( |/ `8 O3 L, V( l, N; R[color=rgb(51, 102, 153) !important]复制代码

; e2 f0 v" i! _4 t" f; Y6 a/ [! A% }% b2 _3 C) X! N2 K) q) h9 P
会报错
6 w+ |- s8 t: Y9 ^# p8 _8 N4 PError using solve>getEqns (line 418)# v- A& e( M3 i: G' f
List of equations must not be empty.
7 F5 |( H* n! `6 G
错误在于使用用法过于陈旧,现使用的MATLAB多为高版本" s. Z7 ^% X. |
解决办法. T6 z6 G- e" k3 j3 y7 c2 Y2 u) E& u
使用用法改变,具体参见solve帮助文档$ @1 L: t0 \; P/ J* }0 i

5 F5 N; Q% N, a4 _' r: _# g6 ^
  • syms x
  • a=1;
  • equ=x^2==a;
  • xs=solve(equ,x)% |$ T0 D+ A  F- A9 |; K) l

) |; K  p: L6 h" ~+ R0 y; i4 }( j  J* y[color=rgb(51, 102, 153) !important]复制代码
" H% O  c3 P, S4 i+ C; o
8 f+ O7 @( o8 V2 h
xs =- y3 e1 `% a# m! h5 ^7 P
0 D- c) y0 V  {# A& {2 I' w
-1
9 s! U' U4 P  f/ C& _  1! A4 `* N: K. Q/ m* H
二、循环求解
1 \3 I) J1 x1 W! X解方程经常遇到方程的一个或多个参数是变化的
5 Q% p, Z8 d, q$ T1 l例如例子的变量a分别等于1、4、9、16
( N1 m  B1 }8 b经常会出现以下代码
/ o, N0 b1 W9 R! }8 N
  • syms x
  • a=[1,4,9,16];
  • equ=x^2==a;
  • xs=solve(equ,x)' L5 I4 B' v5 \: q7 `0 f
, U& h4 ~; Y+ N- R) g0 ]
[color=rgb(51, 102, 153) !important]复制代码
+ _; o5 ]' u& H/ P; j' C

2 u9 A' @' _. r( I* m0 A  }MATLAB运算无解
+ A5 I7 T; _- wxs =
- J/ c9 L! b2 M: g* e: b; F# S; B0 @' I. `7 c2 _) G, T
Empty sym: 0-by-1
$ f# |, B' H5 b4 R
这种情况应使用循环求解
4 d( K0 q9 }9 X但有时会遇到以下情况* M$ V5 ?' a7 S6 N  @5 S
  • syms x
  • a=[1,4,9,16];
  • for i=1:length(a)
  • equ=x.^2==a(i);
  • x=solve(equ,x)
  • end( i  ^+ w  F; `: ?1 I6 r* }: p3 p
: {1 W& S! U8 @
[color=rgb(51, 102, 153) !important]复制代码
3 v" K/ _7 `' ]% Y) t- b" N

$ n  H- m4 i* v/ K, d, ^$ ~$ c报错如下
/ Y4 e$ r! y( v7 d) D8 Dx =) G# k0 \5 O: t4 S& t3 {

, I& s/ c, s9 s4 t-1
+ m4 A7 s$ F' s+ A3 u6 C# D/ L  1* S, i' x9 g- `; V3 m: \+ k

/ L" d0 e; k( y% p) b( J" j; l: ^Error using sym.getEqnsVars>checkVariables (line 92)! d& J) y& b+ m9 n% v. ^4 n! F1 K
Second argument must be a vector of symbolic variables.
, Z7 Q5 o1 [! U* _7 T
原因在于经过第一次循环后,变量x以转变为具体数值(-1,1),即导致在第二次循环中方程里无未知量
* Z- i3 F5 C# H% N  Q& A+ t/ T- ~1 b解决办法保存解得变量名改变
+ k, b% A6 W& M9 y9 h: W: c: d8 T5 X循环求解方程并保存变量的代码如下
5 ^' n- l6 Z1 [% {& ?& v! d
  • syms x
  • a=[1,4,9,16];
  • for i=1:length(a)
  • equ=x.^2==a(i);
  • xs(i,=solve(equ,x);
  • end" t3 U! T2 C/ F" w
# g8 x) r* G+ {, X2 ~
[color=rgb(51, 102, 153) !important]复制代码
3 Y# I4 ?; {: M
" o5 o- T6 ]: b- _5 l
运行后在命令窗口输入xs即可看到全部解如下
1 A( j3 X5 j; l7 R& U) x>> xs
5 D* j  k1 D  c6 q
! V  E" ^( n( k8 M$ b6 zxs =. ]& q3 i: h6 U6 a" N5 A4 X
4 i( }# @: l5 \- |* l* W" u0 o
[ -1, 1]
& D( |, z* Y. w- A% K[ -2, 2]; X+ |4 X& `) D. b8 x
[ -3, 3]8 u1 f# U0 N1 t: J3 E
[ -4, 4]
# }0 W4 D6 h9 s% Z, n9 @% B+ x$ _希望对需要的坛友有所帮助,也希望大家多提宝贵意见,共同进步
3 d' O' {. k. n0 ~7 O
  • 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-23 04:35 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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