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

📄 fibonacci.cpp

📁 用斐波那契法迭代实现最小值得搜索的C++语言的实现
💻 CPP
字号:
#include<iostream.h>
int findn(double e);
double func(double x);
void main()
{
	double F[30];
	int n,i;
	double a,b,mm,nn;
	double e;
	cout<<"请输入区间:";
	cin>>a>>b;
	cout<<"请输入缩短精度:";
	cin>>e;
	n=findn(e);
	F[0]=1;
	F[1]=1;
	for(i=2;i<=20;i++)
		F[i]=F[i-1]+F[i-2];
	double t1,t2,a1=0,b1=0;
	t1=a+F[n-2]/F[n]*(b-a);
	t2=a+F[n-1]/F[n]*(b-a);
	mm=func(t1);
	nn=func(t2);
	for(i=n;i>=2;i--)
	{	
	    if(mm<nn)
		{
		    a1=a;
		    b1=t2;
		    t2=t1;
		    t1=b1+F[i-2]/F[i-1]*(a1-b1);
			nn=mm;
			mm=func(t1);
		}
	    else if(mm>nn)
		{
		     a1=t1;
		     b1=b;
		     t1=t2;
		     t2=a1+F[i-2]/F[i-1]*(b1-a1);
			 mm=nn;
			 nn=func(t2);
		}
		else
			if(i>2)
			     cout<<"中途发现无法迭代点!!!\n";
		a=a1;
		b=b1;
	}
	cout<<a<<"  "<<b<<endl;
	t2=a+(0.5+e/10)*(b-a);
	nn=func(t2);
	if(mm<nn)
		cout<<"原函数的最小值是"<<mm<<"在x="<<t1<<"处取得。\n";
	else
		cout<<"原函数的最小值是"<<nn<<"在x="<<t2<<"处取得。\n";
}
int findn(double e)
{
	int n=2;
	double a,b;
	a=0;
	b=1;
	do
	{
		a=b;
		b=a+b;
		n++;
	}while(1/b>e);
	return n;
}
double func(double x)
{
	return(x*x-x+2);
}

⌨️ 快捷键说明

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