⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 最优化方法-插值法求最小值.c

📁 最优化方法-插值法求最小值 上最优化课程的时候写的程序
💻 C
字号:
#include"stdio.h"
#include"iostream.h"
#include"math.h"
double e,f,g,h;
double n=10.0;
double FuncTion(double a6){
 double y,z,u;
 z=1-a6;
 u=30*a6;
 y=(-1)*sin(a6)*sin(a6)*sin(a6)*sin(a6)*sin(a6)*sin(a6)*tan(z)*exp(u);
 return y;}
double FindThreP(double a5,double b5){
 double d;
 int flag,i;
    e=a5;g=b5;
 for(i=1;i<=9;i++){
      d=a5+i*(((b5-a5))/10.0);
   if(FuncTion(a5)>FuncTion(d)&&FuncTion(b5)>FuncTion(d)){
       f=d;flag=1;break;
 }
 }
if(i==10&&flag!=1)printf("error");
return 0;}
double FindMinX(double a,double b,double c){
 double r,u;
 r=0.5*((b*b-c*c)*(FuncTion(a))+(c*c-a*a)*(FuncTion(b))+(a*a-b*b)*(FuncTion(c)));
    u=(b-c)*(FuncTion(a))+(c-a)*(FuncTion(b))+(a-b)*(FuncTion(c));
 r=r/u;
 h=r;
 return 0;
 }
double IsMinX(double a,double b,double c,double d){
double a1,a2,a3,a4;
a1=FuncTion(a);
a2=FuncTion(b);
a3=FuncTion(c);
a4=FuncTion(d);
if((fabs(a2-a4)<=(fabs(a2)*0.001))/*&&((fabs(a2)>0.00001))*/||(fabs(a2-a4)<=0.001)&&(fabs(a2)<0.00001)){
   if(a4<a2)return d;
   else return b;
}
 if(d>b){
 if(a4<a2){
  e=b;f=d;
 }
 else {
  g=d;
 }
 }
else {if(a4<a2){
       g=b;f=d;
}
else{e=d;
}
}
return -1;}

int main(){
 int n=1;
 double t;
FindThreP(0.0,1.0);
printf("%f   %f   %f",e,f,g);  
loop:FindMinX(e,f,g);
  if((t=IsMinX(e,f,g,h))==-1.0){
   n=n+1;
  if(n>10000){
    printf("may be some error");return 0;
   }
  printf("%f   %f   %f",e,f,g);
  goto loop;}
  //}
  else printf("%f",t);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -