希望能在vba中寫一個function
1. 輸入引數有(x1,x2,x3,...xn)和(y1,y2,y3...yn),即兩個range
2. 然后通過這些引數形成一個n*n的矩陣,并求這個矩陣的逆矩陣
3.然后用這個逆矩陣,乘以一個向量,計算結果為另一個向量
4.將向量作為輸出結果
其實我只是想實作三次樣條插值!!!
目前在第三步走不動了!!!第二步里矩陣用二位陣串列示。。。不知道對不對。。。
求大神指教!!!
uj5u.com熱心網友回復:
百度搜“vba 三次樣條插值”uj5u.com熱心網友回復:
是這樣的,關于三次樣條我已經知道演算法,就是卡在求逆矩陣這一塊,也就是如下代碼中紅色字體的陳述句是唯一無法跑通的陳述句,求大神解答一下!!!Public Function spline(x As Range, y As Range)
Dim l1 As Integer
l1 = x.Rows.Count
Dim l2 As Integer
l2 = y.Rows.Count
If l1 <> l2 Then
spline = "Error: Range count does not match"
GoTo endnow
End If
Dim a() As Double
Dim aInv() As Double
Dim i As Integer
Dim b() As Double
Dim k() As Double
Dim n As Integer
n = l1
ReDim a(1 To n, 1 To n)
ReDim aInv(1 To n, 1 To n)
ReDim b(1 To n)
'第1個點
a(1, 1) = 2 / (x(2) - x(1))
a(1, 2) = 1 / (x(2) - x(1))
b(1) = 3 * (y(2) - y(1)) / ((x(2) - x(1)) ^ 2)
'第n個點
a(n, n) = 2 / (x(n) - x(n - 1))
a(n, n - 1) = 1 / (x(n) - x(n - 1))
b(n) = 3 * (y(n) - y(n - 1)) / ((x(n) - x(n - 1)) ^ 2)
'第i個點
For i = 2 To n - 1
a(i, i - 1) = 1 / (x(i) - x(i - 1))
a(i, i + 1) = 1 / (x(i + 1) - x(i))
a(i, i) = 2 * a(i, i - 1) + 2 * a(i, i + 1)
b(i) = 3 * (y(i) - y(i - 1)) / ((x(i) - x(i - 1)) ^ 2) + 3 * (y(i + 1) - y(i)) / ((x(i + 1) - x(i)) ^ 2)
Next i
aInv = Application.WorksheetFunction.MInverse(a)
spline = aInv(1, 3)
endnow:
End Function
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/54290.html
標籤:VBA
上一篇:vb如何用正則運算式把幾大段字符里所有正好是8位的數字提取出來
下一篇:SolidWorks2014
