一、用法1(普通版本)
直接将待用的方程组写在一个函数文件中,在主函数中直接调用就可以了
1.1 主函数
x = fsolve('Objfun_1',[1,1]);
其中后面的[1,1]是初始值,
[x,fval] = fsolve('Obj_fun1',[1,1]);
fval是将得出的解x带回方程组
1.2 函数Obj_fun1
function y = Obj_fun1(x0)
x1 = x0(1);
x2 = x0(2);
y(1) = x1.^3+x2.^2-5;
y(2) = (x1+1)*x2 - (3*x1+1);
end
二、用结构体的方式
2.1 主函数(仍然使用Obj_fun1)
my.options = optimoptions('fsolve','Display','none');
my.objective = @Obj_fun1;
my.x0 = [1,1];
my.solver = 'fsolve';
x = fsolve(my);
三、fsolve求解矩阵
3.1 主函数
%% 求矩阵
x10 = [0 0;0 0];
option = optimoptions('fsolve','Display','iter');
x = fsolve('Obj_fun2',x10); % 其中x10是待求矩阵的初值
3.2 Obj_fun2 函数
function y = Obj_fun2(x)
x1 = x;
y = x1*x1+x1-[2 3;4 5];
end
四、多步调用函数求解方程组
多步调用的优点是可以简化在一个函数中代码的书写
4.1 主函数
%% 主函数
x = [0 0];
option = optiomoptions('fsolve','Display','final');
[x,fval] = fsolve('mymain',x,option,2,3);
% 这里的2和3其实是要输入的参数,就是myfun中的y1和y2
4.2 mymain 函数
在mymain函数中,r其实是由x1和x2的复杂组合
%% mymain函数
function f = mymain(x,y1,y2)% y1和y2只不过是参数
r = myfun(x);
f(1) = r(1)^2+r(3)-y1^2-y2;
f(2) = r(2)^2*y2+y1-r(1);
end
4.3 myfun 函数
通过myfun函数实现r(1),,r(2),,r(3)
function r = myfun(x)
x1 = x(1);
x2 = x(2);
r(1) = x1*x2+6*x1+x2^2;
r(2) = x1*x2-x2+x1*x2^2;
r(3) = x2 - x2^3+x1*x2^2;