資源簡介
#include
#include
#define m 10
//f函數
float f(float x[],float p);
//進退法
void mjtf(int n,float x0[],float h,float s[],float a[],float b[],float p); void mhjfgf(int n,float a[],float b[],float flag,float x[],float p);
//鮑威爾法
void mbwef(int n,float x0[],float h,float flag,float a[],float b[],float x[],float p);
float max(float l)
{
float resu;
if(l<=0)
resu=0;
else
resu=l*l;
代碼片段和文件信息
#include?
#include?
#define?m?10
//f函數
float?f(float?x[]float?p);
//進退法
void?mjtf(int?nfloat?x0[]float?hfloat?s[]float?a[]float?b[]float?p);?void?mhjfgf(int?nfloat?a[]float?b[]float?flagfloat?x[]float?p);
//鮑威爾法
void?mbwef(int?nfloat?x0[]float?hfloat?flagfloat?a[]float?b[]float?x[]float?p);
float?max(float?l)
{
float?resu;
if(l<=0)
resu=0;
else
resu=l*l;
return?resu;
}
float?f(float?x[]float?p)
{
float?resultt1;
float?t2t3t4;
t1=(8-x[0]-x[1]);
result=(x[0]-2)*(x[0]-2)+(x[1]-3)*(x[1]-3)+(x[2]-4)*(x[2]-4)+p*max(t1);
return?result;
}
float?g(float?x[])
{
float?re;
re=(x[0]-2)*(x[0]-2)+(x[1]-3)*(x[1]-3)+(x[2]-4)*(x[2]-4);
return?re;
}
void?mjtf(int?nfloat?x0[]float?hfloat?s[]float?a[]float?b[]float?p)?{
int?i;
float?x1[m]x2[m]x3[m]f1f2f3;
for(i=0;i {
?x1[i]=x0[i];
x2[i]=x0[i]+h*s[i];
}
f1=f(x1p);
f2=f(x2p);
if(f2>=f1)?????????????/*判斷搜索方向*/
{??????????????????????/*搜索方向為反向,轉身*/
h=(-1)*h;
for(i=0;i x3[i]=x1[i];
f3=f1;
for(i=0;i x1[i]=x2[i];
f1=f2;
for(i=0;i x2[i]=x3[i];
f2=f3;
}
for(i=0;i x3[i]=x2[i]+h*s[i];
f3=f(x3p);
while(f3 {
h=2*h;
for(i=0;i x1[i]=x2[i];
f1=f2;
for(i=0;i x2[i]=x3[i];
f2=f3;
for(i=0;i x3[i]=x2[i]+h*s[i];
f3=f(x3p);
}
for(i=0;i {
if(x1[i] {
a[i]=x1[i];
b[i]=x3[i];
}
else
{???????????????????????????????????????/*搜索方向為正向*/?/*計算第三試點*/?/*判斷是否未完成搜索*/?/*未完成,繼續搜索*/?/*已完成*/?/*輸出初始搜索區間*/
a[i]=x3[i];
b[i]=x1[i];
}
}
}
void?mhjfgf(int?nfloat?a[]float?b[]float?flagfloat?x[]float?p)?{
int?i;
float?x1[m]x2[m]f1f2sum;
for(i=0;i x1[i]=b[i]-(float)0.618*(b[i]-a[i]);
f1=f(x1p);
for(i=0;i x2[i]=a[i]+(float)0.618*(b[i]-a[i]);
f2=f(x2p);
do
{
if(f1<=f2)???????????/*判斷消去區間*/?{?/*消去右*/
for(i=0;i b[i]=x2[i];
for(i=0;i x2[i]=x1[i];
f2=f1;
for(i=0;i x1[i]=b[i]-(float)0.618*(b[i]-a[i]);
f1=f(x1p);
}
else
{????????????????????????????????????/*消去左*/
for(i=0;i a[i]=x1[i];
for(i=0;i x1[i]=x2[i];
f1=f2;
for(i=0;i x2[i]=a[i]+(float)0.618*(b[i]-a[i]);
f2=f(x2p);
}
sum=0;
for(i=0;i sum+=(b[i]-a[i])*(b[i]-a[i]);
}while(sqrt(sum)>fl
- 上一篇:基于MFC的BMP圖像處理
- 下一篇:C語言:powell鮑威爾法;
評論
共有 條評論