vba中的矩阵逆运算

Quality_Of_Perfect 2017-08-12 06:01:21
希望能在vba中写一个function
1. 输入参数有(x1,x2,x3,...xn)和(y1,y2,y3...yn),即两个range
2. 然后通过这些参数形成一个n*n的矩阵,并求这个矩阵的逆矩阵
3.然后用这个逆矩阵,乘以一个向量,计算结果为另一个向量
4.将向量作为输出结果


其实我只是想实现三次样条插值!!!

目前在第三步走不动了!!!第二步里矩阵用二位数组表示。。。不知道对不对。。。

求大神指教!!!
...全文
1263 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Quality_Of_Perfect 2017-08-14
  • 打赏
  • 举报
回复
是这样的,关于三次样条我已经知道算法,就是卡在求逆矩阵这一块,也就是如下代码中红色字体的语句是唯一无法跑通的语句,求大神解答一下!!! 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
赵4老师 2017-08-14
  • 打赏
  • 举报
回复
百度搜“vba 三次样条插值”

2,461

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