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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
solve函数是解方程经常使用的函数,有很多坛友在使用该函数时经常遇到问题,现简单汇总如下" f" x( m: U- N* p7 ~/ j
一、使用用法老旧$ @$ C: S2 p" f8 I# p. X' \6 V

5 \+ ]- Y3 R9 w) U7 ]2 H
  • syms x
  • a=1;
  • equ='x^2==a';
  • xs=solve(equ,x)1 v0 K% z. H* Q5 {% R9 ^! I7 U8 d
1 ^5 B( x/ J' n# `2 F4 q
[color=rgb(51, 102, 153) !important]复制代码
- F* g7 F# s/ j- }$ L$ x
; o' L& U; t1 ^+ {( }% R) N1 h
会报错0 Z/ m" |' a- V6 g) Y; D" r" J
Error using solve>getEqns (line 418)# `0 K) y6 |" V$ J" D
List of equations must not be empty.
: u! ~7 I/ V1 G: t; n
错误在于使用用法过于陈旧,现使用的MATLAB多为高版本
5 N" g  U! D  U$ ^  |: i解决办法
+ t! n  B% h! M$ E* `使用用法改变,具体参见solve帮助文档! p& d# g- r  j4 e; M' k* h% R5 c

7 J1 ^9 ]8 r7 l8 }* \
  • syms x
  • a=1;
  • equ=x^2==a;
  • xs=solve(equ,x)
    # e/ T( J+ g0 \, ]7 R" P# p2 ^( O
& A% H- U; e, ^, ~" C" l/ R
[color=rgb(51, 102, 153) !important]复制代码

( f* O/ o7 c1 f- Y3 u3 ?9 |
2 V$ t' U0 f1 I' ?7 _' Gxs =
9 k; X6 Z" c; |& d+ k. U
' Y  r) O1 @* |-1
) r) g4 m' z1 A% w% D" c* l3 l  18 e& X1 ^+ Y9 k- F  u& E/ v/ @9 _8 \# r
二、循环求解  C3 F  t# ^: ~! i$ s* U0 f
解方程经常遇到方程的一个或多个参数是变化的* i9 ~1 C9 R9 l* {
例如例子的变量a分别等于1、4、9、162 R( \/ u- Z, K; I0 f- G+ ~
经常会出现以下代码4 `/ M' V% P! ^5 ?
  • syms x
  • a=[1,4,9,16];
  • equ=x^2==a;
  • xs=solve(equ,x). {! s6 r: ?/ V  k1 f" c
' ?! Z% K  m  q
[color=rgb(51, 102, 153) !important]复制代码
' R8 t3 I' V+ D2 q
* @  V. S" O4 U: W+ Y7 z% l
MATLAB运算无解9 g, o/ p7 _0 K6 X2 V+ B' f
xs =5 W1 R* `1 R- `! v  ^. s% }6 l

$ R( |+ g# A& |! a4 Z. M( ?$ |) sEmpty sym: 0-by-1
' N" g) d0 R1 I" x. |* |( ]
这种情况应使用循环求解
  b( h3 q. a, e# J5 Z但有时会遇到以下情况; r, D) D0 e: }7 P, T! B
  • syms x
  • a=[1,4,9,16];
  • for i=1:length(a)
  • equ=x.^2==a(i);
  • x=solve(equ,x)
  • end
    9 c1 x( r* i+ t& D7 j

1 q* `; r5 G9 `4 g9 |# v7 M[color=rgb(51, 102, 153) !important]复制代码

9 j* S% J5 g1 B5 f  f. y, @! e% m5 E5 R$ M4 E+ e
报错如下
0 y6 }3 a$ {, C7 N$ p( Jx =  n" `# W, [# ], E2 {

8 W0 W2 p& ~" X% f( U* P-1. _4 B2 X  e9 D8 M: K; a6 Q( Z% {) O
  1
# b+ b7 p8 E# o' I' [* \( |# E" O( L: ?, q- Y' h
Error using sym.getEqnsVars>checkVariables (line 92)( X/ t. G: t0 ]1 H( \  [
Second argument must be a vector of symbolic variables.

8 Q$ V, V; l% D( J0 k9 R9 q原因在于经过第一次循环后,变量x以转变为具体数值(-1,1),即导致在第二次循环中方程里无未知量
) \- C: T( g: o) ^# X解决办法保存解得变量名改变/ W2 X: J3 @# L
循环求解方程并保存变量的代码如下
$ j# G6 \: K( j# \! K7 p; o
  • syms x
  • a=[1,4,9,16];
  • for i=1:length(a)
  • equ=x.^2==a(i);
  • xs(i,=solve(equ,x);
  • end& f4 p, A' g- v1 o- V# j

/ I8 C. ?/ Z4 {1 D- M& z4 b& r# f( I[color=rgb(51, 102, 153) !important]复制代码

1 m# J6 S- \( A. I$ a8 l# D; o' _5 d* v/ Q
运行后在命令窗口输入xs即可看到全部解如下+ y- e! q/ s6 c+ ~  W
>> xs1 ]$ O( }2 d1 A$ r; M6 h
0 |$ R8 ?# S% N: [& m
xs =/ E0 m2 m4 E6 h/ H

/ Y, K  @; o( Z& S[ -1, 1]
& O3 l3 V& W4 `6 f8 g" z: l' M( V[ -2, 2]
; b* W" e. |' x. _[ -3, 3]
0 r* N9 N' l7 W5 I8 I[ -4, 4]) G4 I& t8 h' d4 P" Z( G
希望对需要的坛友有所帮助,也希望大家多提宝贵意见,共同进步
  ]$ u5 ?! O4 e. o2 F
  • 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-2 21:28 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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