MATLAB中使用函数fsolve求非线性方程组的根

一、用法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;

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值