计算方法上机作业

发布 2022-09-05 10:41:28 阅读 5083

计算方法第四次上机报告。

2.用欧拉方法解初值。

y’=10x(1-y) 0<=x<=1

y(0)=0

取步长h=0.1,保留5位有效数字,并与准确解相比较。

分析:该题目考察欧拉方法解初值问题。

程序如下:function heun(a,b,y0,n)

h=(b-a)/n;x=a:h:b;

y=y0*ones(1,n+1);

for j=2:n+1

yp=y(j-1)+h*f(x(j-1),y(j-1));

yc=y(j-1)+h*f(x(j),yp);

y(j)=1/2*(yp+yc);

endfor k=1:n+1

fprintf('x[%d]=%f\ty[%d]=%f',k-1,x(k),k-1,y(k));

endfunction z=f(xx,yy)

z=10*xx*(1-yy);

运行结果:> heun(0,1,0,10)

x[0]=0.000000 y[0]=0.000000

x[1]=0.100000 y[1]=0.050000

x[2]=0.200000 y[2]=0.183000

x[3]=0.300000 y[3]=0.362740

x[4]=0.400000 y[4]=0.547545

x[5]=0.500000 y[5]=0.705905

x[6]=0.600000 y[6]=0.823543

x[7]=0.700000 y[7]=0.901184

x[8]=0.800000 y[8]=0.947627

x[9]=0.900000 y[9]=0.973290

x[10]=1.000000 y[10]=0.986645

分析:该结果与准确结果相比比较接近,但是有一定的误差。

6.用四阶龙格—库塔公式解第三题中的初值问题,取步长h=0.2,保留五位有效数字。

题目目的分析:

该题考查四阶龙格-库塔方法和改进欧拉方法求解精确度问题。

程序:改进欧拉法:

function heun(a,b,y0,n)

h=(b-a)/n;x=a:h:b;

y=y0*ones(1,n+1);

for j=2:n+1

yp=y(j-1)+h*f(x(j-1),y(j-1));

yc=y(j-1)+h*f(x(j),yp);

y(j)=1/2*(yp+yc);

endfor k=1:n+1

fprintf('x[%d]=%f\ty[%d]=%f',k-1,x(k),k-1,y(k));

end四阶龙格-库塔方法:

function oderk4(a,b,y0,n)

h=(b-a)/n;x=a:h:b;

y=y0*ones(1,n+1);

for j=2:n+1

k1=f(x(j-1),y(j-1));

k2=f(x(j-1)+h/2,y(j-1)+h/2*k1);

k3=f(x(j-1)+h/2,y(j-1)+h/2*k2);

k4=f(x(j-1)+h,y(j-1)+h*k3);

y(j)=y(j-1)+h/6*(k1+k4)+h/3*(k2+k3);

endfor k=1:n+1

fprintf('x[%d]=%f\ty[%d]=%f',k-1,x(k),k-1,y(k));

endfunction z=f(xx,yy)

z=-yy;

结果:> heun(0,1.0,1,10)

x[0]=0.000000 y[0]=1.000000

x[1]=0.100000 y[1]=0.905000

x[2]=0.200000 y[2]=0.819025

x[3]=0.300000 y[3]=0.741218

x[4]=0.400000 y[4]=0.670802

x[5]=0.500000 y[5]=0.607076

x[6]=0.600000 y[6]=0.549404

x[7]=0.700000 y[7]=0.497210

x[8]=0.800000 y[8]=0.449975

x[9]=0.900000 y[9]=0.407228

x[10]=1.000000 y[10]=0.368541

> oderk4(0,1.0,1,5)

x[0]=0.000000 y[0]=1.000000

x[1]=0.200000 y[1]=0.818733

x[2]=0.400000 y[2]=0.670324

x[3]=0.600000 y[3]=0.548817

x[4]=0.800000 y[4]=0.449335

x[5]=1.000000 y[5]=0.367885

结果分析:由程序结果得改进欧拉法和四阶龙格-库塔法运行结果上在小数第二位后才开始有所不同,但结果相差不大,精确度都是挺高的。

12.将二阶方程。

化为一阶方程组,取h=0.1,用四阶龙格-库塔法求有y(0.2)的近似值,保留5位有效数字。

解:目的分析:

该题目是要将二阶方程化为一解方程组,并用四阶龙格-库塔法求近似值。

程序如下:公式部分:

function z=f1(xx,yy)

z=5*xx-6*yy;

四阶龙格-库塔法:

function oderk4_1(a,b,y0,n)

h=(b-a)/n;x=a:h:b;

y=y0*ones(1,n+1);

z=-ones(1,n+1);

for j=2:n+1

k1=z(j-1);

l1=f1(z(j-1),y(j-1));

k2=z(j-1)+h/2*l1;

l2=f1(z(j-1)+h/2*l1,y(j-1)+h/2*k1);

k3=z(j-1)+h/2*l2;

l3=f1(z(j-1)+h*l2/2,y(j-1)+h/2*k2);

k4=z(j-1)+h*l3;

l4=f1(z(j-1)+h*l3,y(j-1)+h*k3);

y(j)=y(j-1)+h*(k1+2*k2+2*k3+k4)/6;

z(j)=z(j-1)+h*(l1+2*l2+2*l3+l4)/6;

endfor k=1:n+1

fprintf('x[%d]=%f\ty[%d]=%f',k-1,x(k),k-1,y(k));

endend

结果图:结果分析:

由程序结果得四阶龙格-库塔法所得y(0.2)=0.501088

所给初值问题精确解为,y(0.2)=0.5009424.两结果在数值上相差不大,精确度高。

计算方法上机作业

计算方法上机报告。姓名 学号 班级 上课班级 1 算法思想。2 算法结构。3 matlab源程序。clear 清除工作空间变量。clc 清除命令窗口命令。m input 请输入有效数字的位数m输入有效数字的位数。s 0for n 0 50 t 1 16 n 4 8 n 1 2 8 n 4 1 8 n...

计算方法上机作业

表2 新算法迭代结果1 初值 0,精度ep 初始选择因子p 修正因子 0.1,最大迭代次数n 0,局部修正次数m分别取1,2,3次,f 49881192646492934000000000000.000000 表3 新算法迭代法结果2 初值 0,精度ep 初始选择因子p 修正因子 0.05,最大迭代...

数值计算方法上机作业

地球科学与技术学院地球探测与信息技术研11 6班孙殿强s1 实验2.1迭代法 初始值与收敛性。实验目的 初步认识非线性问题的迭代法与线性问题的迭代法的差别,迭代法及初始值与迭代收敛性的关系。问题提出 迭代法是求解非线性方程 组 的基本方法,与线性方程的情况一样,其构造方法多种多样,但关键是怎样才能使...