Помогите написать процедуру произведения матрица на вектор.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Svet'Lana
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 21.11.2008 (Пт) 10:58

Помогите написать процедуру произведения матрица на вектор.

Сообщение Svet'Lana » 21.11.2008 (Пт) 11:10

Помогите, пожалуйста, написать чайнику процедуру произведения матрицы на вектор.
Процедура будет располагаться в стандартном модуле. Матрица в отдельном файле последовательного доступа, вектор тоже в файле посл. доступа, и результат выводиться отдельно на форму и в другой файл посл. доступа. Процедуры обращения к файлам не нужны, только произведения.

Код: Выделить всё
Option Explicit
Option Base 1
Public m As Integer, n As Integer, i As Integer, j As Integer
Public objForma As Object
Public sngMat1(1 To 4, 1 To 4) As Single, sngMat2(1 To 5, 1 To 5) As Single, sngMat3(1 To 4, 1 To 1) As Single, sngMat4(1 To 5, 1 To 1) As Single, sngP1(1 To 4, 1 To 1) As Single, sngP2(1 To 5, 1 To 1) As Single       'sngMat3 и sngMat4- это и есть вектора, а sngP1 и sngP2-произведения матриц на вектора

'процедура ввода матрицы из файла
Public Sub VvodMatFile(sngMat() As Single, m, n, FileName$, MatName$, objForma As Object)
    Open FileName$ For Input As #1
        For i = 1 To n
            For j = 1 To m
                Input #1, sngMat(i, j)
            Next j
        Next i
        Close #1
        Call VivodMatForm(sngMat(), n, m, MatName$, objForma)
End Sub

'процедура вывода матрицы на формы
Public Sub VivodMatForm(sngMat() As Single, m, n, MatName$, objForma)
    Load objForma
    objForma.Show
    objForma.Print Tab(10); MatName$
        For i = 1 To m
            For j = 1 To n
                objForma.Print Tab(10 * j); sngMat(i, j);
            Next j
            objForma.Print
        Next i
End Sub

'процедура вывода матрицы в файл последовательного доступа
Public Sub VivodMatFile(sngMat() As Single, m, n, FileName$, MatName$)
    Open FileName$ For Append As #2
    Print #2, Tab(15); MatName$
        For i = 1 To n
            For j = 1 To m
                Print #2, Tab(j * 10); sngMat(i, j);
            Next j: Print #2,
        Next i: Close #2
End Sub


'процедура вычисления произведения матрицы на вектор
'и запоминания ее в новом массиве
Public Sub ProizMat(sngMat() As Single, m, n, MatName$, sngP() As Single, objForma As Object)

   Вот сюда нужна процедура!

Call VivodMatForm(sngMat(), m, n, MatName$, objForma)
End Sub

'процедура вывода произведения матрицы на вектор на форму
Sub VivodProizMatForm(sngP() As Single, n, Name$, objForma As Object)
    Load objForma
    objForma.Show
    objForma.Print Tab(15); Name$
    For i = 1 To n
        objForma.Print " "; sngP(i);
    Next i
End Sub
'процедура ввода произведения матрицы на вектор в файл

Sub VivodProizMatFile(sngP() As Single, n, Name$, FileName$)
    Open FileName$ For Append As 2
    Print #2, Name$
    For i = 1 To n
        Print #2, " "; sngP(i);
    Next i
    Print #2,
    Close #2
End Sub

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Помогите написать процедуру произведения матрица на вектор.

Сообщение Mikle » 21.11.2008 (Пт) 11:52

Добавь в References ссылку на DirectX8 for Visual Basic Type Library, потом:
Код: Выделить всё
Dim m As D3DMATRIX
Dim v1 As D3DVECTOR
Dim v2 As D3DVECTOR
  D3DXVec3TransformCoord v2, v1, m

"v1" умножается на матрицу "m", результат попадает в "v2".
Это для 3D векторов. Для 4D:
Код: Выделить всё
Dim m As D3DMATRIX
Dim v1 As D3DVECTOR4
Dim v2 As D3DVECTOR4
  D3DXVec4Transform v2, v1, m


Правка:
Глянул твой код, тут матрицы не только 4*4, тогда DX не поможет...

Svet'Lana
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 21.11.2008 (Пт) 10:58

Re: Помогите написать процедуру произведения матрица на вектор.

Сообщение Svet'Lana » 21.11.2008 (Пт) 12:50

А без всяких DirectX8 for Visual Basic Type Library можно? а то я не поняла ничего, говорю же чайник совсем. И зачем объявлять матрицы и вектора опять еще и другими именами, они же в General Declarations уже объявлены и в начале процедуры тоже. Помогите чайнику, завтра преподу сдаваться :cry:

Svet'Lana
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 21.11.2008 (Пт) 10:58

Re: Помогите написать процедуру произведения матрица на вектор.

Сообщение Svet'Lana » 21.11.2008 (Пт) 12:53

Кстати у меня формулы есть по которым надо вычислять
Например матрица из 4-ёх строк и столбцов и вектор-столбец из 4-ёх элементов.
(A11 A12 A13 A14) x (B11)
(A21 A22 A23 A24) x (B21)
(A31 A32 A33 A34) X (B31)
(A41 A42 A43 A44) x (B41)

для получения произведения нужно:
(А11*В11)+(А12*В21)+(А13*В31)+(А14*В41)=Р11
(А21*В11)+(А22*В21)+(А23*В31)+(А24*В41)=Р21
(А31*В11)+(А32*В21)+(А33*В31)+(А34*В41)=Р31
(А41*В11)+(А42*В21)+(А43*В31)+(А44*В41)=Р41

Р11
Р21
Р31 -Результат
Р41

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Помогите написать процедуру произведения матрица на вектор.

Сообщение Viper » 21.11.2008 (Пт) 13:45

Тынц!
З.Ы. Все сделано до нас.
Весь мир матрица, а мы в нем потоки байтов!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14

    TopList