打印

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

[复制链接]
225|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cooldog123pp|  楼主 | 2020-9-26 14:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
solve函数是解方程经常使用的函数,有很多坛友在使用该函数时经常遇到问题,现简单汇总如下
一、使用用法老旧

  • syms x
  • a=1;
  • equ='x^2==a';
  • xs=solve(equ,x)

[color=rgb(51, 102, 153) !important]复制代码


会报错
Error using solve>getEqns (line 418)
List of equations must not be empty.

错误在于使用用法过于陈旧,现使用的MATLAB多为高版本
解决办法
使用用法改变,具体参见solve帮助文档

  • syms x
  • a=1;
  • equ=x^2==a;
  • xs=solve(equ,x)

[color=rgb(51, 102, 153) !important]复制代码


xs =

-1
  1
二、循环求解
解方程经常遇到方程的一个或多个参数是变化的
例如例子的变量a分别等于1、4、9、16
经常会出现以下代码
  • syms x
  • a=[1,4,9,16];
  • equ=x^2==a;
  • xs=solve(equ,x)

[color=rgb(51, 102, 153) !important]复制代码


MATLAB运算无解
xs =

Empty sym: 0-by-1

这种情况应使用循环求解
但有时会遇到以下情况
  • syms x
  • a=[1,4,9,16];
  • for i=1:length(a)
  • equ=x.^2==a(i);
  • x=solve(equ,x)
  • end

[color=rgb(51, 102, 153) !important]复制代码


报错如下
x =

-1
  1

Error using sym.getEqnsVars>checkVariables (line 92)
Second argument must be a vector of symbolic variables.

原因在于经过第一次循环后,变量x以转变为具体数值(-1,1),即导致在第二次循环中方程里无未知量
解决办法保存解得变量名改变
循环求解方程并保存变量的代码如下
  • syms x
  • a=[1,4,9,16];
  • for i=1:length(a)
  • equ=x.^2==a(i);
  • xs(i,:)=solve(equ,x);
  • end

[color=rgb(51, 102, 153) !important]复制代码


运行后在命令窗口输入xs即可看到全部解如下
>> xs

xs =

[ -1, 1]
[ -2, 2]
[ -3, 3]
[ -4, 4]
希望对需要的坛友有所帮助,也希望大家多提宝贵意见,共同进步

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1804

主题

6315

帖子

29

粉丝