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

📄 c++ - 复制.txt

📁 利用进退法求区间和黄金分割法做的优化设计编程。。。老师布置的题目
💻 TXT
字号:

#include<stdio.h>
#include<math.h>
#define f(t) (t*t-3*t)

void sb(double *a,double *b)
{
double t0,t1,t,h,alpha,f0,f1;
int k=0;
printf("请输入初始点t0=");
scanf("%lf",&t0);
printf("\n请输入初始步长h=");
scanf("%lf",&h);
printf("\n请输入加步系数alpha(需大于1)=");
scanf("%lf",&alpha);
f0=f(t0);
t1=t0+h;
f1=f(t1);
while(1)
{
   printf("\nf1=%lf,f2=%lf,t0=%lf,t=%lf,h=%lf,k=%d",f0,f1,t0,t1,h,k);
   if(f1<f0)
   {
    h=alpha*h;
    t=t0;
    t0=t1;
    f0=f1;
    k++;
   }
   else
   {
    if(k==0)
    {h=-h;t=t1;}
    else
    {   
     *a=t<t1?t:t1;
     *b=t>t1?t:t1;
     break;
    }
   }
   t1=t0+h;
   f1=f(t1);
}
}

main()
{
double a=0,b=0;
double *c,*d;
c=&a,d=&b;
sb(c,d);
printf("\na=%lf,b=%lf",a,b);
}
 




 
#include<stdio.h>
#include <math.h>
const int fi[10]={1,1,2,3,5,8,13,21,34,55};

double f(double x) //多项式
{
return (x-3)*(x-3);
}

double F(int tn)//计算Fibonacci数
{
if(tn<10) return fi[tn];
return pow(1.618,tn-9)*fi[9];
}

void main(void)
{
double r,u,a,b,fr,fu,q;
int k,n;

//步骤1,初始化
a=0.0;
b=3.0;
k=0;
q=0.00001;
n=0;

while(F(n)<((b-a)/q))n++; //计算次数n

r=a+(F(n-k-1)/F(n-k+1))*(b-a);
u=a+(F(n-k)/F(n-k+1))*(b-a);

fr=f(r);
fu=f(u);

while(k<n)
{
if(fr>fu)
{
if(b-r<=q)
{
printf("%d:%f",k,u);
break;
}
else
{
a=r;
b=b;
r=u;
fr=fu;
u=a+(F(n-k)/F(n-k+1))*(b-a);
fu=f(u);
k++;
}
}
else
{
if(u-a<=q)
{
printf("%d:%f",k,r);
break;
}
else
{
a=a;
b=u;
u=r;
fu=fr;
r=a+(F(n-k-1)/F(n-k+1))*(b-a);
fr=f(r);
k++;
}
}
}
getchar();
} 

⌨️ 快捷键说明

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