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]
希望对需要的坛友有所帮助,也希望大家多提宝贵意见,共同进步
|