logo资料库

Newton迭代法Matlab程序求函数极小值点.doc

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
Newton 迭代法 Matlab 程序求函数极小值点 clear all clc %Newton 迭代法求解极小值点 %090311 %===================================== %定义函数 disp '函数 f(x) 为:' syms x1 x2 f=(x1-2)^4+(x1-2)^2*x2^2+(x2+1)^2 disp '初始点的值:' x0=[1;1] %===================================== %求函数的梯度和海色阵 disp '函数 f 的梯度:' g=jacobian(f,[x1;x2]) disp '函数 f 的 Hesse 矩阵:' G=jacobian([g(1);g(2)],[x1,x2]) %===================================== %定义迭代的最大次数 n=10; %===================================== %一些初始值的计算 g0=subs(g,{x1,x2},{x0(1),x0(2)})'; G0=subs(G,{x1,x2},{x0(1),x0(2)}); f0=subs(f,{x1,x2},{x0(1),x0(2)}); %===================================== %迭代点集合 x 和函数值 F 的初始化 x=zeros(2,n); F=zeros(1,n); %运用 Newton 方程解出下一近似值 x(:,1)=x0-inv(G0)*g0; %注:用点乘有误 A=x(:,1); F(1)=subs(f,{x1,x2},{A(1),A(2)}); %===================================== %定义误差初始值为 10 deta=10; i=1; %循环用求出的近似解迭代 Newton 方程 %求出下一个近似解,并在规定的误差范围内 while deta>=1e-10&i<10 A=x(:,i); gi=subs(g,{x1,x2},{A(1),A(2)})';
Gi=subs(G,{x1,x2},{A(1),A(2)}); i=i+1; x(:,i)=x(:,i-1)-inv(Gi)*gi; A=x(:,i); F(i)=subs(f,{x1,x2},{A(1),A(2)}); deta=F(i)-F(i-1); end k=(1:n+1)'; F=[f0 F]'; x=[x0,x]'; disp '=====================================================' disp '迭代的各步结果如下:' disp ' [k %===================================== x(k) F] k x F{x(k)}'
分享到:
收藏