第四章 插值方法VB
一、线性插值应用实例VB1
已知:169的平方根为13,196的平方根为14,编程求175的平方根。
Private Sub Command1_click() Dim x(1 To 2),y(1 To 2) As Single x(1)=169:y(1)=13 x(2)=196:y(2)=14 x0=175 y0=F(x,y,x0)
a=Format$(y0,\Text1.Text=\End Sub
Private Function F(x,y,x0)
F=y(1)+(y(2)-y(1))/(x(2)-x(1))*(x0-x(1)) End Function
线性插值应用实例VB2
?已知水的温度与密度和关系如下:
温度密度
5.0 10.0 15.0 20.0 25.0 30.0 0.99
0.99
0.99
0.99
0.99990.997
试编程计算温度为6、13、16、19、23、26 oC时的密度。
Private Sub Command1_click() N = 6
X = Array(0, 5, 10, 15, 20, 25, 30)
Y = Array(0, 0.999965, 0.9997, 0.999099, 0.998203, 0.997044, 0.995646) xc = Array(0, 6, 13, 16, 19, 23, 26) List1.AddItem \ x0\ y0\
For I = 1 To 6 X0 = xc(I) Y0 = f(N, X, Y, X0)
List1.AddItem Str$(X0) & Str$(Y0) Next I End Sub
Private Function f(N, X, Y, X0) For I = 1 To N If X0 <= X(I) Then W = I Exit For End If Next I W = W - 1 If W <= 1 Then W = 1: End If If W >= N Then W = N - 1: End If
f = Y(W) + (Y(W + 1) - Y(W)) / (X(W + 1) - X(W)) * (X0 - X(W)) End Function
二、拉格朗日三点插值实例
例:实验测得25OC乙醇溶液的平均摩尔体积v与乙醇的摩尔分数xi的关系数据如下表。试编程求摩尔数xi为0.3时的乙醇溶液的平均体积v。 v 21.22 22.16 23.18 24.32 25.57 26.95 0.089
0.115
0.143
0.173
0.206
0.242
xi
v xi
28.47 30.15 32.01 34.07 36.37 0.281
0.323
0.369
0.420
0.477
VB清单
Dim X, v
Private Sub Command1_click()
N = 75
X=Array(0,8,7,6,5,4.8,4.6,4.4,4.4,4.0,3.8,3.6,3.4,3.2,3.0,2.9,2.8,2.7,2.6,2.5,2.4,2.00,1.95,1.90,1.85,1.80,1.75,1.70,1.68,1.66,1.64,1.62,1.60,1.58,1.56,1.54,1.52,1.50,1.48,1.46,1.44,1.42,1.40,1.39,1.38,1.37,1.36,1.35,1.34,1.33,1.32,1.31,1.30,1.29,1.28,1.27,1.26,1.25,1.24,1.23,1.22,1.21,1.20,1.19,1.18,1.17,1.16,1.15,1.14,1.13,1.12,1.11,1.10,1.09,1.08,1.07)
v=Array(0,0.24978,0.24970,0.24958,0.24937,0.24931,0.24925,0.24917,0.24907,0.24896,0.24883,0.24868,0.24849,0.24825,0.24795,0.24778,0.24758,0.24735,0.24708,0.24678,0.24643,0.24421,0.24380,0.24333,0.24281,0.24222,0.24156,0.24081,0.24048,0.24013,0.23977,0.23938,0.23897,0.23854,0.23807,0.23758,0.23705,0.23648,0.23588,0.23524,0.23455,0.23381,0.23301,0.23259,0.23215,0.23170,0.23123,0.23073,0.23022,0.22968,0.22912,0.22854,0.22893,0.22729,0.22662,0.22593,0.22520,0.22443,0.22361,0.22275,0.22185,0.22090,0.21990,0.21884,0.21771,0.21652,0.21526,0.21390,0.21245,0.21090,0.20923,0.20744,0.20549,0.20336,0.20104,0.19848)
M = 3
X0 = Val(Text1.Text)
If X0 < X(1) Or X0 > X(N) Then Print \Else End If
Call pt(N, M, X0, A, B) v0 = F(X0, A, B) List1.AddItem \List1.AddItem \List1.AddItem \
List1.AddItem \End Sub
Private Sub pt(N, M, X0, A, B) For I = 1 To N If X0 <= X(I) Then
If Abs(X0 - X(I - 1)) <= Abs(X0 - X(I)) Then A = I - Int((M + 1) / 2) Exit For End If Else
A = I - Int(M / 2) End If Next I
If A <= 0 Then A = 1: End If B = A + M - 1 If B >= N Then B = N: End If A = B - M + 1 End Sub
Private Function F(X0, A, B) For I = A To B W = 1 For J = A To B If J <> I Then
W = W * (X0 - X(J)) / (X(I) - X(J)): End If Next J
s = s + W * v(I) Next I F = s End Function
三、拉格朗日全点插值VB
试对上例编程对比利用三个、五个、七个、九个和全部节点时,摩尔分数xi为0.30时乙醇溶液的平均摩尔体积v。
Dim X, v
Private Sub Command1_click() N = 11
X = Array(0, 0.0891, 0.1153, 0.1435, 0.1739, 0.2068, 0.2424, 0.2811, 0.3234, 0.3697, 0.4207, 0.4771)
v = Array(0, 21.22, 22.16, 23.18, 24.32, 25.57, 26.95, 28.47, 30.15, 32.01, 34.07, 36.37) X0 = Val(Text1.Text)
If X0 < X(1) Or X0 > X(N) Then Print \End Else End If
List1.AddItem \For M = 3 To N Step 2 Call pt(N, M, X0, A, B) v0 = F(X0, A, B)
List1.AddItem \ A=\Next M End Sub
Private Sub pt(N, M, X0, A, B) For I = 1 To N If X0 <= X(I) Then
If Abs(X0 - X(I - 1)) <= Abs(X0 - X(I)) Then A = I - Int((M + 1) / 2) Exit For End If Else
A = I - Int(M / 2) End If Next I
If A <= 0 Then A = 1: End If B = A + M - 1 If B >= N Then B = N: End If A = B - M + 1 End Sub
Private Function F(X0, A, B) For I = A To B W = 1
For J = A To B If J <> I Then
W = W * (X0 - X(J)) / (X(I) - X(J)): End If Next J
s = s + W * v(I) Next I
B=\v0\ F = s
End Function