Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: Обратная матрица Добавлено: 09.10.05 07:08  

Автор вопроса:  CyRax  | Web-сайт: basicproduction.nm.ru | ICQ: 204447456 
Как строится такая матрица?

Ответить

  Ответы Всего ответов: 37  

Номер ответа: 1
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #1
Добавлено: 09.10.05 14:34

Методом Гаусса.
Есть матрица

1 2 3
3 4 5
4 5 6

К ней пририсовывается справа единичная.

1 2 3  1 0 0
3 4 5  0 1 0
4 5 6  0 0 1

Дальше делается так: надо сделать слева единичную матрицу. Тогда справа окажется обратная.
Строки можно переставлять местами, складывать, вычитать, домножать на числа не равные нулю.

Если матрицу не получается привести к единичной (вылезает строка из нулей), значет матрица плохая и к ней нет обратной.

Ответить

Номер ответа: 2
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #2
Добавлено: 09.10.05 14:40
Вот так это делается в программе.
Public Sub MakeUnMatrix(ByRef pMatrix() As Double)
Dim i As Long, j As Long
Dim UnMatrix() As Double, Matrix() As Double
Dim k As Long
Dim n As Long
Matrix = pMatrix
n = UBound(Matrix, 1) + 1
If UBound(Matrix, 2) + 1 <> n Then
    Err.Raise 116, "MakeUnMatrix", "No inverse matrix."
End If
ReDim UnMatrix(0 To n - 1, 0 To n - 1)
For i = 0 To n - 1
    UnMatrix(i, i) = 1
Next i
'Stage 1. make the low-daig elems 0
For i = 0 To n - 1
    'search for non-zero line
    For j = i To n - 1
        If Matrix(j, i) <> 0 Then
            Exit For
        End If
    Next j
    If j = n Then
        Err.Raise 116, "MakeUnMatrix", "No inverse matrix."
    End If
    AddRow Matrix, UnMatrix, i, j, (1 - Matrix(i, i)) / Matrix(j, i)
    Matrix(i, i) = 1
    
    'make zeros under i,i
    For j = i + 1 To n - 1
        AddRow Matrix, UnMatrix, j, i, -Matrix(j, i)
        Matrix(j, i) = 0
    Next j
Next i

'Stage 2. Make upper diag elems 0's
For j = n - 1 To 1 Step -1
    For i = 0 To j - 1
        AddRow Matrix, UnMatrix, i, j, -Matrix(i, j)
        Matrix(i, j) = 0
    Next i
Next j

pMatrix = UnMatrix
End Sub

Private Sub AddRow(ByRef Matrix1() As Double, ByRef Matrix2() As Double, ByVal IDest As Long, ByVal ISrc As Long, Multiplier As Double)
Dim i As Long
For i = 0 To UBound(Matrix1, 2)
    Matrix1(IDest, i) = Matrix1(IDest, i) + Matrix1(ISrc, i) * Multiplier
    Matrix2(IDest, i) = Matrix2(IDest, i) + Matrix2(ISrc, i) * Multiplier
Next i
End Sub

Примечание.
Матрица необратима, если ее детерминант равен нулю. К тому же, не являются обратимыми и неквадратные матрицы. (Хотя к неквадратной матрице может быть к примеру правая обратная (или левая, но не обе сразу). Но я не знаю, как ее получить и зачем она вообще может понадобиться.)

Ответить

Номер ответа: 3
Автор ответа:
 Barsik



Разработчик Offline Client

ICQ: 343368641 

Вопросов: 17
Ответов: 686
 Web-сайт: barsik.newmail.ru
 Профиль | | #3
Добавлено: 09.10.05 15:00
обратную матрицу можно построить только для квадратной...
кому интересно отсканил свой накопитель и выложил в сеть(все в примерах :) barsik.newmail.ru/other

Ответить

Номер ответа: 4
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #4
Добавлено: 09.10.05 16:58

Как строится такая матрица?


Ги-ги, я на первом курсе уже в сеньтябьре учил как это строится, а ты ещё не знаешь...хи-хи

