solve函数是解方程经常使用的函数,有很多使用者在使用该函数时经常遇到问题,现简单汇总如下
一、使用用法老旧
例
syms x
a=1;
equ='x^2==a';
xs=solve(equ,x)
复制代码
会报错
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)
复制代码
xs =
-1
1
二、循环求解
解方程经常遇到方程的一个或多个参数是变化的
例如例子的变量a分别等于1、4、9、16
经常会出现以下代码
syms x
a=[1,4,9,16];
equ=x^2==a;
xs=solve(equ,x)
复制代码
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
复制代码
报错如下
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
复制代码
运行后在命令窗口输入xs即可看到全部解如下
xs
xs =
[ -1, 1]
[ -2, 2]
[ -3, 3]
[ -4, 4]
希望对需要的人有所帮助,也希望大家多提宝贵意见,共同进步