阻尼牛顿法(共5页).docx
精选优质文档-倾情为你奉上阻尼牛顿法求解二维函数极小值的程序说明一 题目利用阻尼牛顿法求函数的极小值点(迭代两次,一维搜索任选一种方法)。二 阻尼牛顿法基本思想:1) 给定初始点,收敛精度,置。2) 计算、 、和3) 求,其中为沿进行一维搜索的最佳步长。4) 检查收敛精度。若,则,停机;否则置,返回步骤2,继续进行进行搜索。改进后的阻尼牛顿法程序框图如下:三 用阻尼牛顿法求函数程序如下:/ 阻尼牛顿法 .cpp : Defines the entry point for the console application./#include<stdio.h>#include<math.h>#include<conio.h>#include <iostream>double fun1(double q1,double q2)return(pow(q1-2),4)+pow(q1-2*q2),2); /修改函数f(x1,x2)=(x1-2)*(x1-2)*(x1-2)*(x1-2)+(x1-2*x2)*(x1-2*x2)double fun2(double g,double x,double y,double r1,double r2) return (pow(x+g*y-2),4)+pow(x+g*y-2*(r1+g*r2),2);/关于阻尼因子的函数void main() double A21,B22,C21,D21,X21; double E21=4,3;/迭代的初始点x0 int t=0,i=0,j=0; double E0,x1,x2,x3,h(0.1); double y1,y2,y3,m; double a,b,k=0.618,a1,a2,f1,f2; printf("输入收敛精度:");/输入标准收敛精度 std:cin>>E0; do D00=E00; D10=E10; A00=4*(D00-2)*(D00-2)*(D00-2)+2*D00-4*D10; A10=-4*(D00-2*D10);/A00,A10为原函数梯度的各项 B00=1.0/(12.0*(D00-2)*(D00-2); B01=1.0/(24.0*(D00-2)*(D00-2); B10=1.0/(24.0*(D00-2)*(D00-2); B11=(6.0*(D00-2)*(D00-2)+1)/(48.0*(D00-2)*(D00-2);/B00,B01,B10,B11分别代表原函数的海赛矩阵的逆阵的各项 C00=-(B00*A00+B01*A10); C10=-(B10*A00+B11*A10);/C00,C10为搜索方向dk的各项 /下面利用外推法寻找函数2的区间,找单谷区间 x1=0; x2=x1+h; y1=fun2(x1,D00,C00,D10,C10); y2=fun2(x2,D00,C00,D10,C10); if(y2>y1) h=-h; x3=x1,y3=y1; x1=x2,y1=y2; x2=x3,y2=y3; x3=x2+h; y3=fun2(x3,D00,C00,D10,C10); while(y3<y2) h=2*h; x1=x2,y1=y2; x2=x3,y2=y3; x3=x2+h; y3=fun2(x3,D00,C00,D10,C10); i+; /下面利用黄金分割法寻找函数2极值 a=x1; b=x3; a1=b-k*(b-a); a2=a+k*(b-a); f1=fun2(a1,D00,C00,D10,C10); f2=fun2(a2,D00,C00,D10,C10); do if(f1>=f2) a=a1; a1=a2; f1=f2; a2=a+k*(b-a); f2=fun2(a2,D00,C00,D10,C10); else b=a2; a2=a1; f2=f1; a1=b-k*(b-a); f1=fun2(a1,D00,C00,D10,C10); j+; while(fabs(b-a)/b)>=E0&&fabs(f2-f1)/f2)>=E0); m=0.5*(a+b);/m为阻尼因子 E00=D00+m*C00; E10=D10+m*C10; printf("%d%15f10%15f10n",t,E00,E10,fun1(E00,E10); t+; while(fabs(E00-D00)>=E0&&fabs(E10-D10)>=E0); X00=E00; X10=E10; printf("迭代了%d次n",t); printf("极小点(x1,x2)=(%f10,%f10)n",X00,X10); printf("极小值f(x1,x2)=%f10n",fun1(X00,X10);程序运行结果:四 结论由该程序的运行结果可知,要求迭代两次后函数的极小值点在(2.,1.)处,经验证,运算结果完全正确。验证了该程序的可行性。专心-专注-专业