计算方法程序.docx
《计算方法程序.docx》由会员分享,可在线阅读,更多相关《计算方法程序.docx(20页珍藏版)》请在冰点文库上搜索。
![计算方法程序.docx](https://file1.bingdoc.com/fileroot1/2023-7/10/cdbe6e8a-5a95-4b7b-ae56-32e5259f1c66/cdbe6e8a-5a95-4b7b-ae56-32e5259f1c661.gif)
计算方法程序
扫描加二分法
PrivateSubCommand1_Click()
DimlAsDouble,uAsDouble,hAsDouble,iAsDouble,rAsDouble
h=Val(Text2.Text)
Fori=-3To3-h/2Steph
l=f(i)
u=f(i+h)
Ifl*u<=0Then
r=bisection(i,i+h)
Print
EndIf
Nexti
EndSub
Functionf(xAsDouble)AsDouble
f=4*x^3-8*x^2+2*x+1
EndFunction
Functionbisection(aAsDouble,bAsDouble)AsDouble
DimeAsDouble,mAsDouble
e=Val(Text1.Text)
Do
m=(a+b)/2
Iff(a)*f(m)<=0Then
b=m
Else
a=m
EndIf
LoopUntil(Abs(b-a)Printm
EndFunction
弦截法
PrivateSubCommand1_Click()
Dimx0!
x1!
x2!
ep#,n%,k%
x0=Val(Text1.Text)
x1=Val(Text4.Text)
ep=Val(Text2.Text)
n=Val(Text3.Text)
k=0
Do
k=k+1
x2=x1-g(x1)*(x1-x0)/(g(x1)-g(x0))
IfAbs(x1-x2)Label5.Caption=x2
ExitSub
Else
x0=x1
x1=x2
EndIf
LoopUntil(k=n)
Label5.Caption="迭代失败,请调整参数!
"
EndSub
PublicFunctiong(x)
g=x^3+2*x^2+10*x-20
EndFunction
迭代法
PrivateSubCommand1_Click()
Dimx0!
x1!
ep#,n%,k%
x0=Val(Text1.Text)
ep=Val(Text2.Text)
n=Val(Text3.Text)
k=0
Do
k=k+1
x1=g(x0)
IfAbs(x0-x1)Label4.Caption=x1
ExitSub
Else
x0=x1
EndIf
LoopUntil(k=n)
Label4.Caption="迭代失败,请调整参数!
"
EndSub
PublicFunctiong(x)
g=(x+1)^(1/3)
EndFunction
牛顿法
PrivateSubCommand1_Click()
Dimx0!
ep!
n%,k%,x1!
x0=Val(Text1.Text)
ep=Val(Text2.Text)
n=Val(Text3.Text)
k=0
Do
k=k+1
If(g(x0)=0)Then
Text4.Text="wrong"
ExitSub
EndIf
x1=x0-f(x0)/g(x0)
If(Abs(x1-x0)Text4.Text=Format(x1,"0.000")
ExitSub
EndIf
x0=x1
LoopUntil(k=n)
Text4.Text="迭代失败!
"
EndSub
Functionf(x)
Dime!
e=2.718
f=x*e^x-1
EndFunction
Functiong(x)
Dime!
e=2.718
g=x+e^x
EndFunction
埃特金算法
PrivateSubCommand1_Click()
Dimx0!
x1!
x2!
ep#,n%,k%
x0=Val(Text1.Text)
ep=Val(Text2.Text)
n=Val(Text3.Text)
k=1
Do
k=k+1
x1=g(x0)
x2=g(x1)
x2=x2-(x2-x1)^2/(x2-2*x1+x0)
IfAbs(x0-x1)Label4.Caption=x2
ExitSub
Else
x0=x2
EndIf
LoopUntil(k=n)
Label4.Caption="迭代失败,请调整参数!
"
EndSub
PublicFunctiong(x)
g=(x+1)^(1/3)
EndFunction
高斯消去法
Dima!
(),b!
(),n%,i%,j%,k%
PrivateSubCommand1_Click()
Open"c:
\aa.txt"ForInputAs#1
Input#1,n
ReDima(n,n),b(n)
Picture1.Print"n=";n
Fori=1Ton
Forj=1Ton
Input#1,a(i,j)
Picture1.Printa(i,j);
Nextj
Input#1,b(i)
Picture1.Printb(i)
Nexti
MsgBox"文件读入成功!
",64
Close#1
EndSub
PrivateSubCommand2_Click()
Dimk%
Fork=1Ton
l=k
D=a(k,k)
Fori=k+1Ton
IfAbs(a(i,k))>Abs(D)Then
D=a(i,k)
l=i
EndIf
Nexti
IfD=0Then
Picture2.Print"奇异矩阵"
ExitSub
EndIf
Ifl<>kThen
Forj=kTon
t=a(l,j)
a(l,j)=a(k,j)
a(k,j)=t
Nextj
t=b(k)
b(k)=b(l)
b(l)=t
EndIf
Forj=k+1Ton
a(k,j)=a(k,j)/a(k,k)
Nextj
b(k)=b(k)/a(k,k)
Fori=k+1Ton
Forj=k+1Ton
a(i,j)=a(i,j)-a(i,k)*a(k,j)
Nextj
Nexti
Fori=k+1Ton
b(i)=b(i)-a(i,k)*b(k)
Nexti
Nextk
Fori=n-1To1Step-1
s=0
Forj=i+1Ton
s=s+a(i,j)*b(j)
Nextj
b(i)=b(i)-s
Nexti
Fori=1Ton
Picture2.Print"x(";i;")=";b(i)
Nexti
EndSub
高斯赛德尔迭代
PrivateSubCommand1_Click()
Dima!
(),b!
(),x!
(),y!
(),max!
k%,n1%,ep!
n%,s!
i%,j%
n=Val(Text1.Text)
ReDima(n,n),b(n),x(n),y(n)
Fori=1Ton
Forj=1Ton
a(i,j)=InputBox("请输入系数矩阵a("&i&","&j&")的值:
")
Nextj
b(i)=InputBox("请输入b("&i&")的值:
")
Nexti
ep=Val(Text2.Text)
n1=Val(Text3.Text)
k=0
Fori=1Ton
x(i)=0
y(i)=0
Nexti
Do
k=k+1
Fori=1Ton
s=0
Forj=1Ton
Ifi<>jThen
s=s+a(i,j)*y(j)
EndIf
Nextj
y(i)=(b(i)-s)/a(i,i)
Nexti
max=0
Fori=1Ton
Ifmaxmax=Abs(x(i)-y(i))
EndIf
Nexti
IfmaxFori=1Ton
Picture1.Print"x(";i;")=";y(i)
Nexti
ExitSub
Else
Fori=1Ton
x(i)=y(i)
Nexti
EndIf
LoopUntil(k=n1)
Picture1.Print"迭代失败!
"
EndSub
追赶法
Dima!
(),b!
(),C!
(),D!
(),n%,t#,s#
PrivateSubCommand1_Click()
Open"E:
\ll.txt"ForInputAs#1
Input#1,n
Picture1.Print"n=";n
ReDima(n),b(n),C(n),D(n)
Input#1,b
(1),C
(1),D
(1)
Picture1.Printb
(1),C
(1),D
(1)
Fori=2Ton-1
Input#1,a(i),b(i),C(i),D(i)
Picture1.Printa(i),b(i),C(i),D(i)
Nexti
Input#1,a(n),b(n),D(n)
Picture1.Printa(n),b(n),D(n)
MsgBox"文件读入成功!
",64
Close#1
EndSub
PrivateSubCommand2_Click()
C
(1)=C
(1)/b
(1)
D
(1)=D
(1)/b
(1)
Fori=2Ton-1Step1
t=b(i)-C(i-1)*a(i)
C(i)=C(i)/t
s=D(i)-D(i-1)*a(i)
D(i)=s/t
Nexti
D(n)=(D(n)-D(n-1)*a(n))/(b(n)-C(n-1)*a(n))
Fori=n-1To1Step-1
D(i)=D(i)-(C(i)*D(i+1))
Nexti
Fori=1Ton
Picture2.Print"x(";i;")=";D(i)
Nexti
EndSub
拉格朗日插值
PrivateSubCommand1_Click()
Dima!
b!
x!
(),y!
(),t!
k%,j%,i%,n%
a=Val(Text1.Text)
n=Val(Text2.Text)
ReDimx(n),y(n)
Fori=0Ton
x(i)=InputBox("请输入x("&i&")的值:
")
y(i)=InputBox("请输入y("&i&")的值:
")
Nexti
b=0
Fork=0Ton
t=1
Forj=0Ton
Ifj<>kThen
t=(a-x(j))/(x(k)-x(j))*t
EndIf
Nextj
b=b+t*y(k)
Nextk
Text3.Text=b
EndSub
复化辛浦生算法
PrivateSubCommand1_Click()
Dima!
b!
n%,h!
k%,s!
X!
a=Val(Text1.Text)
b=Val(Text2.Text)
n=Val(Text3.Text)
h=(b-a)/n
s=f(b)-f(a)
X=a
Fork=1Ton
X=X+h/2
s=s+4*f(X)
X=X+h/2
s=s+2*f(X)
Nextk
s=h/6*s
Text4.Text=Format(s,"0.000000000")
EndSub
Functionf(X)
f=X^2
EndFunction
三角分解法:
PrivateSubCommand1_Click()
Dima(1To4,1To4),b(1To4),l(1To4,1To4),r(1To4,1To4),y(1To4),x(1To4)AsDouble
Dimi,j,k,n,mAsInteger
Dims,p,q,wAsDouble
s=0
p=0
q=0
w=0
n=InputBox("输入n的值")
Fori=1Ton
Forj=1Ton
a(i,j)=InputBox("输入"&i&","&j&"元素的值")
Next
Next
Fori=1Ton
b(i)=InputBox("输入"&i&"元素的值")
Next
Fork=1Ton
Forj=kTon
Form=1Tok-1
s=s+l(k,m)*r(m,j)
Next
r(k,j)=a(k,j)-s
Next
Fori=k+1Ton
Form=1Tok-1
p=p+l(i,m)*r(m,k)
Next
l(i,k)=(a(i,k)-p)/r(k,k)
Next
Next
Fori=1Ton
Forj=1Toi-1
p=p+l(i,j)*y(j)
Next
y(i)=b(i)-p
Next
Fori=nTo1Step-1
Forj=i+1Ton
w=w+r(i,j)*x(j)
Next
x(i)=(y(i)-w)/r(i,i)
Next
Fori=1Ton
Forj=iTon
Printr(i,j);
Next
Print
Next
Fori=1Ton
Forj=1Toi
Printl(i,j);
Next
Print
Nexti
Fori=1Ton
Print,x(i)
Next
EndSub