#includestdio.h
芒康網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),芒康網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為芒康1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的芒康做網(wǎng)站的公司定做!
#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("運用搜索法所求結(jié)果:%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("運用二分法所求結(jié)果:%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("運用牛頓法所求結(jié)果:%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)
%初始區(qū)間為a,b,相對精度precision
即為原區(qū)間的多少分之,t0為初始值,h為步長
%用進退法得到高低高區(qū)間,在用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)
%函數(shù)為f(x)=t^2-10*t+36
嚴格凸函數(shù)
y=x.^2-2*x+2;
%======================================
function
[x1,x2]=Fpush(t0,h)
%進退法,調(diào)用函數(shù)為,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語言來編進退法的搜索區(qū)間的源代碼如下:
#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語言查找是在大量的信息中尋找一個特定的信息元素,在計算機應(yīng)用中,查找是常用的基本運算,例如編譯程序中符號表的查找。
2、其實二分查找、插值查找以及斐波那契查找都可以歸為一類——插值查找。插值查找和斐波那契查找是在二分查找的基礎(chǔ)上的優(yōu)化查找算法。
網(wǎng)站欄目:c語言進退法求函數(shù) c語言進1法
文章源于:http://muchs.cn/article16/doshhdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站建設(shè)、小程序開發(fā)、做網(wǎng)站、網(wǎng)站營銷、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)