数值计算编程20个.docx
- 文档编号:20762594
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:25
- 大小:17.49KB
数值计算编程20个.docx
《数值计算编程20个.docx》由会员分享,可在线阅读,更多相关《数值计算编程20个.docx(25页珍藏版)》请在冰豆网上搜索。
数值计算编程20个
1、P11,第一题
PrivateSubForm_Click()
Dima,b,x,sAsDouble
a=1
b=2
s=0.001
Do
x=(a+b)/2
If(x^3-x-1)*(a^3-a-1)<0Then
b=x
Else
a=x
EndIf
LoopUntilAbs(x^3-x-1)
Printx
Printx^3-x-1
EndSub
结果:
1.
2、P12,第五题
PrivateSubForm_Click()
Dima,x,sAsDouble
a=8
s=0.001
x=a
Do
p=x
x=(p+a/p)/2
LoopUntilAbs(x-p)
Printx
EndSub
结果:
2.986
3、程序:
PrivateSubForm_Click()
DimiAsInteger
Dimt,a(0To3),pAsDouble
t=2
Fori=0To3
a(i)=InputBox("x("&i&")=")
Nexti
p=a(3)
Fori=2To0Step-1
p=p*t+a(i)
Nexti
Printp
EndSub
结果:
49
4、程序:
PrivateSubForm_Click()
Dima,b,sAsDouble
a=0.2
b=1.34
s=(a+b)/2
Do
Ifa*(1-a)*s*(1-s)<0Then
b=s
Else
a=s
EndIf
s=(a+b)/2
LoopUntilb-a<0.01
Prints
EndSub
结果:
0.997109375
5、程序:
PrivateSubForm_click()
Dimx,s,pAsDouble
DimiAsInteger
x=101
s=10
p=1/2/10
i=1
Do
s=s+p
p=p/2*(-1)/100*(2*i-1)
i=i+1
LoopUntilp<0.01
Prints
EndSub
结果:
10.05
6、拉格朗日:
PrivateSubForm_Click()
Dimi,j,nAsInteger
Dimx(1To100),y(1To100),p,s,tAsDouble
t=2.5
n=3
Fori=1Ton
x(i)=InputBox("x("&i&")=")
y(i)=InputBox("y("&i&")=")
Nexti
s=0
Fori=1Ton
p=1
Forj=1Ton
Ifi<>jThen
p=p*(t-x(j))/(x(i)-x(j))
EndIf
Nextj
s=s+p*y(i)
Nexti
Prints
EndSub
结果:
6
7、课堂埃尔米特插值程序:
PrivateSubForm_Activate()
Dimx0,y0,x1,y1,g0,g1AsDouble
x0=0
y0=0
x1=1
y1=1
g0=0
g1=2
x=0.5
a0=-2/(x0-x1)^3
b0=1/(x0-x1)^2+2*x0/(x0-x1)^3
a1=-2/(x1-x0)^3
b1=2*x1/(x1-x0)^3+1/(x1-x0)^2
k0=1/(x0-x1)^2
k1=1/(x1-x0)^2
l0=(x-x1)^2*(a0*x+b0)
l1=(x-x0)^2*(a1*x+b1)
gg0=k0*(x-x0)*(x-x1)^2
gg1=k1*(x-x0)^2*(x-x1)
y=l0*y0+l1*y1+gg0*g0+gg1*g1
Printy
EndSub
结果:
0.25
8、第一个:
样条函数:
PrivateSubForm_Activate()
Dimx(3),y(3),m0,m1,m2AsDouble
DimiAsInteger
Fori=0To2
x(i)=i
y(i)=i*i
Nexti
m0=0
m2=4
h0=x
(1)-x(0)
h1=x
(2)-x
(1)
a=2/h0
b=4/h0+4/h1
c=2/h1
d=(-6*y
(1)+6*y
(2))/h1^2-(6*y(0)-6*y
(1))/h0^2
m1=(d-a*m0-c*m2)/b
Printm1
EndSub
结果:
2
9、牛顿插值:
DimkAsInteger
PrivateSubCombo1_Click()
DimiAsInteger
k=CInt(Combo1.Text)
Fori=0To9
Text1(2*i).Visible=False
Text1(2*i+1).Visible=False
Label(i).Visible=False
Nexti
Fori=0Tok-1
WithLabel(i)
.Visible=True
.Top=1560+400*i
.Caption="第"&i+1&"点:
"
.Left=120
EndWith
WithText1(2*i)
.Visible=True
.Left=800
.Top=1500+400*i
EndWith
WithText1(2*i+1)
.Visible=True
.Left=1500
.Top=1500+400*i
EndWith
Nexti
EndSub
PrivateSubCommand1_Click()
DimiAsInteger
DimsAsDouble
s=0
Fori=0Tok-1
s=s+ff(i)*f1(Text3.Text,i)
Nexti
Text2.Text=s
EndSub
PrivateSubCommand2_Click()
End
EndSub
PrivateSubForm_Load()
DimiAsInteger
Fori=2To10
Combo1.AddItemi
Nexti
EndSub
Functionff(ByValnAsInteger)
DimiAsInteger
DimsAsDouble
s=0
Ifn=0Then
ff=Text1
(1).Text
ExitFunction
EndIf
Fori=0Ton
s=s+Text1(2*i+1).Text/f(i,n)
Nexti
ff=s
EndFunction
Functionf(ByValpAsInteger,ByValnAsInteger)
DimiAsInteger
DimsAsDouble
s=1
Fori=0Ton
Ifi<>pThen
s=s*(Text1(2*p).Text-Text1(2*i).Text)
EndIf
Nexti
f=s
EndFunction
Functionf1(ByValxAsDouble,ByValnAsInteger)
DimiAsInteger
DimsAsDouble
Ifn=0Then
f1=1
ExitFunction
EndIf
s=1
Fori=0Ton-1
s=s*(x-Text1(2*i).Text)
Nexti
f1=s
EndFunction
结果:
带入(1,1),(2,4),(3,7),(4,8),(5,6)得到变量为3.5时,插值结果为7.8359375
10、复化辛普生算法:
PrivateSubCommand1_Click()
Dimi,nAsInteger
Dims,h,xAsDouble
a=InputBox("请输入左端点a:
")
b=InputBox("请输入右端点b:
")
n=InputBox("请输入分段数n:
")
h=(b-a)/n
s=f(b)-f(a)
x=a
Fori=1Ton
x=x+h/2
s=s+4*f(x)
x=x+h/2
s=s+2*f(x)
Nexti
s=h/6*s
Text1.Text=s
EndSub
Functionf(ByValxAsDouble)
Ifx=0Then
f=1
ExitFunction
EndIf
f=Sin(x)/x
EndFunction
结果:
当输入区间为(0,1),分8段,运行结果是0.1943
11、p153第6题
PrivateSubForm_Load()
Dims,t,eAsDouble
Dimi,kAsInteger
t=0
k=0
s=(t+2)^0.5
e=0.001
Fori=0To20
IfAbs(s-t) k=1 ExitFor EndIf t=s s=(t+2)^0.5 Nexti Text1.Text=s EndSub 结果: 1.829 12、p154第18题 DimaAsDouble PrivateSubForm_Load() Dimx0,x,eAsDouble DimiAsInteger x=5 e=0.000001 a=InputBox("a=") Fori=0To20 x0=x Text1.Text=Text1.Text&vbCrLf&f1(x0) Iff1(x0)=0Then ExitFor EndIf x=x0-f(x0)/f1(x0) IfAbs(x-x0) ExitFor EndIf Nexti Ifi=20Then MsgBox"迭代失败! " End EndIf Text1.Text=x EndSub Functionf(ByValxAsDouble) f=x^3-a EndFunction Functionf1(ByValxAsDouble) f1=3*x^2 EndFunction 结果: 2.188 13、p155第24题牛顿法 PrivateSubForm_Load() Dimx0,eAsDouble DimiAsInteger x0=0 e=0.000001 n=20 Iff1(x0)=0Then MsgBox"奇异" End EndIf Fori=oTo20 x0=x Iff1(x)=0Then MsgBox"奇异" End EndIf x=x0-f(x0)/f1(x0) IfAbs(x-x0) ExitFor EndIf Nexti Ifi=20Then MsgBox"迭代失败! " End EndIf Text1.Text=x EndSub Functionf(ByValxAsDouble) f=x^3+2*x^2+10*x-20 EndFunction Functionf1(ByValxAsDouble) f1=3*x^2+4*x+10 EndFunction 结果: 1.137 14、p155第24题弦截法 PrivateSubForm_Load() Dimx0,x1,eAsDouble DimiAsInteger x0=0 e=0.000001 n=20 Iff1(x0)=0Then MsgBox"奇异" End EndIf x1=x0-f(x0)/f1(x0) Fori=oTo20 x=x1-f(x1)/(f(x1)-f(x0))*(x1-x0) IfAbs(x-x1) ExitFor EndIf x1=x Nexti Ifi=20Then MsgBox"迭代失败! " End EndIf Text1.Text=x EndSub Functionf(ByValxAsDouble) f=x^3+2*x^2+10*x-20 EndFunction Functionf1(ByValxAsDouble) f1=3*x^2+4*x+10 EndFunction 结果: 1.562 15、p155第24题快速弦截法 PrivateSubForm_Load() Dimx0,x1,eAsDouble DimiAsInteger x0=0 e=0.000001 n=20 Iff1(x0)=0Then MsgBox"奇异" End EndIf x1=x0-f(x0)/f1(x0) Fori=oTo20 x0=x1 x1=x x=x1-f(x1)/(f(x1)-f(x0))*(x1-x0) IfAbs(x-x1) ExitFor EndIf Nexti Ifi=20Then MsgBox"迭代失败! " End EndIf Text1.Text=x EndSub Functionf(ByValxAsDouble) f=x^3+2*x^2+10*x-20 EndFunction Functionf1(ByValxAsDouble) f1=3*x^2+4*x+10 EndFunction 结果: 1.496 16、消去法 DimnAsInteger Dima(1To10,1To10),b(1To10),x(1To10)AsDouble PrivateSubCombo1_Click() Dimi,jAsInteger Fori=1To100 Text1(i).Visible=False Nexti Fori=1To10 Text2(i).Visible=False Text3(i).Visible=False Nexti n=Combo1.Text Fori=1Ton Forj=1Ton WithText1((i-1)*n+j) .Visible=True .Top=500*i+200 .Left=500*j .Height=300 EndWith Nextj WithText2(i) .Visible=True .Top=500*i+200 .Left=500*n+800 .Height=300 EndWith WithText3(i) .Visible=True .Top=500*i+200 .Left=500*n+1800 .Width=700 .Height=300 EndWith Nexti EndSub PrivateSubCommand1_Click() Dimi,j,kAsInteger Dims,rAsDouble Fori=1Ton Forj=1Ton a(i,j)=Text1((i-1)*n+j).Text Nextj b(i)=Text2(i).Text Nexti Fori=1Ton-1 Forj=i+1Ton r=a(j,i)/a(i,i) Fork=iTon a(j,k)=a(j,k)-r*a(i,k) Nextk b(j)=b(j)-r*b(i) Nextj Nexti Fori=nTo1Step-1 s=b(i) Ifi<>nThen Forj=iTon s=s-a(i,j)*x(j) Nextj EndIf x(i)=s/a(i,i) Text3(i).Text=x(i) Nexti EndSub PrivateSubCommand2_Click() End EndSub PrivateSubForm_Load() DimiAsInteger Fori=2To10 Combo1.AddItemi Nexti EndSub 结果: 选择求解未知数个数为3,再依次输入A={2,-1,3;4,2,5;1,2,0;}B={1,4,7;}得到x={9,-1,-6} 17、追赶法 PrivateSubCommand1_Click() Dimi,j,kAsInteger Dimaa(1To4),bb(1To4),cc(1To4),dd(1To4),xx(1To4),g(1To4),f(1To4)AsDouble Dims,rAsDouble Fori=1To4 Ifi=1Then aa(i)=0 Else aa(i)=a(i).Text EndIf bb(i)=b(i).Text Ifi=4Then cc(i)=0 Else cc(i)=c(i).Text EndIf dd(i)=d(i).Text Nexti g (1)=dd (1)/bb (1) f (1)=-cc (1)/bb (1) Fori=2To4 g(i)=(dd(i)-aa(i)*g(i-1))/(aa(i)*f(i-1)+bb(i)) f(i)=-cc(i)/(aa(i)*f(i-1)+bb(i)) Nexti xx(4)=g(4) x(4).Text=xx(4) Fori=3To1Step-1 xx(i)=g(i)+f(i)*xx(i+1) x(i).Text=xx(i) Nexti EndSub PrivateSubCommand2_Click() End EndSub 结果: 依次输入方程组系数A={1,1;1,2,1;1,2,3;1,2;},B={3,8,20,11}得到结果为X={1,2,3,4;} 18、高斯-赛德尔程序如下: PrivateSubCommand1_Click() Dimi,jAsInteger Dimk,t(1To3),s,a(1To3,1To3),b(1To3),x(1To3)AsDouble Fori=1To3 Forj=1To3 a(i,j)=Text1(i*3+j-3).Text Nextj b(i)=Text2(i).Text x(i)=0 Nexti k=1 DoUntilk<0.0001 Fori=1To3 s=b(i) Forj=1To3 Ifj<>iThen Text4.Text=s s=s-a(i,j)*x(j) Text5.Text=s EndIf Nextj t(i)=s/a(i,i) Ifi=1Then k=Abs(t(i)-x(i)) ElseIfAbs(t(i)-x(i))>kThen k=Abs(t(i)-x(i)) EndIf x(i)=t(i) Nexti Loop Fori=1To3 Text3(i).Text=x(i) Nexti EndSub 运行结果: 输入系数A={7,5,-3;5,7,1;2,1,7;}B={2,4,-11}得到X={-1.727,2.000,-1.363} 19、迭代法程序如下: PrivateSubCommand1_Click() Dimi,jAsInteger Dimk,t(1To3),s,a(1To3,1To3),b(1To3),x(1To3)AsDouble Fori=1To3 Forj=1To3 a(i,j)=Text1(i*3+j-3).Text Nextj b(i)=Text2(i).Text x(i)=0 Nexti k=1 DoUntilk
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 计算 编程 20