数值计算方法大作业.docx
- 文档编号:15216509
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:32
- 大小:220.69KB
数值计算方法大作业.docx
《数值计算方法大作业.docx》由会员分享,可在线阅读,更多相关《数值计算方法大作业.docx(32页珍藏版)》请在冰点文库上搜索。
数值计算方法大作业
数值计算方法大作业(总31页)
第一章非线性方程求根····················3
迭代法······································3
牛顿法······································4
弦截法······································5
二分法······································6
第二章插值·······························7
线性插值····································7
二次插值····································8
拉格朗日插值································9
分段线性插值·······························10
分段二次插值·······························11
第三章数值积分··························13
复化矩形积分法·····························13
复化梯形积分法·····························14
辛普森积分法·······························15
变步长梯形积分法···························16
第四章线性方程组数值法··················17
约当消去法·································17
高斯消去法·································18
三角分解法·································20
雅可比迭代法································21
高斯—赛德尔迭代法··························23
第五章常积分方程数值法··················25
显示欧拉公式法······························25
欧拉公式预测校正法··························26
改进欧拉公式法······························27
四阶龙格—库塔法····························28
数值计算方法
第一章非线性方程求根
迭代法
程序代码:
PrivateSubCommand1_Click()
x0=Val(InputBox("请输入初始值x0"))
ep=Val(InputBox(请输入误差限ep))
f=0
Whilef=0
X1=(Exp(2*x0)-x0)/5
IfAbs(X1-x0) PrintX1 f=1 Else x0=X1 EndIf Wend EndSub 例: 求f(x)=e2x-6x=0在x=附近的根(ep=10-10) 牛顿法 程序代码: PrivateSubCommand1_Click() b=Val(InputBox("请输入被开方数x0")) ep=Val(InputBox(请输入误差限ep)) f=0 Whilef=0 X1=x0-(x0^2-b)/(2*b) IfAbs(X1-x0) PrintX1 f=1 Else x0=X1 EndIf Wend EndSub 例: 求 的值。 (ep=10-10) 弦截法 程序代码: PrivateSubCommand1_Click() x0=Val(InputBox("请输入第一个初始值x0")) X1=Val(InputBox("请输入第二个初始值x1")) ep=Val(InputBox("请输入误差限ep")) f=0 Whilef=0 X2=X1-(X1^8-13)*(X1-x0)/((X1^8-13)-(x0^8-13)) IfAbs(X2-X1) PrintX2 f=1 Else x0=X1 X1=X2 EndIf Wend EndSub 例: 求f(x)=x8-13的正根(初始值x1=1,x2=10,ep=10-10) 二分法 程序代码: PrivateSubCommand1_Click() a=Val(InputBox("请输入区间端点a")) b=Val(InputBox("请输入区间端点b")) ep=Val(InputBox("请输入误差限ep")) f=0 Whilef=0 x=(a+b)/2 fx=Exp(-x/7)*(9-2*x)-8 fa=Exp(-a/7)*(9-2*a)-8 Iffx=0Then f=1 Print"方程的根是",x Else Iffa*fx>0Then a=x Else b=x EndIf IfAbs(b-a) x=(b+a)/2 f=1 Print"方程的根是",x EndIf EndIf Wend EndSub 例: 求方程f(x)=e-7/x(9-2x)-8在区间[0,1]内的实根。 (ep=10-10) 第二章插值 线性插值 程序代码: PrivateSubCommand1_Click() X0=Val(InputBox("请输入第一个结点X: ")) Y0=Val(InputBox("请输入第一个结点Y: ")) X1=Val(InputBox("请输入第二个结点X: ")) Y1=Val(InputBox("请输入第二个结点Y: ")) f=0 Whilef=0 x=Val(InputBox("请输入未知点的自变量值X: ")) L0=(x-X1)/(X0-X1) L1=(x-X0)/(X1-X0) y=L0*Y0+L1*Y1 Print"x=";x,"y=";y f=Val(InputBox("是否继续(0/1): ")) Wend EndSub 例: 已知两点(13,1)、(49,8),求30处的值。 二次插值 程序代码: PrivateSubCommand1_Click() X0=Val(InputBox("请输入第一个结点X: ")) Y0=Val(InputBox("请输入第一个结点Y: ")) X1=Val(InputBox("请输入第二个结点X: ")) Y1=Val(InputBox("请输入第二个结点Y: ")) X2=Val(InputBox("请输入第三个结点X: ")) Y2=Val(InputBox("请输入第三个结点Y: ")) f=0 Whilef=0 x=Val(InputBox("请输入未知点的自变量值X: ")) L0=(x-X1)*(x-X2)/(X0-X1)/(X0-X2) L1=(x-X0)*(x-X2)/(X1-X0)/(X1-X2) L2=(x-X0)*(x-X1)/(X2-X0)/(X2-X1) y=L0*Y0+L1*Y1+L2*Y2 Print"x=";x,"y=";y f=Val(InputBox("是否继续(0/1): ")) Wend EndSub 例: 已知三点(81,9)、(100,10)、(121,10),求98处的值。 拉格朗日插值 程序代码: PrivateSubCommand1_Click() Dimx(),y() n=Val(InputBox("请输入插值节点数N")) ReDimx(n),y(n) Fori=0Ton x(i)=Val(InputBox("请输入插值节点x("+Str(i)+")")) y(i)=Val(InputBox("请输入插值节点y("+Str(i)+")")) Nexti f=0 Whilef=0 xx=Val(InputBox("请输入未知点的自变量x: ")) Sum=0 Fori=0Ton t=1 Forj=0Ton Ifj<>iThen t=t*(xx-x(j))/(x(i)-x(j)) EndIf Nextj Sum=Sum+t*y(i) Nexti Print"x=";xx,"y=";Sum f=Val(InputBox("是否继续(0/1)")) Wend EndSub 例: 已知四点(100,10)、(81,9)、(64,8)、(49,7),求87处的值。 分段线性插值 程序代码: PrivateSubCommand1_Click() Dimx(),y() n=Val(InputBox("请输入插值节点数N")) ReDimx(n),y(n) Fori=0Ton x(i)=Val(InputBox("请输入插值节点x("+Str(i)+")")) y(i)=Val(InputBox("请输入插值节点y("+Str(i)+")")) Nexti f=0 Whilef=0 xx=Val(InputBox("请输入未知点的自变量x: ")) L=0 j=1 WhileL=0 Ifxx k=j+1 L=1 Else j=j+1 Ifj>n-1Then k=n-1 L=1 EndIf EndIf Wend l0=(xx-x(k))/(x(k-1)-x(k)) l1=(xx-x(k-1))/(x(k)-x(k-1)) yy=l0*y(k-1)+l1*y(k) Print"x=";xx,"y=";yy f=Val(InputBox("是否继续(0/1)")) Wend EndSub 例: 已知三点(361,19)、(324,18)、(289,17),N=2,求300处的值。 分段二次插值 程序代码: PrivateSubCommand1_Click() Dimx(),y() n=Val(InputBox("请输入插值节点数N")) ReDimx(n),y(n) Fori=0Ton x(i)=Val(InputBox("请输入插值节点x("+Str(i)+")")) y(i)=Val(InputBox("请输入插值节点y("+Str(i)+")")) Nexti f=0 Whilef=0 xx=Val(InputBox("请输入未知点的自变量x: ")) Ifx0 (1)Then k=1 f=1 EndIf i=2 DoWhilef=0Andi>=n-1 Ifx0 Ifx0-x(i-1) k=i-1 f=1 Else k=i f=1 EndIf Else i=i+1 EndIf Loop Iff=0Then k=n-1 EndIf l1=(xx-x(k+1))*(xx-x(k))/((x(k-1)-x(k+1))*(x(k-1)-x(k))) l2=(xx-x(k+1))*(xx-x(k-1))/((x(k)-x(k+1))*(x(k)-x(k-1))) l3=(xx-x(k))*(xx-x(k-1))/((x(k+1)-x(k))*(x(k+1)-x(k-1))) yy=l1*y(k-1)+l2*y(k)+l3*y(k+1) Print"x=";xx,"y=";yy f=Val(InputBox("是否继续(0/1)")) Wend EndSub 例: 已知三点(225,15)、(196,14)、(169,13),求180处的值。 第三章数值积分 复化矩形积分法 程序代码: PrivateSubCommand1_Click() a=Val(InputBox("请输入积分下限a")) b=Val(InputBox("请输入积分上限b")) n=Val(InputBox("请输入积分区间等分数N")) h=(b-a)/n Sum=0 Fori=1Ton Sum=Sum+(a+(i-*h)^2 Nexti r=h*Sum Print"复化矩形积分法计算结果: ";r EndSub 例: 求X2在区间[3,5]的积分值,等分区间为100。 复化梯形积分法 程序代码: PrivateSubCommand1_Click() a=Val(InputBox("请输入积分下限a")) b=Val(InputBox("请输入积分上限b")) n=Val(InputBox("请输入积分区间等分数N")) h=(b-a)/n Sum=0 Fori=1Ton-1 Sum=Sum+(a+i*h)^2 Nexti t=h*(a^2+b^2)/2+h*Sum Print"复化梯形积分法计算结果: ";t EndSub 例: 求X2在区间[3,5]的积分值,等分区间为100。 辛普生积分法 程序代码: PrivateSubCommand1_Click() a=Val(InputBox("请输入积分下限A: ")) b=Val(InputBox("请输入积分上限B: ")) n=Val(InputBox("请输入积分区间等分数N: ")) h=(b-a)/n Sum=0 w=a+h/2 Whilew Sum=Sum+(w-h/2)^2+4*w^2+(w+h/2)^2 w=w+h Wend s=Sum*h/6 Print"辛普生积分法计算结果: ";s EndSub 例: 求X2在区间[3,5]的积分值,等分区间为100。 变步长梯形积分法 程序代码: PrivateSubCommand1_Click() a=Val(InputBox("请输入积分下限a: ")) b=Val(InputBox("请输入积分上限b: ")) ep=Val(InputBox("请输入误差限ep: ")) n=1 h=b-a t1=h*(a^2+b^2)/2 f=0 Whilef=0 Sum=0 Fori=1Ton-1 Sum=Sum+(a+(i-1/2)*h)^2 Nexti T2=t1/2+h*Sum/2 IfAbs(T2-t1) PrintT2 f=1 Else t1=T2 h=h/2 n=2*n EndIf Wend EndSub 例: 求X2在区间[3,5]的积分值,误差限ep=。 第四章线性方程组数值解法 约当消去法 程序代码: PrivateSubCommand1_Click() Dima() n=Val(InputBox("请输入方程的个数N: ")) ReDima(n,n+1) Fori=1Ton Forj=1Ton+1 a(i,j)=Val(InputBox("请输入增广矩阵A("+Str(i)+","+Str(j)+")=")) Nextj Nexti Fork=1Ton m=a(k,k) Forj=kTon+1 a(k,j)=a(k,j)/m Nextj Fori=1Ton Ifi<>kThen m=a(i,k) Forj=kTon+1 a(i,j)=a(i,j)-a(k,j)*m Nextj EndIf Nexti Nextk Fori=1Ton Print"x("+Str(i)+")=";a(i,n+1) Nexti EndSub 例: 已知方程组,求X1X2X3的值。 X1+X2+X3=20 2X1+3X2+X3=38 X1+4X2+X3=35 高斯消去法 程序代码: PrivateSubCommand1_Click() Dima(),x() n=Val(InputBox("请输入方程个数N: ")) ReDima(n,n+1),x(n) Fori=1Ton Forj=1Ton+1 a(i,j)=Val(InputBox("请输入增广矩阵A("+Str(i)+","+Str(j)+"): ")) Nextj Nexti Fork=1Ton-1 m=a(k,k) Forj=kTon+1 a(k,j)=a(k,j)/m Nextj Fori=k+1Ton m=a(i,k) Forj=kTon+1 a(i,j)=a(i,j)-a(k,j)*m Nextj Nexti Nextk x(n)=a(n,n+1)/a(n,n) Fori=n-1To1Step-1 Sum=0 Forj=i+1Ton Sum=Sum+a(i,j)*x(j) Nextj x(i)=a(i,n+1)-Sum Nexti Fori=1Ton Print"x("+Str(i)+")=";x(i) Nexti EndSub 例: 已知方程组,求X1X2X3的值。 2X1+5X2+X3=21 4X1+3X2+3X3=31 X1+3X2+2X3=16 三角分解法 程序代码: PrivateSubCommand1_Click() Dima(),b(),l(),u(),x(),y() n=Val(InputBox("请输入方程个数N: ")) ReDima(n,n),b(n),l(n,n),u(n,n),x(n),y(n) Fori=1Ton Forj=1Ton a(i,j)=Val(InputBox("请输入系数矩阵A("+Str(i)+","+Str(j)+"): ")) Nextj b(i)=Val(InputBox("请输入右端常数项B("+Str(i)+"): ")) Nexti Fori=1Ton Forj=1Ton Ifi>jThen Sum=0 Fork=1Toj-1 Sum=Sum+l(i,k)*u(k,j) Nextk l(i,j)=(a(i,j)-Sum)/u(j,j) Else Sum=0 Fork=1Toi-1 Sum=Sum+l(i,k)*u(k,j) Nextk u(i,j)=a(i,j)-Sum EndIf Nextj Nexti Fori=1Ton Sum=0 Forj=1Toi-1 Sum=Sum+l(i,j)*y(j) Nextj y(i)=b(i)-Sum Nexti Fori=nTo1Step-1 Sum=0 Forj=i+1Ton Sum=Sum+u(i,j)*x(j) Nextj x(i)=(y(i)-Sum)/u(i,i) Nexti Fori=1Ton Print"x("+Str(i)+")=";x(i) Nexti EndSub 例: 已知方程组,求X1X2X3的值。 2X1+3X2+4X3=38 X1+7X2+3X3=65 5X1+2X2+X3=33 雅可比迭代法 程序代码: Dima(),b(),x0(),x() n=Val(InputBox("请输入方程个数N: ")) ReDima(n,n),b(n),x0(n),x(n) ep=Val(InputBox("请输入误差限EP: ")) nmax=Val(InputBox("请输入最大迭代次数Nmax: ")) Fori=1Ton Forj=1Ton a(i,j)=Val(InputBox("请输入系数矩阵A("+Str(i)+","+Str(j)+"): ")) Nextj b(i)=Val(InputBox("请输入右端常数项B("+Str(i)+"): ")) Nexti Fori=1Ton x0(i)=Val(InputBox("请输入初始解X0("+Str(i)+"):
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 计算方法 作业