x=(b+a)/2
f=1
Print"方程的根是",x
EndIf
EndIf
Wend
EndSub
-10\
(ep=10)
例:
求方程f(x)=e-7/x(9-2x)-8在区间[0,1]内的实根。
戸Forml
J
itnpl
q
t
匕
j.
方程的根是
.31555613OS
24961
『……三莊—ii1
ick
第二章插值
2.1线性插值
程序代码:
PrivateSubCommand1_Click()
X0=Val(InputBox("请输入第一个结点X:
"))
Y0=Val(InputBox("请输入第一个结点丫:
"))
X1=Val(InputBox("请输入第二个结点X:
"))
Y1=Val(InputBox("请输入第二个结点丫:
"))
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处的值
r
口Forml
1
泸30
尸4.305555S5555556
:
0
r_—_
统性插值|
2.2二次插值
程序代码:
PrivateSubCommand1_Click()
X0=Val(InputBox("请输入第一个结点X:
"))
Y0=Val(InputBox("请输入第一个结点丫:
"))
X1=Val(InputBox("请输入第二个结点X:
"))
Y1=Val(InputBox("请输入第二个结点丫:
"))
X2=Val(InputBox("请输入第三个结点X:
"))
Y2=Val(InputBox("请输入第三个结点丫:
"))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*丫1+L2*Y2
Print"x=";x,"y=";y
f=Val(InputBox("是否继续(0/1):
"))
Wend
EndSub
例:
已知三点(81,9)、(100,10)、(121,10),求98处的值
r
鬥Farrnl
D•回1!
S3
98
y=9.朋旳9749-373434
moI
3
ici
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处的值。
-I0Forrnl:
u|.回|!
SjJI—
"x=67y=9.32563396692811
拉格朗曰插值
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
Ifxxk=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=l0*y(k-1)+l1*y(k)
Print"x=";xx,"y=";yy
f=Val(InputBox("是否继续(0/1)"))
Wend
EndSub
LForml
300
尸17,3142867142857
例:
已知三点(361,19)、(324,18)、(289,17),N=2,求300处的值
分段线性插值
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:
"))
Ifx0(1)Then
k=1
f=1
EndIf
i=2
DoWhilef=0Andi>=n-1
Ifx0Ifx0-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
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处的值
1芯
専-c-rmL
丨口[回
云1
—
泸180
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)A2
Nexti
r=h*Sum
Print"复化矩形积分法计算结果:
";r
EndSub
例:
求X2在区间[3,5]的积分值,等分区间为100
Click
■
Forml'cj
复化梯形稅分法计算结果:
32.&S6&
程序代码:
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)A2
Nexti
t=h*(aa2+ba2)/2+h*Sum
Print"复化梯形积分法计算结果:
";t
EndSub
例:
求X2在区间[3,5]的积分值,等分区间为
100。
亘化梯形租分法计算结果;326B68
亘化梯形枳分法
程序代码:
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)A2+4*wA2+(w+h/2)A2w=w+h
Wend
s=Sum*h/6
Print"辛普生积分法计算结果:
";s
EndSub
例:
求X2在区间[3,5]的积分值,等分区间为100
口Fomnl
1□e21
辛普生稅分法计算结果:
326&6666666&6&S
n
厂—-1
辛普生稅分法
程序代码:
PrivateSubCommand1_Click()
a=Val(InputBox("请输入积分下限a:
"))b=Val(InputBox("请输入积分上限b:
"))ep=Val(InputBox("请输入误差限ep:
"))n=1
h=b-a
t1=h*(aA2+bA2)/2
f=0
Whilef=0
Sum=0
Fori=1Ton-1
Sum=Sum+(a+(i-1/2)*h)a2
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=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
-X1+4X+X3=35
口Fopmz
4.2M驾羔a并
H-
privateSubcommanslc=ck()
Dimapx()nHva_(一npu65ox25阱>厲就->達N2))
ReDima(pn+」)』x(n)
ForiHlTon
ForjHlTon+1
a(Lj)Hva_(一npu65ox(=逋鸯>迤「書再A(=+S艾i)+-----+sfre+=)2))Nexfj
Nexfi
ForkHlTon—1
mHa?
k)
ForjHkTon+—k
a(k二)Ha(k二二3
Nexfj
ForiHk+1Ton
mHa(Lk)
ForjHkTon+—ka(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鬥Form!
1口]「茁亘
xC1)=4xC2
讥3)=3
1高斯消去法
E!
F■
■
4.3三角分解法
程序代码:
PrivateSubCommand1_Click()
Dima(),b(),l(),u(),x(),「()
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
例:
已知方程组,求XiX2X3的值
2Xi+3X+4X=38
Xi+7X+3X=65
5X+2X+X3=33
xC1)=3nCz)=ex(3)=2
i三角分斛进|
4.4雅可比迭代法
程序代码:
Dima(),b(),x0(),x()
n=Val(lnputBox("请输入方程个数N:
"))
ReDima(n,n),b(n),x0(n),x(n)
ep=Val(lnputBox("请输入误差限EP:
"))
nmax=Val(lnputBox("请输入最大迭代次数Nmax:
"))
Fori=1Ton
Forj=1Ton
+"):
"))
a(i,j)=Val(lnputBox("请输入系数矩阵A("+Str(i)+","+Str(j)Nextj
b(i)=Val(lnputBox("请输入右端常数项B("+Str(i)+"):
"))
Nexti
Fori=1Ton
x0(i)=Val(lnputBox("请输入初始解X0("