Дискуссионный математический форумМатематический форум
Математический форум Math Help Planet

Обсуждение и решение задач по математике, физике, химии, экономике

Теоретический раздел
Часовой пояс: UTC + 3 часа [ Летнее время ]
новый онлайн-сервис
число, сумма и дата прописью

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Обратная матрица на C++ или JavaScript
СообщениеДобавлено: 03 мар 2013, 17:55 
Не в сети
Начинающий
Зарегистрирован:
03 мар 2013, 17:43
Сообщений: 2
Cпасибо сказано: 2
Спасибо получено:
0 раз в 0 сообщении
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
люди помогите написать программу для вычисления обратной матрицы на C++ или JavaScript с помощью алгебраических дополнений (метод присоединенной матрицы).
вариант с помощью метода Гаусса сделал. нигде не могу найти программную реализацию вычисления присоединительной матрицы :(
если на JavaScript, то по заданию нужно без готовых методов :crazy:

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Обратная матрица на C++ или JavaScript
СообщениеДобавлено: 03 мар 2013, 21:29 
Не в сети
Администратор
Аватара пользователя
Зарегистрирован:
23 фев 2010, 22:52
Сообщений: 6003
Cпасибо сказано: 3247
Спасибо получено:
3150 раз в 2273 сообщениях
Очков репутации: 652

Добавить очки репутацииУменьшить очки репутации
Это не самая простая задачка :%) . Вам "повезло", но сильно не паникуйте - в Буржнете можно найти готовые листинги.
Пример реализации на C++ сразу находится по запросу matrix adjoint.

План таков:
1. Вычисление определителя матрицы (примеров хватает в Сети).
2. Минор матрицы (т.е. удаление заданных i-й строки и j-го столбца в квадратном 2d-массиве, типа MatrixMinor(i,j,A)).
3. Алгебраическое дополнение (легко после п.2 :) ).
4. Союзная (присоединённая) матрица [math](\operatorname{adj}A)[/math], то есть матрица, составленная из алгебраических дополнений обращаемой матрицы. (мутно)
5. Обратная матрица ([math]A^{-1}=\frac{1}{\det A}\cdot \operatorname{adj}A[/math], то есть обычное умножение матрицы на число).
(если все предыдущие пункты сделайте, то это пункт у Вас, я уверен, не вызовет никаких трудностей)

Естественно, сделать проверку на обратимость матрицы: [math]\det A\ne0[/math].

Вот, собственно, и всё :D1
Могу помочь с реализацией на JavaScript.

Вернуться к началу
 Профиль  
Cпасибо сказано 
За это сообщение пользователю Alexdemath "Спасибо" сказали:
farton, mad_math
 Заголовок сообщения: Re: Обратная матрица на C++ или JavaScript
СообщениеДобавлено: 05 мар 2013, 16:48 
Не в сети
Администратор
Аватара пользователя
Зарегистрирован:
23 фев 2010, 22:52
Сообщений: 6003
Cпасибо сказано: 3247
Спасибо получено:
3150 раз в 2273 сообщениях
Очков репутации: 652

Добавить очки репутацииУменьшить очки репутации
Вот вариант вычисления обратной матрицы на JavaScript с помощью алгебраических дополнений (союзной матрицы).
Никаких готовых методов не используется.

function Determinant(A)   // Определитель матрицы (используется алгоритм Барейса)
{
var N = A.length, B = [], denom = 1, exchanges = 0;
for (var i = 0; i < N; ++i)
{ B[i] = [];
for (var j = 0; j < N; ++j) B[i][j] = A[i][j];
}
for (var i = 0; i < N-1; ++i)
{ var maxN = i, maxValue = Math.abs(B[i][i]);
for (var j = i+1; j < N; ++j)
{ var value = Math.abs(B[j][i]);
if (value > maxValue){ maxN = j; maxValue = value; }
}
if (maxN > i)
{ var t = B[i]; B[i] = B[maxN]; B[maxN] = t;
++exchanges;
}
else { if (maxValue == 0) return maxValue; }
var value1 = B[i][i];
for (var j = i+1; j < N; ++j)
{ var value2 = B[j][i];
B[j][i] = 0;
for (var k = i+1; k < N; ++k) B[j][k] = (B[j][k]*value1-B[i][k]*value2)/denom;
}
denom = value1;
} //@ http://mathhelpplanet.com/viewtopic.php?f=44&t=22390
if (exchanges%2) return -B[N-1][N-1];
else return B[N-1][N-1];
}