Ответить

Номер ответа: 5
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #5
Добавлено: 09.10.05 17:00

ну ладно, кстати, я прогулял все пары. Подкиньте плиз кто-то инфу по матрицам в инете, ну там умножение и т. п. Всякие там Гауссы..надо учить....

заранее спасибо

Ответить

Номер ответа: 6
Автор ответа:
 ViktorZ



ICQ: 271202919 

Вопросов: 56
Ответов: 837
 Профиль | | #6 Добавлено: 09.10.05 17:13
Странное совпадение ребят вас что на Матрицы то потянуло и Cyraxa и DaSharmа? Мож я не в моде опять. Мож матрицы рулят)))) А так могу скинуть если кому надо нахождение обратной матрицы на си с выделением памяти ну в общем быстро. На первом тоже помню писал.

Ответить

Номер ответа: 7
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #7 Добавлено: 09.10.05 17:25
CyRax, DaSharm у меня у самого это сейчас в универе, я всё легко находил в инете, на Си, на басике... всё ж есть! Чё поисковиком забыли как пользоваться? ;)

Ответить

Номер ответа: 8
Автор ответа:
 ISpy



Разработчик Offline Client

Вопросов: 47
Ответов: 621
 Web-сайт: intermult.boom.ru
 Профиль | | #8
Добавлено: 09.10.05 17:33
Обратную можно найти еще вот так:
Проверяем, что определитель матрицы A не равен нулю (det(A)!=0).
Находим матрицу А' (присоединенную к матрице А)
Тогда обратная матрица для А равна А'/det(A).

Ответить

Номер ответа: 9
Автор ответа:
 ArtBase



ICQ: 55593017 

Вопросов: 23
Ответов: 76
 Профиль | | #9 Добавлено: 09.10.05 21:34
Как нас учили: Вычислить определитель (чтоб был !=0), найти алгебраические дополнения всех элементов и составить из них новую матрицу, транспонировать её (т.е. махнуть местами строки с соотв. столбцами), и потом умножить транспонированную "матрёшку" на 1/det . Матрицы - самое легкое что может быть в высшей математике, но народ так и воет волком из-за них.

Ответить

Номер ответа: 10
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #10
Добавлено: 09.10.05 22:04

Находим матрицу А'

Это самый медленный метод. Если матрица большая - тормозить будет дико. А методом гаусса все нормально.
Метод через присоединенную матрицу - лишь способ явно записать обратную матрицу. В реале же этим никогда не пользуются.

Ответить

Номер ответа: 11
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #11
Добавлено: 10.10.05 06:01
Многие преподы любят терзать своих студентов вычислением матриц самыми тупыми методами :) Например, нас заставляли вычислять определитель матриц 5-го и 6-го порядка разложением по первой строке. Но мы быстро наловчились и стали юзать для этого КПК :)

Ответить

Номер ответа: 12
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #12
Добавлено: 10.10.05 06:42
Ги-ги, я на первом курсе уже в сеньтябьре учил как это строится, а ты ещё не знаешь...хи-хи

 Нашёл кого сравнивать. Так же как ты я их "учил" ещё 8 лет назад.

Ответить

Номер ответа: 13
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #13
Добавлено: 10.10.05 07:03
Victor,
 Спасибо, всё считает правильно. А ты вообще сам писал этот пример?

Ответить

Номер ответа: 14
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #14
Добавлено: 11.10.05 13:21
А меня эти вычисления уже, мягко говоря, задолбали... И я написал софт
для КПК... С ним удобнее получается :)

Ответить

Номер ответа: 15
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #15
Добавлено: 11.10.05 17:20

2Pavel: а на чем программируешь под КПК?

2VIK: е, мне не на программирование нужно, мне вообще надо значть что такое матрицы и что с ними можно делать...Я вообще представление имею о них смутное. Программирование мне пока ненадо. Т. е. мне нужны доки по математике, какие-то простые, у меня очень низкий уровень знаний в математике...

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам