matlab中求解非线性方程有很多函数,但大多数函数的求解结果准确性并不高,但利用matlab自带的迭代算法,则可以大大提高准确性,其中fslove函数是首推的求解函数,函数自带matlab提供的迭代算法,并且fsolve函数编写相对容易。
求解非线性方程:
首先设置句柄,此为单独一个代码程序liyihao,方便调用所求函数。
function y=liyihao(x);
y=0.8*exp(-6*x)*sin(30*x)-0.1;
end
再设置求解函数代码。
clear;clc;close all;
format long ; % 查看小数点后更多的位数
x0=0.3;
options=optimoptions('fsolve','Display','iter','FunctionTolerance',1e-8,'StepTolerance',1e-8);%这里建议大家通过help查阅option的功能,我这里选则并自定义了展示、结果、步长的参数。
[xs,fval,exitflag]=fsolve(@liyihao,x0,options);
求解非线性方程组:
与上述求解方程同理,还是先定义句柄代码,这里需要注意,我们用X(1)、X(2)替换了x、y。
function Y=liyihao(X)
Y1=3*X(1)-X(2)^3-4;
Y2=2*X(1)^2+5*X(2)^2+3*X(2)-8;
Y=[Y1;Y2];
end
再设置求解代码。
clear;clc;close all;
format long;
X0=[-2;1];
options=optimoptions('fsolve','Display','iter','FunctionTolerance',1e-8,'StepTolerance',1e-8);
[XS,fval,exitflag]=fsolve(@liyihao,X0,options);
矩阵方程求解:
function Y=liyihao(X);
Y=X*X*X-[1 2;3 4];
end
clear;clc;close all;
format long;
X0=[1 1;1 1];
options=optimoptions('fsolve','Display','iter','FunctionTolerance',1e-8,'StepTolerance',1e-8);
[XS,fval,exitflag]=fsolve(@liyihao,X0,options);
fsolve函数可以说是求解非线性方程最优解,美中不足就是如果设置的初值不理想,可能会得到错误结果,因此我们对于设置范围要有一定的提前计算,我们可以选择图解法先大致的确定处值设定范围,来保证我们的结果是能够求解正确的。