导航:首页 > 股市基金 > 用c语言编写黄金分割法

用c语言编写黄金分割法

发布时间:2022-02-28 17:45:31

㈠ 用黄金分割法求f(x)=(x-3)²的最优解 附C语言程序

黄金分割法其实也是Fibonacci法吧!!!因为对于Fibonacci数列,有f(n)/f(n-1)-→0.618......
这题解法我是参考http://hi..com/shyyooeren/blog/item/d74f42104e8ef9f9c2ce7902.html,
只是改了多项式和Fibonacci数列用黄金分割数来求而已(需要改的还有x的范围(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();
}

㈡ C语言 用黄金分割法求函数的最小值和取最小值时的x

给,已经编译运行确认: #include"math.h" #include"stdio.h" #definef(x)x*x+2*x+1//一元函数,这里按照你的要求写的是:x2+2x+1 //函数功能是用黄金分割法实现求一元函数的最优解 doublehj(double*a,double*b,doublee,int*n) {doublex1,x2,s;<br>if(fabs(*b-*a)<=e)<br>s=f((*b+*a)/2);<br>else<br>{x1=*a+0.382*(*b-*a);<br>x2=*a+0.618*(*b-*a);<br>if(f(x1)>f(x2))<br>*a=x1;<br>else<br>*b=x2;<br>*n=*n+1;<br>s=hj(a,b,e,n);<br>} returns; } main() {doubles,a,b,e;<br>intn=0;<br>scanf("%lf%lf%lf",&a,&b,&e);//输入区间[a,b]和精度e的值<br>s=hj(&a,&b,e,&n);//调用hj函数,其中n代表迭代次数<br>printf("a=%lf,b=%lf,s=%lf,n=%d ",a,b,s,n);<br>} 运行时: 输入:0.60.50.1 输出结果为: 0.60.50.1 a=0.600000,b=0.500000,s=2.402500,n=0

㈢ 用C语言编写黄金分割法f(x)=x2+2x程序

#include#includefloat getequation(float x)
{
return x*x-2*x+2;
}
void main()
{
float a=0;

float b=6;

float result = 0;
do {
float c=a+0.618*(b-a);
float d=a+b-c;

if(fabs(getequation(c)) < fabs(getequation(d)))
{
a=d;

result = c;

}
else
{
b=c;
result = d;
}
} while(fabs(getequation(result)) > 0.01);
printf("f(a)=a*a-7*a+10 ");
printf("a=%f ",result);
}

(3)用c语言编写黄金分割法扩展阅读

C语言编写程序求最大值

#include<stdio.h>
doubleMax(double*p,intn)
{
doublemax=*p;

for(inti=0;i<n;i++)

if(*(p+i)>max)

max=*(p+i);

returnmax;
}
doubleMin(double*p,intn)
{
doublemin=*p;
for(inti=0;i<n;i++)
if(*(p+i)<min)

min=*(p+i);

returnmin;
}
doubleAverage(double*p,intn)
{
doublesum=0;

for(inti=0;i<n;i++)

sum+=*(p+i);
returnsum/n;
}
intmain()
{
doublea[10];

printf("请输入10个实数: ");
for(inti=0;i<10;i++)
scanf("%f",&a[i]);
printf("这10个数中最大值为:%f ",Max(a,10));

printf("这10个数中最小值为:%f ",Min(a,10));

printf("这10个数的平均值为:%f ",Average(a,10));
return0;

㈣ C语言求两个点的黄金分割;C语言计算题(2,3两题)

#include <stdio.h>


int main()

{

float x1,y1,x2,y2;

scanf("%f%f%f%f",&x1,&y1,&x2,&y2);

printf("%f %f",(x1+x2)*0.618,(y1+y2)*0.618);

return 0;

}








#include <stdio.h>

#include <math.h>

int main()

{

double x=sqrt(1+1.0/(1*2)+1.0/(1*2*3));

double y=pow(asin(1),x);

double z=log(pow(x,2)+y)/(pow(sin(x*y),2)+1);

printf("%lf ",z);

return 0;

}

㈤ 用黄金分割法求f(x)=(x-3)的最优解 附C语言程序

黄金分割法其实也是Fibonacci法吧!!!因为对于Fibonacci数列,有f(n)/f(n-1)-→0.618...... 这题解法我是参考http://hi..com/shyyooeren/blog/item/d74f42104e8ef9f9c2ce7902.html, 只是改了多项式和Fibonacci数列用黄金分割数来求而已(需要改的还有x的范围(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(); }

㈥ C语言编程,用黄金分割法求f(a)=a*a-7*a+10的最优解。设初始值a0=0,初始步长h=1,取迭代精度=0.35。急…

#include <stdio.h>
#include <math.h>
float GetEquation(float x)
{
return x*x-7*x+10;
}
void main()
{
float a=0;
float b=6;
float result = 0;
do {
float c=a+0.618*(b-a);
float d=a+b-c;
if(fabs(GetEquation(c)) < fabs(GetEquation(d)))
{
a=d;
result = c;
}
else
{
b=c;
result = d;
}
} while(fabs(GetEquation(result)) > 0.01);
printf("f(a)=a*a-7*a+10\n");
printf("a=%f\n",result);
}

㈦ 用c语言编写黄金分割法

黄金分割点是指把一条线段分割为两部分,使其中一部分与全长之比等于另一部分与这部分之比。其比值是一个无理数,用分数表示为(√5-1)/2。黄金分割点(p)的求法,如图:①过点B作BD⊥AB,使BD=1/2AB;②连结AD,以D为圆心,CB为半径作弧,交AD于E,...

㈧ c语言编程:用黄金分割法求 minf(x)=x2+2x+1 急!!!!

给,已经编译运行确认:
#include "math.h"
#include "stdio.h"
#define f(x) x*x+2*x+1 //一元函数,这里按照你的要求写的是:x2+2x+1
//函数功能是用黄金分割法实现求一元函数 的最优解
double hj(double *a,double *b,double e,int *n)
{ double x1,x2,s;
if(fabs(*b-*a)<=e)
s=f((*b+*a)/2);
else
{ x1=*a+0.382*(*b-*a);
x2=*a+0.618*(*b-*a);
if(f(x1)>f(x2))
*a=x1;
else
*b=x2;
*n=*n+1;
s=hj(a,b,e,n);
}
return s;
}
main()
{ double s,a,b,e;
int n=0;
scanf("%lf %lf %lf",&a,&b,&e); // 输入区间[a,b]和精度e的值
s=hj(&a,&b,e,&n); //调用hj函数,其中n代表迭代次数
printf("a=%lf,b=%lf,s=%lf,n=%d\n",a,b,s,n);
}

运行时:
输入:0.6 0.5 0.1
输出结果为:
0.6 0.5 0.1
a=0.600000,b=0.500000,s=2.402500,n=0

㈨ 用c程序写出黄金分割法缩短探索区间求最小值解法

#include<iostream.h>
#include<math.h>
/*黄金分割法求最小值的C++程序,部分变量及函数书写并不规范*/

//δ为题给精度
int n = (lnδ/ln0.618 + 1) + 1;
int i;
float f(float ai, float bi)
{
a(i + 1) = ai + 0.618(bi - ai);
return ai + 1;
}

float g(float ai, float bi)
{
b(i + 1) = ai + 0.382(bi - ai);
return b(i + 1);
}

float F(float ai, float bi)
{
//题给的f(x)函数式;
return ;
}

float A(float ai, float bi)
{
int i = 1;
float result;
L: do
{
a(i + 1) = f(float ai, float bi);
b(i + 1) = g(float ai, float bi);
float F1 = F(float ai, float bi);
float F2 = F(float a(i + 1), float b(i + 1));
ai = ai, bi = b(i + 1);
i ++;

}while(i <= n && F1 >= F2)
if(i < n)
{
B(float ai, float bi);
}
else
result = F2;
return result;

}

float B(float ai, float bi)
{
do
{
a(i + 1) = f(float ai, float bi);
b(i + 1) = g(float ai, float bi);
float F1 = F(float ai, float bi);
float F2 = F(float a(i + 1), float b(i + 1));
ai = a(i + 1), bi = bi;
i ++;

}while(i <= n && F1 <= F2)
if(i < n)
{
goto L;
}
else
result = F1;
return result;

}

void main()
{
int i = 1;
float A(float ai, float bi);
cout<<"最小值为:"<<result<<endl;
}

㈩ 用C语言编写黄金分割法f(x)=x2+2x程序

你要很精确的解吗?如果不要的话那就很简单了。
x=-3:0.00001:6;中的精度你自己选,太小了会比较慢
y=x.^2+2*x;
[n
m]=min(y);
这个返回的就是x和对应的最小值;

阅读全文

与用c语言编写黄金分割法相关的资料

热点内容
宁波中信证券地址查询 浏览:796
沙钢股份和马钢哪个好 浏览:771
股指期货奇才 浏览:767
股票中穿透 浏览:90
李嘉诚拥有多少股份 浏览:425
文化长城股票怎么样 浏览:190
河南省bt融资管理办法 浏览:348
天虹股份历年业绩 浏览:402
26家金融公司自主办理抵押 浏览:204
赫美集团股票历史最高价 浏览:688
重庆迪马股票 浏览:697
深交所豆神教育股票 浏览:270
找金融机构办贷款 浏览:809
华融消费金融股份有限公司官方网址 浏览:31
太平洋保险集团公司总部工作怎样 浏览:509
外汇储备大幅降低 浏览:992
异议申请期间能贷款吗 浏览:270
邯郸市黄金店 浏览:350
今天美元离岸对人民币汇率 浏览:329
美国金融服务业现状分析 浏览:128