数值计算方法大作业.docx
- 文档编号:4531822
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:26
- 大小:78.70KB
数值计算方法大作业.docx
《数值计算方法大作业.docx》由会员分享,可在线阅读,更多相关《数值计算方法大作业.docx(26页珍藏版)》请在冰豆网上搜索。
数值计算方法大作业
第一章非线性方程求根3
1.1迭代法3
1.2牛顿法4
1.3弦截法5
1.4二分法6
第二章插值7
2.1线性插值7
2.2二次插值8
2.3拉格朗日插值9
2.4分段线性插值10
2.5分段二次插值11
第三章数值积分13
3.1复化矩形积分法13
3.2复化梯形积分法14
3.3辛普森积分法15
3.4变步长梯形积分法16
第四章线性方程组数值法17
4.1约当消去法17
4.2高斯消去法18
4.3三角分解法20
4.4雅可比迭代法21
4.5高斯一赛德尔迭代法23
第五章常积分方程数值法25
5.1显示欧拉公式法25
5.2欧拉公式预测校正法26
5.3改进欧拉公式法27
5.4四阶龙格一库塔法28
数值计算方法
第一章非线性方程求根
1.1迭代法
程序代码:
PriVateSubCommand1_Click()
x0=Val(InputBox("请输入初始值x0"))
ep=Val(InputBox(请输入误差限ep))
f=0
Whilef=0
X1=(Exp(2*x0)-x0)/5
IfAbS(XI-x0)VepThen
PrintX1
f=1
Else
x0=X1
EndIf
Wend
EndSUb
例:
求f(x)=e2x-6x=0在x=0.5附近的根(ep=1O1°)
CLForTTrI左叵jSS
.3(⅛530⅛34T9⅛T
1∙2⅜⅛并
H-
Pr<∙aφSUbCOmmanCHIC=CkobHVa-(⊃PU65O⅜⅛鸯>|薄斗厲達Xo=))epHVa-(-npu650x(⅛⅛J>沛w⅛l⅛ep))70
Whi_efH0
XIHXOl(XO>21b)二2*b)-fAbs(x-k—Xo)Λ①匸Then
PlinfXI
f丄
E-Se
XOHXl
End_f
VVend
EndSUb
1.3弦截法
程序代码:
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)VepThen
PrintX2
f=1
Else
x0=X1
X1=X2
EndIf
Wend
EndSUb
例:
求f(x)=x8-13的正根(初始值X仁1,x2=10,ep=101°)
口FormL
1.377≡)D1513663
IeiIlEl'W
1
-3
1.4二分法
程序代码:
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)VepThen
X=(b+a)/2
f=1
Print"方程的根是",X
EndIf
EndIf
Wend
EndSUb
-10\
(ep=10)
例:
求方程f(X)=rx(9-2x)-8在区间[0,1]内的实根。
LFOrml
Γ^∏a^]fi⅛∣
J
ιπ∣p∣
t
匕
J-
方程的根是
.31555613OS
24961
『Ξ⅛⅛—iiI
iCk
第二章插值
2.1线性插值
程序代码:
PriVateSubCommand1_Click()
XO=Val(InputBox("请输入第一个结点X:
"))Yo=Val(InputBox("请输入第一个结点丫:
"))
X1=Val(InputBox("请输入第二个结点X:
"))Y1=Val(InputBox("请输入第二个结点丫:
"))f=0
Whilef=0
X=Val(InputBox("请输入未知点的自变量值X:
"))LO=(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处的值
F
□FOnmI
=i]Θ∣[,≡J'I
1
涉30
尸4.305555S5555556
ir
:
0
r_—_
统性插值I
2.2二次插值
程序代码:
PriVateSubCommand1_Click()
XO=Val(InputBox("请输入第一个结点X:
"))Yo=Val(InputBox("请输入第一个结点丫:
"))
X1=Val(InputBox("请输入第二个结点X:
"))Y1=Val(InputBox("请输入第二个结点丫:
"))X2=Val(InputBox("请输入第三个结点X:
"))Y2=Val(InputBox("请输入第三个结点丫:
"))f=0
Whilef=0
X=Val(InputBox("请输入未知点的自变量值X:
"))LO=(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处的值
F
鬥Forrnl
D•回1!
S3
X=98
y=9.刖旳9749-3T3434
I
3
icι
2.3拉格朗日插值
程序代码:
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处的值。
-IαFOrrTlI:
EJ∣.E|!
Sj-]I—
"X=G7y=9.32563396692B11
拉格朗曰插值
2.4分段线性插值
程序代码:
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
IfXXVx(j)Then
k=j+1
L=1
Else
j=j+1
Ifj>n-1Then
k=n-1
L=1
EndIf
EndIf
Wend
10=(XX-x(k))/(x(k-1)-x(k))
11=(XX-x(k-1))/(x(k)-x(k-1))
yy=IO*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处的值
¾FOrTnl
X=300
Γa∏Γ⅞1Γ^I
尸17,3142867142857
分段线性插值
2.5分段二次插值
程序代码:
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:
"))
Ifx0Vx
(1)Then
k=1
f=1
EndIf
i=2
DoWhilef=0Andi>=n-1
Ifx0Vx(i)Then
Ifx0-x(i-1)Vx(i)-x0Then
k=i-1
f=1
ElSe
k=i
f=1
EndIf
Else
i=i+1
EndIf
LOOP
Iff=0Then
k=n-1
EndIf
11=(XX-x(k+1))*(xx-x(k))/((x(k-1)-x(k+1))*(x(k-1)-x(k)))
12=(XX-x(k+1))*(XX-x(k-1))/((x(k)-x(k+1))*(x(k)-x(k-1)))
13=(XX-x(k))*(XX-x(k-1))/((x(k+1)-x(k))*(x(k+1)-x(k-1)))yy=l1*y(k-1)+12*y(k)+13*y(k+1)
Print"x=";xx,"y=";yy
f=Val(InputBox("是否继续(0/1)"))
Wend
EndSub
例:
已知三点(225,15)、(196,14)、(169,13),求180处的值
I芯
専-c∙ 丨口[回 ⅛I — y=13..4154351395731 — I 分段二次播值 第三章数值积分 3.1复化矩形积分法 程序代码: 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-0.5)*h)^2 NeXti r=h*SUm Print"复化矩形积分法计算结果: ";r EndSUb CliCk 例: 求X2在区间[3,5]的积分值,等分区间为100 ■ FOrmI'CJ 复化梯形稅分法计算结果: 32.≡e 程序代码: 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。 亘化梯形租分法计算结果;32 亘化梯形枳分法 程序代码: PriVateSubCommand1_Click() a=Val(InputBox("请输入积分下限A: ")) b=Val(InputBox("请输入积分上限B: ")) n=Val(InputBox("请输入积分区间等分数N: "))h=(b-a)/n SUm=0 W=a+h/2 WhileWVb SUm=SUm+(W-h/2)^2+4*W^2+(W+h/2)^2W=W+h Wend S=SUm*h/6 Print"辛普生积分法计算结果: ";S EndSUb 例: 求X2在区间[3,5]的积分值,等分区间为100 口FomnI I□∣[B 辛普生稅分法计算结果: 32666666666&665 n 厂--I 辛普生稅分法 程序代码: 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)VepThen PrintT2 f=1 Else t1=T2 h=h/2 n=2*n EndIf Wend EndSUb 例: 求X2在区间[3,5]的积分值,误差限ep=0.0001 第四章线性方程组数值解法 4.1约当消去法 程序代码: 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 例: 已知方程组,求XX2X3的值。 厂X1+X2+X3=20 2X+3X+X3=38 LX1+4X+X3=35 ¾i Q=回r,-⅛⅜ ⅛⅛≡⅛⅛⅛= 4∙2M驾≡⅛并 H- Pr<∙aφSUbCOmmanCHIC=Cko Dimωo-Xo nHVa-(⊃PU65OX(=⅛鸯>H0s->^N=)) ReDima(pn+」)』Xm) FOr-HV-HO⊃ FOrjHlTOn+1 a(Lj)HVa-(一npu650x(=⅛鸯>«「書再A(=+S艾i)+-----+Sfg)+=)2))Nexfj Nexfi FOrk丄Ton二 mHa? k) FOrjHkTOn+1 a(k二)Ha(k二二3 Nexfj FOriHk+1Ton mHa(Lk) FOrjHkTOn+1a(Lj)Ha(Lj)-a(k二)*m Nexfj Nexfi NeXfk OO x(n)=a(n,n+1)/a(n,n)FOri=n-1TO1SteP-1Sum=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的值 2X+5X+X3=21 4X+3X+3X=31 X1+3X+2X=16 r鬥FOrmi I=H茁亘 KCD=4XC2)=2讥3)=3 I I高斯消去法 ES F■ ■ 4.3三角分解法 程序代码: PriVateSubCommand1_Click() Dima(),b(),l(),u(),x(),y() n=Val(InputBox("请输入方程个数N: ")) ReDima(n,n),b(n),1(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 例: 已知方程组,求XlX2X3的值 2Xι+3X+4X=38 X1+7X+3X=65 5X+2X+X3=33 「口¼orml IPHlI凹 ICD=3NCZ)=eχ(3)=2 i三角分斛进I IIInlE'In∣E∣rι∣B∣ιπ∣B∣mR∣π∣E∣π∣B∣ιπ∣B∣m∣! ∣ι-ιιrιrι∣B∣ιιιnr3∣rιmrι^' 4.4雅可比迭代法 程序代码: 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)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 计算方法 作业