本文目录一览:
- 1、c语言编程:用黄金分割法求 minf(x)=x2+2x+1 急!!!!
- 2、《C语言编程魔法书》pdf下载在线阅读全文,求百度网盘云资源
- 3、用黄金分割法求f(x)=(x-3)²的最优解 附C语言程序
- 4、编程你们来看下啊2X^2-2X+1用C语言编出来,最好用MATLAB搞出来还有分加的
- 5、用c语言编写黄金分割法
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语言编程魔法书》pdf下载在线阅读全文,求百度网盘云资源
《C语言编程魔法书》百度网盘pdf最新全集下载:
链接:
?pwd=6jvc 提取码: 6jvc
简介:主要讲解C11标准的语法内容,并且从整个编译、连接到加载过程都会涉及。同时在后会分别介绍GCC编译器与Clang编译器的C语言语法扩展。通过阅读本书,读者能够完全掌握新标准的C语言编程。并且对C语言设计思想、实现方式也能有个大概的了解。
用黄金分割法求f(x)=(x-3)²的最优解 附C语言程序
黄金分割法其实也是Fibonacci法吧!!!因为对于Fibonacci数列,有f(n)/f(n-1)-→0.618......
这题解法我是参考,
只是改了多项式和Fibonacci数列用黄金分割数来求而已(需要改的还有x的范围(a,b))!
#includestdio.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(tn10)
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(kn)
{
if(frfu)
{
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();
}
编程你们来看下啊2X^2-2X+1用C语言编出来,最好用MATLAB搞出来还有分加的
把以下程序存为f618.m,再运行[x,min]=F618(0.2,0,1)
得到:x=1,min=0
function [x,min]=F618(precision,t0,h)
%初始区间为a,b,相对精度precision 即为原区间的多少分之,t0为初始值,h为步长
%用进退法得到高低高区间,在用0.618法求最值
%precision=0.2;
%t0=0;
%h=1;
[a,b]=Fpush(t0,h);
An=a;
Bn=b;
n=1;
while 0.618^(n-1)=precision
A=0.618.*(An-Bn)+Bn;
B=0.618.*(Bn-An)+An;
if AB
if F618Ret(A)F618Ret(B)
Bn=B;
else
An=A;
end
else
if F618Ret(A)F618Ret(B)
An=A;
else
Bn=B;
end
end
n=n+1;
end
x=An;
min=F618Ret(An);
%=======================================
function y=F618Ret(x)
%函数为f(x)=t^2-10*t+36 严格凸函数
y=x.^2-2*x+2;
%======================================
function [x1,x2]=Fpush(t0,h)
%进退法,调用函数为,F618Ret,t0为初始值,h为步长
a=t0;
b=t0+h;
while 1
if F618Ret(a)F618Ret(b)
h=0-h;
a=a+h;
b=a-h;
if F618Ret(b)F618Ret(b-h) F618(b)F618Ret(a)
break;
end
else
a=b;
b=a+h;
if F618Ret(a)F618Ret(b) F618Ret(a)F618Ret(a-h)
break;
end
end
end
x1=a;
x2=b;
用c语言编写黄金分割法
黄金分割点是指把一条线段分割为两部分,使其中一部分与全长之比等于另一部分与这部分之比。其比值是一个无理数,用分数表示为(√5-1)/2。黄金分割点(p)的求法,如图:①过点B作BD⊥AB,使BD=1/2AB;②连结AD,以D为圆心,CB为半径作弧,交AD于E, 则有DE=DB;③以A为圆心,AE为半径作弧,交AB于P,则有AP=AE;则点P是线段AB上的一个黄金分割点.为什么点P是线段AB上的一个黄金分割点?事实上,若设AB=2,则BD=BE=1,由作图过程可知AD=√5.则AE=AP=(√5)-1,PB/AP=AP/AB=[(√5)-1]/2。 因此点P是线段AB上的一个黄金分割点.