MATLAB求解非线性方程组(牛顿拉夫逊方法)

MATLAB求解非线性方程组(牛顿拉夫逊方法)

Equation.m 函数

这个函数用来写非线性方程组,注意整理成标准形式

function [f,variable]=Equation(~) 
%定义非线性方程组,方程组右端项为0  
syms x1 x2  x3 x4 %x5 x6 x7 x8 x9 x10 x11 x12
f1=x1+x1*x2+x3-8*x4-8;
f2=x3+x2+x1*x3+x4*x1+x4;
f3=x1*x1+x3*x4-5+x3+x4;
f4=x2+x4+x3*x4;
%f5=x6*x5*x4;
%f6=

%f=[f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 ];
f=[f1 f2 f3 f4];
variable=[x1 x2 x3 x4];
end

牛顿拉夫逊方法迭代求解

clear
[f,variable]=Equation()

N=5;%迭代次数
[row,size]=size(variable);
x0=zeros(size,1); %初值
for i =1:N
%     delta_y=zeros(size,1)-double(subs(Equation(),...
%     {'x1' 'x2' 'x3' 'x4' 'x5' 'x6' 'x7' 'x8' 'x9' 'x10' 'x11' 'x12'},...
%     {x0(1) x0(2) x0(3) x0(4) x0(5) x0(6) x0(7) x0(8) x0(9) x0(10) x0(11) x0(12)})); 
%     J=double(subs(jacobian(f,variable);...
%       {'x1' 'x2' 'x3' 'x4' 'x5' 'x6' 'x7' 'x8' 'x9' 'x10' 'x11' 'x12'},...
%     {x0(1) x0(2) x0(3) x0(4) x0(5) x0(6) x0(7) x0(8) x0(9) x0(10) x0(11) x0(12)}));  
    delta_y=zeros(size,1)-double(subs(Equation(), ...
    {'x1' 'x2' 'x3' 'x4' }, ...
    {x0(1) x0(2) x0(3) x0(4)}))'; 
    J=double(subs(jacobian(f,variable), ...
      {'x1' 'x2' 'x3' 'x4' }, ...
    {x0(1) x0(2) x0(3) x0(4)}));
    delta_x=J\delta_y
    x0=x0+delta_x;
    
    if(norm(delta_y,"inf")<0.5)%判定收敛
        disp(i);
        disp(x0);
        break;
    end
end

本例运行结果输出:

[x1 + x3 - 8*x4 + x1*x2 - 8, x2 + x3 + x4 + x1*x3 + x1*x4, x1^2 + x3 + x4 + x3*x4 - 5, x2 + x4 + x3*x4]
[x1, x2, x3, x4]
delta_x = 4×1    
    48
    -5
     0
     5

delta_x = 4×1    
  -23.9728
    2.5888
   -0.0210
   -2.4835

delta_x = 4×1    
  -11.9224
    1.5449
   -0.2289
   -1.0432

delta_x = 4×1    
   -4.9237
   10.1295
  -12.8115
   11.3410

delta_x = 4×1    
   -1.9197
    1.8696
    5.1976
   -6.3692

delta_x = 4×1    
   -0.7955
   -2.1395
    2.5462
   -2.7440

delta_x = 4×1    
   -0.3771
   -1.5859
    1.1497
   -0.9999

delta_x = 4×1    
   -0.1128
   -0.4665
    0.3133
   -0.2430

delta_x = 4×1    
   -0.0095
   -0.0376
    0.0249
   -0.0184

     9
    3.9665
    6.9032
   -3.8297
    2.4397
  • 7
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值