机械优化设计黄金分割法 外推法(4)
时间:2026-01-17
时间:2026-01-17
a[0]=a[1];y[0]=y[1]; a[1]=a[2];y[1]=y[2];} }
return; }
运行过程及结果: a*=5.000000 y*=11.000000
4.坐标轮换法
源程序:
#include <stdio.h> #include <math.h> #include <conio.h>
float fun1(float x,float a,float b) {float y; y=x+a*b; return y; }
float fun2(float x,float y) {float z;
z=4*(x-5)*(x-5)+(y-6)*(y-6); return z; }
main()
{float d[100][3],x[100][3],xx[3],ax[100][3]; float a1,a2,a3,h,t,y1,y2,y3,e,a,b,l,fi; int i,k;
printf("输入初始点坐标\n"); scanf("%f%f",&x[0][1],&x[0][2]); e=0.000001; l=0.618;
x[2][1]=x[0][1]; x[2][2]=x[0][2]; k=0; k--; do
{x[0][1]=x[2][1]; x[0][2]=x[2][2]; k++;
for(i=1;i<=2;i++) {
if(i==1)
d[i][2]=0; }
else
{d[i][1]=0; d[i][2]=1; }
h=0.1; a1=0; a2=h;
x[i][1]=fun1(x[i-1][1],d[i][1],a1); x[i][2]=fun1(x[i-1][2],d[i][2],a1); y1=fun2(x[i][1],x[i][2]);
x[i][1]=fun1(x[i-1][1],d[i][1],a2); x[i][2]=fun1(x[i-1][2],d[i][2],a2); y2=fun2(x[i][1],x[i][2]);
if(y2>y1) {h=-h; a3=a1; y3=y1; a1=a2; a2=a3; y1=y2; y2=y3; }
a3=a2+h;
x[i][1]=fun1(x[i-1][1],d[i][1],a3); x[i][2]=fun1(x[i-1][2],d[i][2],a3); y3=fun2(x[i][1],x[i][2]); do {a1=a2; y1=y2; a2=a3; y2=y3; a3=a2+h;
x[i][1]=fun1(x[i-1][1],d[i][1],a3); x[i][2]=fun1(x[i-1][2],d[i][2],a3); y3=fun2(x[i][1],x[i][2]); }
while(y3<y2);
for(;a1>a3;) {t=a3; a3=a1; a1=t; t=y1;
上一篇:平翘舌音练习材料大全
下一篇:电化学理论(李狄)课后答案解析