您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 工程常用算法作业五-45组
《工程常用算法》综合实践作业五作业名称:常微分方程数值解法完成日期:2015年07月07日班级学号姓名主要工作说明自评成绩编写程序及调试A45组总结绘制流程图及排版题目:常微分初值问题如下:1)0()10(2'yxyxyy请用四阶经典Runge-Kutta格式、四阶Adams显示方法和隐式方法求解,比较三种方法的计算结果。要求:任选一种方法,但希望得到“优秀”成绩的小组必须完成最后一种求解方法。二、程序流程图开始初值y(0)=1,步长h=0.1,x=i*h函数y’y-2*x/y=f(x,y)用龙格-库塔法计算y1,y2,y3K1=f(xn,yn)K2=f(xn+h/2,yn+k1*h/2)K3=f(xn+h/2,yn+k2*h/2)K4=f(xn+h,yn+k3*h)yn+1=yn+h*(k1+2*k2+2*k3+k4)/6结束用隐式Adams法计算y4,y5…y10预测值:y[i+1]=y[i]+h*(-9*fi-3+37*fi-2-59*fi-1+55*fi)/24校正值:y[i+1]=y[i]+h*[fi-2-5*fi-1+19*fi+9*f(xi+1,yi+1)]/24隐式Adams法计算准确值:y(i)=sqrt(2*i*h+1)计算误差:e=fabs(y[i]-y(i))输出x,y[i],y(i),e=———三、完整的程序及简要的注释/**********隐式Adams法**************/#includestdio.h#includemath.hvoidkongge(void)//子函数,用来输出空格{inti;for(i=0;i12;i++){printf();}}doublef(doublex,doubley);//子函数声明doubleyy(doublex);//子函数声明doublef(doublex,doubley)//子函数定义f(x,y){doublea;a=y-2*x/y;returna;}doubleyy(doublex)//子函数定义y函数{doublea;a=sqrt(2*x+1);returna;}voidmain(){doublek1,k2,k3,k4,h=0.1,x0=0,x1,y0=1,y1,y11,ff[11],y[11];inti,j;y[0]=1;for(i=1;i4;i++)//龙格-库塔法算y1,y2,y3{k1=f(x0,y0);k2=f(x0+h/2,y0+k1*h/2);k3=f(x0+h/2,y0+h*k2/2);k4=f(x0+h,y0+h*k3);y1=y0+h*(k1+2*k2+2*k3+k4)/6;y[i]=y1;y0=y1;x0=i*h;}for(i=0;i4;i++)//计算f1,f2,f3{x0=i*h;ff[i]=f(x0,y[i]);}for(i=4;i=10;i++)//Adams方法计算{y0=y[i-1]+h*(-9*ff[i-4]+37*ff[i-3]-59*ff[i-2]+55*ff[i-1])/24;//预测值y[i]=y[i-1]+h*(ff[i-3]-5*ff[i-2]+19*ff[i-1]+9*f(i*h,y0))/24;//校正值ff[i]=f(i*h,y[i]);}printf(隐式Adams:\n);printf(计算值);kongge();printf(准确值);kongge();printf(误差\n);for(i=0;i11;i++)//输出计算结果{printf(x=%.1fy[%d]=%-13.10fy(%d)=%-13.10fe=%-13.10f\n,i*h,i,y[i],i,yy(h*i),fabs(y[i]-yy(h*i)));}getchar();}四、程序运行结果五、对不同实现方法的运行结果进行比较六、问题与总结
本文标题:工程常用算法作业五-45组
链接地址:https://www.777doc.com/doc-2444408 .html