因为在一个程序中要反复的用到矩阵相乘,我想把矩阵的乘法写到一个函数里面,可是写不成功,函数可以用二维数组作为参数吗。请大仙们指点。
类似: Sub multi(a(),b())
dim c() as double
Dim i As Integer, j As Integer, n As Integer
For i = 1 To 3
For j = 1 To 3
For n = 1 To 2
c(i, j) = c(i, j) + a(i, n) * b(n, j)
Next n
Next j
Next i
图形学.AutoRedraw = True
For i = 1 To 3
For j = 1 To 3
Print c(i, j)
Next j
Next i
End Sub
类似: Sub multi(a(),b())
dim c() as double
Dim i As Integer, j As Integer, n As Integer
For i = 1 To 3
For j = 1 To 3
For n = 1 To 2
c(i, j) = c(i, j) + a(i, n) * b(n, j)
Next n
Next j
Next i
图形学.AutoRedraw = True
For i = 1 To 3
For j = 1 To 3
Print c(i, j)
Next j
Next i
End Sub
解决方案 »
- owc横坐标的值太密,如何解决啊?
- 想买款喷墨打印机打印文档,各位有什么推荐?
- 弹出打印框后vb如何知道用户按了确定还是取消?
- 關于在vb中的圖像,以前在qbasic中有可以將自己畫的圖形做成一個位圖,以方便后面程序的調用,不知在vb6.0中有沒有這樣的功能
- 关于数据库Access的多层查询与datagrid相连的问题
- 按钮的picture属性
- 硬盘序列号问题
- 如何去除textbox文本框控件默认的右键菜单?
- 请问:vb中的md5算法如何实现?
- 在VB中,如何连接远程数据库(internet上的数据库服务器)?请给示范代码。我只有这么多分。
- VB用SQL写大量记录后发现次序出问题
- 急...数组赋值问题..
dim c() as double
c()没有初始化就赋值,当然要出错.
redim c(ubound(a,1),ubound(b,2))
...............
Dim n As Integer
Dim m As Integer
Dim p As Integer
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim z() As Double
n = UBound(x, 1)
m = UBound(x, 2)
p = UBound(y, 2)
ReDim z(1 To n, 1 To p)
'ReDim z(n, p)
If m <> UBound(y, 1) Then
MsgBox ("这两个矩阵不能相乘!" + Str$(m) + Str$(UBound(y, 1)))
Else
For i = 1 To n
For j = 1 To m
For k = 1 To p
z(i, k) = z(i, k) + x(i, j) * y(j, k)
Next k
Next j
Next i
End If
MatMultiply = z
End Function调用方法:
a=MatMultiply(x,y),其中a必须定义成动态数组,dim a() as double
Me.Picture1.Line (c(2, 1), c(2, 2))-(c(3, 1), c(3, 2)), vbRed
Me.Picture1.Line (c(3, 1), c(3, 2))-(c(1, 1), c(1, 2)), vbRed
三条语句怎么没有达到效果,picture1中没有显示这三条线,不知道怎么回事?Private Sub Command1_Click() Dim a(1 To 3, 1 To 3) As Double
Dim b(1 To 3, 1 To 3) As Double
' Dim c(1 To 3, 1 To 3) As Double
Dim c() As Double
Dim xo As Double, tx As Double, ty As Double
Const PI = 3.14159
Dim i As Integer, j As Integer, n As Integer
tx = Val(TxtPX.Text)
ty = Val(TxtPY.Text)
Me.AutoRedraw = True
Me.Picture1.AutoRedraw = True
'显示坐标系(用户自定义)
Me.Picture1.ScaleMode = 0
Me.Picture1.Scale (-Me.Picture1.Width / 2, Me.Picture1.Height / 2)-(Me.Picture1.Width / 2, -Me.Picture1.Height / 2)
Me.Picture1.Line (Me.Picture1.ScaleLeft, 0)-(Me.Picture1.ScaleWidth, 0), vbBlue
Me.Picture1.Line (0, Me.Picture1.ScaleTop)-(0, Me.Picture1.ScaleHeight), vbBlue'执行变换
a(1, 1) = Val(TxtAX.Text): a(1, 2) = Val(TxtAY.Text): a(1, 3) = 1
a(2, 1) = Val(TxtBX.Text): a(2, 2) = Val(TxtBY.Text): a(2, 3) = 1
a(3, 1) = Val(TxtCX.Text): a(3, 2) = Val(TxtCY.Text): a(3, 3) = 1
xo = (Val(TxtO.Text) / 180) * PI
b(1, 1) = 1: b(1, 2) = 0: b(1, 3) = 0
b(2, 1) = 0: b(2, 2) = 1: b(2, 3) = 0
b(3, 1) = -tx: b(3, 2) = -ty: b(3, 3) = 1'调用矩阵相乘的函数,完成变换
c = MatMultiply(a, b) 图形学.AutoRedraw = True
Me.Picture1.AutoRedraw = True
'把坐标系转换成X,Y轴正向轴分别为100,100的坐标系
For i = 1 To 3
c(i, 1) = c(i, 1) * Me.Picture1.Width / 200
Next i
For j = 1 To 3
c(j, 1) = c(j, 1) * Me.Picture1.Height / 200
Next j
Me.Picture1.Line (c(1, 1), c(1, 2))-(c(2, 1), c(2, 2)), vbRed
Me.Picture1.Line (c(2, 1), c(2, 2))-(c(3, 1), c(3, 2)), vbRed
Me.Picture1.Line (c(3, 1), c(3, 2))-(c(1, 1), c(1, 2)), vbRedEnd Sub
'矩阵乘法
Public Function MatMultiply(x() As Double, y() As Double) As Double()
Dim n As Integer
Dim m As Integer
Dim p As Integer
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim z() As Double
n = UBound(x, 1) '第一维的上界(即行数)
m = UBound(x, 2) '第一维的上界(即列数)
p = UBound(y, 2)
ReDim z(1 To n, 1 To p) If m <> UBound(y, 1) Then
MsgBox ("这两个矩阵不能相乘!" + Str$(m) + Str$(UBound(y, 1)))
Else
For i = 1 To n
For j = 1 To m
For k = 1 To p
z(i, k) = z(i, k) + x(i, j) * y(j, k)
Next k
Next j
Next i
End If
MatMultiply = z
End Function