上交一维搜索法.docx

上传人:b****5 文档编号:29384567 上传时间:2023-07-22 格式:DOCX 页数:11 大小:104.57KB
下载 相关 举报
上交一维搜索法.docx_第1页
第1页 / 共11页
上交一维搜索法.docx_第2页
第2页 / 共11页
上交一维搜索法.docx_第3页
第3页 / 共11页
上交一维搜索法.docx_第4页
第4页 / 共11页
上交一维搜索法.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

上交一维搜索法.docx

《上交一维搜索法.docx》由会员分享,可在线阅读,更多相关《上交一维搜索法.docx(11页珍藏版)》请在冰豆网上搜索。

上交一维搜索法.docx

上交一维搜索法

一、一维黄金分割法

F(X)=3*x*x*x-8*x+9,初始点:

0,初始步长:

0.1,终止迭代精度e:

0.01,求极小值点和极小值

程序:

#include

#include

#definef(x)3*x*x*x-8*x+9

main()

{

doublef1,f2,f3,t,x1,x2,x3,h,a,b,Y1,Y2,A,A1,A2,e=0.01;

printf("请输入x1,h:

");

scanf("%lf,%lf",&x1,&h);

f1=f(x1);

x2=x1+h;

f2=f(x2);

if(f2>=f1)

{

h=-h;

t=x1;x1=x2;x2=t;

t=f1;f1=f2;f2=t;

x3=x2+h;

f3=f(x3);

}

else

{

h=2*h;

x3=x2+h;

f3=f(x3);

}

while(f2>f3)

{

x1=x2;

x2=x3;

f2=f(x3);

x3=x2+h;

f3=f(x3);

}

a=x1

x1:

x3;

b=x1>x3?

x1:

x3;

printf("[%f,%f]\n",a,b);

A1=b-0.618*(b-a);Y1=f(A1);

A2=a+0.618*(b-a);Y2=f(A2);

do{

if(Y1>=Y2)

{

a=A1;

A1=A2;

Y1=Y2;

A2=a+0.618*(b-a);

Y2=f(A2);

}

else

{

b=A2;

A2=A1;

Y2=Y1;

A1=a+0.382*(b-a);

Y1=f(A1);

}

}

while((a-b)>=e||(a-b)<=-e);

A=(a+b)*0.5;

printf("A=%lf\n",A);

printf("f(A)=%lf\n",f(A));

printf("a=%f,b=%f",a,b);

}

运行结果:

二、多维进退法和黄金分割法

求目标函数f(X)=60-10X1-4X2+X1*X1+X2*X2-X1*X2的极小值和极小值点,初始步长为h=0.1,终止迭代精度为e=0.05,初始点为[0,0]T,,方向为S=[0.8,0.6]T。

程序:

#include

#include

#defineN2

floatf(floata[N]);

voidhj();

voidjt();

floata0[N],d[N],a[N],b[N],a1[N],a3[N],h0,e;

floatmain()

{

inti;

printf("请输入初始点a0[N]\n");

for(i=0;i

{

scanf("%f",&a0[i]);

}

printf("请输入搜索方向d[n]\n");

for(i=0;i

{

scanf("%f",&d[i]);

}

printf("请输入步长h0和精度e\n");

scanf("%f,%f",&h0,&e);

jt();

hj();

}

floatf(floata[N])

{

floaty;

y=60-10*a[0]-4*a[1]+a[0]*a[0]+a[1]*a[1]-a[0]*a[1];

returny;

}

voidhj()

{

inti;

floata2[N],f1,f2,d0,f0;

for(i=0;i

{

a1[i]=b[i]-0.618*(b[i]-a[i]);

}

for(i=0;i

{

a2[i]=a[i]+0.618*(b[i]-a[i]);

}

f1=f(a1);

f2=f(a2);

do

{

if(f1>=f2)

{

for(i=0;i

{

a[i]=a1[i];

a1[i]=a2[i];

a2[i]=a[i]+0.618*(b[i]-a[i]);

}

f2=f(a2);

f1=f(a1);

}

else

{

for(i=0;i

{

b[i]=a2[i];

a2[i]=a1[i];

a1[i]=b[i]-0.618*(b[i]-a[i]);

}

f1=f(a1);

f2=f(a2);

}

d0=float(sqrt((b[0]-a[0])*(b[0]-a[0])+(b[1]-a[1])*(b[1]-a[1])));

}while((d0>=e));

for(i=0;i

{

a0[i]=(a[i]+b[i])/2;

}

f0=f(a0);

printf("极小值点a0[]和极小值f0分别是:

\n");

for(i=0;i

{

printf("a0[i]=%f\n",a0[i]);

}

printf("f0=%f\n",f0);

}

voidjt()

{

inti;

floata2[N],t1[N],f1,f2,f3,h;

for(i=0;i

{

a1[i]=a0[i];

}

h=h0;

for(i=0;i

{

a2[i]=a1[i]+d[i]*h;

}

f1=f(a1);

f2=f(a2);

if(f2>=f1)

{

h=-h;

for(i=0;i

{

t1[i]=a1[i];

a1[i]=a2[i];

a2[i]=t1[i];

}

f1=f(a1);

f2=f(a2);

}

else

h=2*h;

for(i=0;i

{

a3[i]=a2[i]+d[i]*h;

}

f3=f(a3);

while(f2>=f3)

{

for(i=0;i

{

a1[i]=a2[i];

}

f1=f(a1);

for(i=0;i

{

a2[i]=a3[i];

}

f2=f(a2);

for(i=0;i

{

a3[i]=a2[i]+d[i]*h;

}

f3=f(a3);

}

if(h<0)

{

for(i=0;i

{

b[i]=a1[i];

a[i]=a3[i];

}

}

else

{

for(i=0;i

{

b[i]=a3[i];

a[i]=a1[i];

}

}

for(i=0;i

printf("\na[i]=%f\nb[i]=%f\n",a[i],b[i]);

}

运行结果:

优化设计作业

 

学院:

机仪学院

班级:

研1404班

姓名:

杨政威

学号:

2140220097

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1