Theo như nội dung trong file bạn gởi, thật tình mình không hiểu đây là kiểu nội suy mấy chiều nữa....
Nếu như nội suy 2 chiều thì bạn làm như sau: (mình chỉ copy của ai đó viết rồi gởi cho bạn thôi, code này không phải của mình hihi)
Public Mang1(1000) As Double
Public Mang2(1000) As Double
Public Const mMax = 1
Public Const nMax = 1
Public bang(mMax, nMax) As Double
Public Function NSTT(Mang1, Mang2, Gia_tri As Double) As Double
Dim i As Integer
Dim delta As Double
If Gia_tri <= Mang1(1) Then
NSTT = Mang2(1)
Else
i = 0
Do
i = i + 1
Loop Until (Mang1(i) >= Gia_tri)
delta = (Mang2(i) - Mang2(i - 1)) / (Mang1(i) - Mang1(i - 1))
NSTT = delta * (Gia_tri - Mang1(i - 1)) + Mang2(i - 1)
End If
End Function
Public Function N2G(X, x1, x2, y1, y2) As Double
N2G = y1 + (X - x1) * (y2 - y1) / (x2 - x1)
End Function
Public Function NS2C(bang, GtTraCotdau As Double, GtTraHangdau As Double) As Double
Dim i, j, nc, nh As Integer
Dim gcc, ghh As Double
Dim Q1, Q2, delt, Qtt, gth1, gth2, gtc1, gtc2 As Double
Dim Gtt, gtt1, gtt2, delta As Double
nc = 1
Do
nc = nc + 1
Loop Until bang(1, nc + 1) < bang(1, nc)
nh = 1
Do
nh = nh + 1
Loop Until bang(nh + 1, 1) < bang(nh, 1)
gcc = GtTraCotdau
ghh = GtTraHangdau
i = 1
Do
i = i + 1
Loop Until (bang(i, 1) > gcc) Or (i = nh)
gtc2 = bang(i, 1)
gtc1 = bang(i - 1, 1)
j = 1
Do
j = j + 1
Loop Until (bang(1, j) > ghh) Or (j = nc)
gth2 = bang(1, j)
gth1 = bang(1, j - 1)
gtt1 = N2G(gcc, gtc1, gtc2, bang(i - 1, j - 1), bang(i, j - 1))
gtt2 = N2G(gcc, gtc1, gtc2, bang(i - 1, j), bang(i, j))
Gtt = N2G(ghh, gth1, gth2, gtt1, gtt2)
NS2C = Gtt
End Function
Public Function Hk(Q, b, m As Double) As Double
Dim W, hkk, hkcn, Oon As Double
hkcn = (((Q / b) ^ 2) / 9.81) ^ (1 / 3)
Oon = m * hkcn / b
'hkk = 0.00005
' Do
' hkk = hkk + 0.0001
' W = (b + (m * hkk)) * hkk
' VT = Q * Q / 9.81
' VP = W * W * W / (b + (2 * m * hkk))
' Loop While VT > VP
'Hk = hkk
Hk = hkcn * (1 - (Oon / 3) + (0.105 * (Oon ^ 2)))
End Function
Public Function Ho(Q, b, m, n, i As Double) As Double
Dim W, X, h0, VT, VP As Double
h0 = 0.0001
Do
h0 = h0 + 0.0001
W = (b + (m * h0)) * h0
X = b + (Sqr(1 + (m * m)) * h0 * 2)
VP = ((W ^ 5) / (X ^ 2)) ^ (1 / 3)
VT = n * Q / (i ^ (1 / 2))
Loop While VT > VP
Ho = h0
End Function
(Lưu Ý: code trên còn dùng cho nhiều thứ khác nên hơi lung tung, bạn xem cái nào cần thì sửa mà dùng cho phù hợp với mục đích của mình).