function InverseMatrix(A) // Обратная матрица
{
var det = Determinant(A);
if (det == 0) return false;
var N = A.length, invA = [];
for (var i = 0; i < N; i++)
{ invA[i] = [];
for (var j = 0; j < N; j++)
{ var B = [], sign = ((i+j)%2==0) ? 1 : -1;
for (var m = 0; m < j; m++)
{ B[m] = [];
for (var n = 0; n < i; n++) B[m][n] = A[m][n];
for (var n = i+1; n < N; n++) B[m][n-1] = A[m][n];
}
for (var m = j+1; m < N; m++)
{ B[m-1] = [];
for (var n = 0; n < i; n++) B[m-1][n] = A[m][n];
for (var n = i+1; n < N; n++) B[m-1][n-1] = A[m][n];
}
invA[i][j] = sign*Determinant(B)/det;
}
}
return invA;
}

Также см. JavaScript: операции над матрицами

Пример вызова
<button onclick="document.write( InverseMatrix([[3,2,6,10],[8,1,0,3],[4,7,9,1],[11,15,4,5]]) )">Вычислить</button>


Последний раз редактировалось Alexdemath 12 дек 2013, 03:05, всего редактировалось 18 раз(а).
Удалил ненужную функцию

Вернуться к началу
 Профиль  
Cпасибо сказано 
За это сообщение пользователю Alexdemath "Спасибо" сказали:
farton, mad_math
 Заголовок сообщения: Re: Обратная матрица на C++ или JavaScript
СообщениеДобавлено: 16 мар 2013, 16:14 
Не в сети
Начинающий
Зарегистрирован:
03 мар 2013, 17:43
Сообщений: 2
Cпасибо сказано: 2
Спасибо получено:
0 раз в 0 сообщении
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
спасибо очень помогли!

Вернуться к началу
 Профиль  
Cпасибо сказано 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему      Страница 1 из 1 [ Сообщений: 4 ]

 Похожие темы   Автор   Ответы   Просмотры   Последнее сообщение 
Обратная матрица

в форуме Линейная и Абстрактная алгебра

e7min

6

222

14 авг 2019, 11:53

Обратная матрица

в форуме Линейная и Абстрактная алгебра

Kosta

10

1004

28 авг 2015, 20:55

Обратная матрица 2

в форуме Линейная и Абстрактная алгебра

afraumar

13

796

28 сен 2014, 13:14

Обратная матрица

в форуме Линейная и Абстрактная алгебра

afraumar

2

477

27 сен 2014, 14:42

Обратная матрица

в форуме Линейная и Абстрактная алгебра

BabyRooJr

1

242

07 июн 2019, 11:11

Обратная и транспонированная матрица

в форуме Линейная и Абстрактная алгебра

user_sensei000

3

146

12 окт 2023, 21:52

Обощённая обратная матрица

в форуме Линейная и Абстрактная алгебра

hranitel6

1

316

30 ноя 2014, 14:04

Обратная матрица через LU-разложение

в форуме Линейная и Абстрактная алгебра

silent_var

12

2735

12 июн 2016, 17:43

Доказать, что обратная матрица перестановочная

в форуме Линейная и Абстрактная алгебра

ACherdenko

8

546

28 апр 2019, 18:30

Обратная матрица методом квадратного корня

в форуме Численные методы

Crosbytak

9

626

29 сен 2019, 21:35


Часовой пояс: UTC + 3 часа [ Летнее время ]



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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Яндекс.Метрика

Copyright © 2010-2023 MathHelpPlanet.com. All rights reserved