📄 c++ - 复制.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 + -