📄 two.txt
字号:
二插法已知:F(x1,x2)=4*x1-x2的平方-12;求极小值,极小值点,迭代次数?
用复合形法求极值。
约束条件:x2>=0;
x1>=0;
25-x1的平方-x2的平方>=0;
#include <stdio.h>
#include <math.h>
#define EP 0.0001
#define E 0.01
#define fori for(i=0;i<=1;i++)
int i;
float f(float *p)
{
float y;
y=4*p[0]-pow(p[1],2)-12;
return(y);
}
int cons(float *q)
{
int n;
if((pow(q[0],2)+pow(q[1],2)-25<=0)&&(q[0]>=0)&&(q[1]>=0))
n=1;
else
n=0;
return(n);
}
void paixu(float *p1,float *p2,float *p3)
{
float f1,f2,f3;
float L[2],M[2],H[2];
f1=f(p1);
f2=f(p2);
f3=f(p3);
fori { H[i]=p1[i];M[i]=p2[i];L[i]=p3[i];}
if(f1>f2)
{
if(f2<f3)
if(f1>f3)
fori { M[i]=p3[i];L[i]=p2[i];}
else
fori { H[i]=p3[i];M[i]=p1[i];L[i]=p2[i];}
}
else
if(f2<f3)
fori { H[i]=p3[i];L[i]=p1[i];}
else
if(f1>f3)
fori { H[i]=p2[i];M[i]=p1[i];L[i]=p3[i];}
else
fori { H[i]=p2[i];M[i]=p3[i];L[i]=p1[i];}
fori { p1[i]=H[i];p2[i]=M[i];p3[i]=L[i];}
}
float r()
{
float rr;
do
rr=rand();
while(rr<=0);
rr=rr/32767;
return(rr);
}
main()
{
float x1[2]={2,1},x2[2]={4,1},x3[2]={3,3};
float XC[2],XR[2],A[2],B[2];
float H=1.3,FH,FR,FC,FL,cha,min,S;
int tf,tf1,tf2;
do
{
do
{
paixu(x1,x2,x3);
/*
fori printf("\n X1%d is %f,X2%d is %f,X3%d is %f.",i,x1[i],i,x2[i],i,x3[i]);
*/
fori XC[i]=(x2[i]+x3[i])/2;
/*
fori printf("\n XC%d is %f.",i,XC[i]);
*/
tf1=cons(XC);
if(tf1==0)
{
FC=f(XC);
FL=f(x3);
if(FL<FC)
fori { A[i]=x3[i];B[i]=XC[i];}
else
fori { A[i]=XC[i];B[i]=x3[i];}
do
{ S=r();x1[i]=A[i]+S*(B[i]-A[i]);tf2=cons(x1);}
while(tf2==0);
do
{ S=r();x2[i]=A[i]+S*(B[i]-A[i]);tf2=cons(x2);}
while(tf2==0);
do
{ S=r();x3[i]=A[i]+S*(B[i]-A[i]);tf2=cons(x3);}
while(tf2==0);
}
}
while(tf1==0);
fori XR[i]=XC[i]+H*(XC[i]-x1[i]);
/*
fori printf("\n XR%d is %f.",i,XR[i]);
*/
FH=f(x1);
FR=f(XR);
tf=cons(XR);
if(tf&&(FR<FH))
{
fori x1[i]=XR[i];
/*
printf("\n 1");
*/
}
else
H=H/2;
/*
printf("\n H is %f.",H);
*/
if(H<EP)
fori { x1[i]=x2[i];H=1.3;}
cha=(pow((f(x1)-f(x3)),2)+pow((f(x2)-f(x3)),2))/2;
/*
printf("/n Cha is %f.",cha);
*/
}
while(cha>E);
min=f(x3);
printf("\n The Min is %f.",min);
fori printf("\n The X%d is %f.",i,x3[i]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -