高斯牛顿法 matlab代码实现

5 篇文章 1 订阅

高斯牛顿法的解释请参见

http://blog.csdn.net/dsbatigol/article/details/12448627


%%  Gauss-Newton method
clc;
clear;
format long; 
syms x1 x2 x3 x4;
error=1e-5;   %停机门限
f = [x1+10*x2; 5^(1/2)*(x3-x4); (x2-2*x3)^2; 10^(1/2)*(x1-x4)^2];
v=[x1 x2 x3 x4];
j=jacobian(f,v);   %求jacobian行列式
x=[3;-1;0;1];      %初始迭代点
J=subs(j,v,x');     %初点数值带入表达式
F=subs(f,v,x');
k=0;               %迭代次数
tic
while (sum((J'*F).^2))^(1/2)>error  %判断停机与否, 这里相当于求梯度的模
	    d=-inv(J'*J)*J'*F;          %搜索方向
        x=x+d;                      %新的迭代点
	    J=subs(j,v,x');              %新的迭代点数值带入表达式           
        F=subs(f,v,x');
	    k=k+1;                      %迭代次数加1
end
disp('Gauss-Newton algorithm');
toc
k
x
sigma=(sum((J'*F).^2))^(1/2)        
F=(sum(F.^2))^(1/2)                 %显示迭代次数,变量取值,停机表达式值,目标函数值
%% 





  • 15
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
高斯牛顿法是一种非线性最小二乘拟合方法,用于求解最小二乘问题。在Matlab中,可以通过编写函数来实现高斯牛顿法。 首先,需要定义一个目标函数,即要进行最小二乘拟合的函数。这个函数可以是任意的非线性函数。 然后,需要定义一个初始估计值,作为高斯牛顿法的起始点。可以根据实际情况或者经验来选择初始值。 接下来,在循环中迭代运行高斯牛顿法的步骤,直至满足收敛条件为止。具体步骤如下: 1. 计算目标函数在当前估计值处的雅可比矩阵。 2. 计算当前估计值处的目标函数值。 3. 根据雅可比矩阵和目标函数值,求解线性最小二乘问题,得到一个增量值(delta)。 4. 更新估计值,将当前估计值加上增量值。 5. 判断增量值是否满足收敛条件,若满足则终止迭代,否则返回第1步。 高斯牛顿法的核心是求解线性最小二乘问题,这可以通过Matlab中的矩阵运算和求解线性方程组的函数来实现。在每次迭代中,需要计算雅可比矩阵的转置矩阵乘以雅可比矩阵,以及雅可比矩阵的转置矩阵乘以目标函数值,然后利用这些矩阵来求解线性方程组。 最后,通过不断迭代运行高斯牛顿法,直到满足收敛条件,即可得到最小二乘拟合的结果。 总之,高斯牛顿法是一种通过不断迭代求解线性最小二乘问题的方法,通过Matlab中的矩阵运算和线性方程组求解函数,可以实现这种方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值