1二分求根法:
二分求根法主要用的思想是不断调整并缩小搜索区间的大小,当搜索区间的大小已小于搜索精度要求时,则可说明已找到满足条件的近拟根。
当然,在这之前,首先是要准确的估计出根所处的区间,否则,是找不到根的。
type binarypationmethod(type x1,type x2,type e,type (*arguf)(type),file* outputfile)
type x;/*the return answer*/
type mid;
type down,up;
int iteratornum=0;
down=x1;
up=x2;
assertf(x1<=x2,"in twopation x1>=x2");
assertf(arguf!=null,"in twopation arguf is null");
assertf(outputfile!=null,"in twopation outputfile is null");
assertf((*arguf)(x1)*(arguf)(x2)<=0,"in twopation,f(x1)*f(x2)>0");
fprintf(outputfile,"down\t\tup\t\t");
/*two pation is a method that is surely to find root for a formula*/
while(fabs(up-down)>(float)1/(float)2*e)
/*get the answer*/
x=mid;
/*output answer*/
fprintf(outputfile,"total iterator time is:%d",iteratornum
fprintf(outputfile,"a root of equation is :%f",x);
return x;
测试1:用二分法求:
f(x)=x^3-x^2-2*x+1=0在(0,1)附近的根。
精度:0.001.
output:
down up
total iterator time is:11
a root of equation is :0.444824
2迭代法:
迭代法首先要求方程能够化到x=fi(x)的形式,并且还要保证这个式子在所给定的区间范围内满足收敛要求。
主要的迭代过程是简单的,就是:
x_k+1=fi(xk)
当xk+1-xk满足精度要求时,则表示已找到方程的近拟根。
type iteratormethod(type downlimit,type uplimit,type precise,type (*fiarguf)(type),file* outputfile)
type xk;
int iteratornum=0;
assertf(downlimit<=uplimit,"in iteratormethod x1>=x2");
assertf(fiarguf!=null,"in iteratormethod arguf is null");
assertf(outputfile!=null,"in iteratormethod outputfile is null");
xk=downlimit;
fprintf(outputfile,"k\t\txk\t\t");
fprintf(outputfile,"%12d%-12f",iteratornum,xk);
iteratornum++;
while(fabs((*fiarguf)(xk)-xk)>(float)1/(float)2*precise)
fprintf(outputfile,"root finded at x=%f",xk);
return xk;
测试2:用迭代法求解方程
f(x)=1/(x+1)^2的近似根。
根的有效区间在(0.4,0.55).
精度为0.0001.
output: k xk
root finded at x=0.465552
3aitken加速法
aitken也是基于迭代法的一种求根方案,所不同的是它在迭代式的选取上做了一些工作,使得迭代的速度变得更快。
type aitkenaccmethod(type startx,type precise,type (*fiarguf)(type),file* outputfile)
type xk;
int iteratornum=0;
assertf(fiarguf!=null,"in aitkenaccmethod arguf is null");
assertf(outputfile!=null,"in aitkenaccmethod outputfile is null");
xk=startx;
fprintf(outputfile,"k\t\txk\t\t");
fprintf(outputfile,"%12d%-12f",iteratornum,xk);
iteratornum++;
while(fabs((*fiarguf)(xk)-xk)>(float)1/(float)2*precise)
fprintf(outputfile,"root finded at x=%f",xk);
return xk;
测试3:aitken迭代加速算法的应用
计算的是方程
x=1/(x+1)^2在x=0.4附近的近似根。
精度:0.0001
ouput: k xk
root finded at x=0.465570
4牛顿求根法:
牛顿求根法通过对原方程切线方程的变换,保证了迭代结果的收敛性,唯一麻烦的地方是要提供原函数的导数:
type newtownmethod(type startx,type precise,type (*fiarguf)(type),type (*fiargufdao)(type),file* outputfile)
type xk;
int iteratornum=0;
assertf(fiarguf!=null,"in newtownmethod,arguf is null");
assertf(fiargufdao!=null,"in newtownmethod,fiargufdao is null");
assertf(outputfile!=null,"in newtownmethod,fiargufdao is null");
数值分析与算法作业
第七章上机题作业。1 解 由于步长h要改变,故将其设为变量,则编程实现romberg求积算法7.1的程序为 romberg 使用romberg积分算法求积分值。function i,n,err romberg fun,a,b,h,ep fun是被积函数,a,b是积分下 上限,h是步长,ep是误差精度...
数值分析与算法作业
第三章上机题作业。1 p111 解 编程实现矩阵的lu分解以及回代和前代过程的函数文件程序如下 function a,l,u,x,x1 ex0301 a,b 算法3.5,用高斯消去过程进行lu分解。n length a for k 1 n 1 for i k 1 n a i,k a i,k a k,...
算法初步小结
课题 算法初步小结 说课稿 占书文 湖北省云梦县梦泽高中 一。说教材分析。1.地位和作用。算法初步 是人教a版高中新课标教材必修3第一章的内容,是一项新增内容,也是广大数学教师教学中普遍感到比较困难的一章。算法是数学及其应用的重要组成部分,是计算科学的重要基础。随着现代信息技术的飞速发展,算法在科学...