资源描述:
《兰州交通大学fortran课程设计.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、目录1求一元方程的根和求定积分11.1求一元方程的根1二分法11.1.1弦截法31.1.2牛顿迭代法51.2求定积分71.2.1矩形法71.2.2梯形法91.2.3辛普生法:112求解线性方程组133编写程序完成链表的建立、插入、查找和删除等操作161求一元方程的根和求定积分1.1求一元方程的根作业要求1、采用函数子程序定义一元方程;2、程序选择以下三种方法求该方程的根;METHOD=1牛顿迭代法METHOD=2二分法1METHOD=3弦截法3、对于不同的近似算法分别编写子程序,精度要求10-6。本题用二分法
2、、弦解法和牛顿迭代法求x3-2x2+7x+4=0的根来编写程序求解。二分法二分法基本思路:现任取两个值x1和x2,使得f(x1)*f(x2)<0,也就是f(x1)和f(x2)必须异号。这才能保证在[x1,x2]区间有解,即存在一个x使得f(x)=0。令x=(x1+x2)/2,如果f(x)=0,就找到了这个解,计算完成。由于f(x)是一个实型数据,所以在判断f(x)是否等于0时,是通过判断|f(x)|是否小于一个很小的数ε,如果是就认为f(x)=0。若f(x)不等于0,判断如果f(x1)和f(x)异号,就说明解
3、在[x1,x]区间,就以x1,x为新的取值重复步骤(2),这时用x代替否则x2,否则反之,直到找到满足条件的解为止。程序编写如下:programlt12_1realx1,x2,xrealbisect,func!对要调用的子程序作说明do!输入x1和x2直到f(x1)和f(x2)异号为止print*,'输入x1,x2的值:'read*,x1,x2if(func(x1)*func(x2)<0.0)exitprint*,'不正确的输入!'enddox=bisect(x1,x2)!调用二分法求解函数print10,'
4、x=',x!输出计算结果10format(a,f15.7)endrealfunctionbisect(x1,x2)!二分法求解函数realx1,x2,x,f1,f2,fxx=(x1+x2)/2.0fx=func(x)dowhile(abs(fx)>1e-6)f1=func(x1)if(f1*fx<0)thenx2=xelsex1=xendifx=(x1+x2)/2.0fx=func(x)enddobisect=xendfunctionfunc(x)!需要求解的函数realxfunc=x**3-2*x**2+7
5、*x+4end运行结果:1.1.1弦截法弦截法的基本思路:现任取两个值x1和x2,使得f(x1)*f(x2)<0。(1)做一条通过(x1,f(x1))和(x2,f(x2))两点的直线,这条直线与x轴的交点为x。可用以下公式求出X=x2-(x2-x1)*f(x2)/(f(x1)-f(x2)),(2)代入函数求得f(x),判断|f(x)|是否小于一个很小的数ε,如果是就认为f(x)=0。(3)否则,判断如果f(x1)和f(x)异号,就说明解在[x1,x]区间,就以x1,x为新的取值重复步骤(2),否则反之,然后以
6、同样的办法再进一步缩小围,直到|f(x)|<ε。程序编写如下:realx1,x2,xrealsecant,func!对要调用的子程序作说明do!输入x1和x2直到f(x1)和f(x2)异号为止print*,'输入x1,x2的值'read*,x1,x2if(func(x1)*func(x2)<0)exitprint*,'不正确的取值'enddox=secant(x1,x2)!调用弦截法求解函数print10,'x=',x!输出计算结果10format(a,f15.7)Endrealfunctionsecant(
7、x1,x2)!弦截法求解函数implicitnonerealx1,x2,x,f1,f2,fxrealfuncx=x2-(x2-x1)/(func(x2)-func(x1))*func(x2)fx=func(x)dowhile(abs(fx)>1e-6)f1=func(x1)if(f1*fx<0)thenx2=xelsex1=xendifx=x2-(x2-x1)/(func(x2)-func(x1))*func(x2)fx=func(x)enddosecant=xendrealfunctionfunc(x)!需
8、要求解的函数realxfunc=x**3-2*x**2+7*x+4end运行结果:1.1.1牛顿迭代法牛顿迭代法基本思路(1)现任取一个值x1(2)做一条通过(x1,f(x1))的切线,即以f'(x1)为斜率作直线,直线与x轴的交点为x2,因为f'(x1)=f(x1)/(x1-x2)x2=x1-f(x1)/f'(x1)判断|f(x2)|<ε是否成立,如果是就找到了这个解,计算完成。(3)否则,重复步