高斯牛顿算法matlab代码,基于MATLAB的高斯牛顿源代码

感谢这位大佬,我也是看了他的博客,感觉明白了许多。我的代码也是基于该博主的博客所写的,所以各位小伙伴在看代码之前请最好看一遍该博主的博客。

下面就是MATLAB源代码:

function [X,Y]=GaussNewton

clear;

clc;

tic

%% 高斯牛顿算法,X0为初始点,e为迭代误差值

x0=[0;0]; %初始点

e=0.001; %阈值

syms x1 x2

F(1)=x1-0.7*sin(x1)-0.2*cos(x2); %目标函数值

F(2)=x2-0.7*cos(x1)+0.2*sin(x2);

A=jacobian(F,[x1,x2]); %求目标函数的雅可比矩阵;

H=A.'*A; %求A.'*A,这在后续会使用到

H=-inv(H); %对H求逆并取相反数

%% 进行迭代循环

for k=1:20

f=double(subs(F,[x1 x2],x0'))'; %对目标函数赋k次迭代初值

h=double(subs(H,[x1 x2],x0')); %对H赋k次迭代初值

a=double(subs(A.',[x1 x2],x0')); %对a,'赋k次迭代初值

x=x0+h*a*f; %求解k次迭代的解,即使目标函数最优的解

delet=sqrt(sum((x-x0).^2)); %误差值

if delet

fprintf('迭代次数为:%d\n',k)

break

else

x0=x; %不符合阈值,将K次迭代求解的值赋给K+1次迭代的初值

end

end

X=x; %返回最优解

Y=double(subs(F,[x1 x2],x'))'; %返回最优值

toc

end

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值