重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#includestdio.h
芒康网站建设公司成都创新互联,芒康网站设计制作,有大型网站制作公司丰富经验。已为芒康1000+提供企业网站建设服务。企业网站搭建\成都外贸网站建设要多少钱,请找那个售后服务好的芒康做网站的公司定做!
#includemath.h
void main()
{
void function1();//搜索法
void function2();//二分法
void function4();//牛顿法
int choice;
printf("请选择求解的方法:\n\t1.搜索法\n\t2.二分法\n\t3.牛顿法\n:");
switch(1)
{
case 1: function1();
case 2: function2();
case 4: function4();
}
}
void function1()//搜索法计算非线性方程的解
{
double expression1(double);
double lpoint=1.0,rpoint=2.0,step=0.0001;
while(expression1(lpoint)-0.00001)
{
lpoint=lpoint+step;
}
printf("运用搜索法所求结果:%f\n",lpoint);
}
void function2()//二分法计算非线性方程的解
{
double expression1(double);
double lpoint=1,rpoint=2,mpoint;
mpoint=(lpoint+rpoint)/2;
while(fabs(expression1(mpoint))0.00001)
{
mpoint=(lpoint+rpoint)/2;
if(expression1(lpoint)*expression1(mpoint)0)
rpoint=mpoint;
else
lpoint=mpoint;
}
printf("运用二分法所求结果:%f\n",mpoint);
}
void function4()//牛顿法计算非线性方程的解
{
double expression1(double);
double expression2(double);
double x=1.5;
while(expression1(x)0.00001)
{
x=x-expression1(x)/expression2(x);
}
printf("运用牛顿法所求结果:%f\n",x);
}
double expression1(double x)
{
double result;
result=x*x*x-x*x-1;
return result;
}
double expression2(double x)
{
double result;
result=3*x*x-2*x;
return result;
把以下程序存为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;
;sc=webch=w.hgid=cin=num=10lr=htn=8bs=%CD%FA%B5%C0%D3%C5%BB%AF%C8%ED%BC%FE
用C语言来编进退法的搜索区间的源代码如下:
#includestdio.h
void main()
{
int a[20],x,i,start,end;
printf("input 20 numbers:\n");
for(i=0;i20;i++) scanf("%d",a[i]);
printf("please enter the number:\n");
scanf("%d",x);
for(start=0,end=19;start=end;)
{
i=start+(end-start)/2;
if (x==a[i])
{
printf("%d",i+1);
getch();
return;
}
else if (xa[i]) end = i-1;
else start=i+1;
}
扩展资料
1、C语言查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。
2、其实二分查找、插值查找以及斐波那契查找都可以归为一类——插值查找。插值查找和斐波那契查找是在二分查找的基础上的优化查找算法。