数值算法求根算法系列小结

发布 2023-05-02 11:52:28 阅读 8802

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第一章的内容,是一项新增内容,也是广大数学教师教学中普遍感到比较困难的一章。算法是数学及其应用的重要组成部分,是计算科学的重要基础。随着现代信息技术的飞速发展,算法在科学...