机械优化设计C语言程序

一、黄金分割法Gamma校正
二、二次插值法
三、最速下降法(阶梯法)
四、变尺度法
五、鲍威尔法
一、黄金分割法
#include<stdio。h>
#include<math。h〉
#define r 0。618
#define f(x) x*x+2*x
golden(float,float,float);
main()
{
  float a,b,e;
  printf(”\n请输入区间和收敛精度:a,b,e\n");
  scanf("%f,%f,%f",&a,&b,&e);
  golden(a,b,e);
}
golden(float a,float b,float e)
{
  float y1,y2,a1,a2,A,Y;
  int n=0;
  a1=b-r*(b—a);
  a2=a+r*(b—a);
  y1=f(a1);
  y2=f(a2);帮忙节目
  printf(”黄金分割法的搜索过程:");王的男人 李俊基
  do
    { printf(”\n %d a=%f,b=%f,a1=%f,a2=%f,y1=%f,y2=%f”,n,a,b,a1,a2,y1,y2);
   
      if(y1>=y2)
    {
      a=a1;
      a1=a2;
      y1=y2;
      a2=a+r*(b—a);
      y2=f(a2);
    }
      else
    {
      b=a2;
      a2=a1;
      y2=y1;
      a1=b—r*(b-a);
611aa      y1=f(a1);
   
    }
      n++;
    }while(fabs((b—a)/b)>=e||fabs((y2-y1)/y2)>=e);
    A=(a+b)/2;
    Y=f(A);
printf(”\n %d a=%f,b=%f,a1=%f,a2=%f",n,a,b,a1,a2);
  printf("\n结果:\n极值点及其函数值:A=%f,Y=%f\n”, A,Y);
}
二、二次插值法
#include"stdio。h”
#include"math.h"
#include"conio。h”
void main()
float*area(float a1,float p,float a[3]);
float f(float x);
float ar,fr;
float a1=10,p=0。01,e=0.000001;
float pa[3];
area(a1,p,pa);
a1=pa[0];
float a2=pa[1];
float a3=pa[2];
float f1=f(a1);
float f2=f(a2);
float f3=f(a3);
do
  {
    ar=((a3*a3—a2*a2)*f1+(a1*a1—a3*a3)*f2+(a2*a2—a1*a1)*f3);
    ar=ar/2/((a3-a2)*f1+(a1—a3)*f2+(a2—a1)*f3);
    fr=f(ar);
if(ar〉a2)
  { if(fr〉f2)
      { a3=ar; f3=fr; } 
    else if(fr<f2)
      { a1=a2; f1=f2;
        a2=ar; f2=fr; }
    else
      { a3=ar; a1=a2; a2=(a1+a3)/2;
        f1=f2; f3=fr; f2=f(a2); }
    }
else if(ar〈a2)
{      if(fr>f2)
      { a1=ar; f1=fr; }
      else if(fr〈f2)
      { a3=a2; f3=f2;
        a2=ar; f2=fr; }
      else
      { a1=ar; a3=a2; a2=(a1+a3)/2;
        f1=fr; f3=f2; f2=f(a2); }
      }
  if (fabs(a1—a3)<=e) break;
} while(1);
if(f2〈fr)
  { ar=a2; fr=f2; }
printf(”\nx=%f\nf(x*)=%f”,ar,fr);
  }
巴洛特利养母
float*area(float a1,float p,float a[3])
{
float f(float x);
float a2,f2,a3,f3,temp;
float acc=0.00001;
float f1=f(a1);
float storep=p;
while(1)
      { a2=a1+p; f2=f(a2);
        if(f2〉=f1)
        { if(fabs(f2—f1)〈acc)
                  p=p/2;rf2.0
          else
                  p=-p;
        }
    else break;
}
while(1)
{ a3=a2+p; f3=f(a3);
  if(f2〈=f3) break;
  p=2*p;
  a1=a2; f1=f2;
  a2=a3; f2=f3;
}
if(a1〉a3)
    { temp=a1; a1=a3; a3=temp; }
a[0]=a1;a[1]=a2;a[2]=a3;
return a;
}
float f(float x)
{
  float y=pow(fabs(x—1),1.5)+pow(fabs(x-1),2。7);
  return y;
}
三、最速下降法
#include 〈stdio。h〉
#include 〈math。h〉
float fun1(float x1,float x2)           
{float a;
a=2*x1;
return a;
}
float fun2(float x1,float x2)           
{float b;
b=50*x2;
return b;
float fun3(float x1,float x2)         
{float y;
y=x1*x1+25*x2*x2;
return y;
}
main()
{ float t, e=0.01, x1=0, x2=1, a, b, y, m;     
  a=fun1(x1,x2);                                 
  b=fun2(x1,x2);                               
  m=sqrt(a*a+b*b);                               
  while(m〉e)                                   
  { t=(a*a+b*b)/(2*a*a+50*b*b);   
    x1=x1-a*t;                       
    x2=x2-b*t;
    a=fun1(x1,x2);                   
    b=fun2(x1,x2);                   
    m=sqrt(a*a+b*b);               
  }
  y=fun3(x1,x2);                     
  printf(”The min is %f",y);           
}
四、DFP变尺度法
#include<stdio。h>
#include〈stdlib.h>
#include<math.h>
#include<conio.h>
#define tt 0。01
#define ff 1。0e-6
#define ac 1。0e—6
#define ad 1。0e-6
#define n 2
double ia;
double fny(double *x)
{
double x1=x[0],x2=x[1];
double f;
f=x1*x1+2*x2*x2—4*x1-2*x1*x2;

本文发布于:2024-09-22 13:28:35,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/131381.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:极值   输入   阶梯法   节目   过程
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议