Перейти к содержанию

обратная матрица в формате int32

Добрый вечер!

Есть проблема матлаб выдает ошибку при поиске обратной матрицы заданной в формате int32
CODE
A = int32(randi(1000, 2000, 2000));

% Ищем обратную матрицу
B = inv(A);


Ошибка:
Undefined function 'inv' for input arguments of type 'int32'.

Error in InversMatrix (line 6)
B = inv(A);

Что можно сделать? как это обойти?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
B = eye(2000)/double(A);

или

B = double(A)^-1;

Ессно, детерминант матрицы А должен быть не равен нулю.

PS. Исправил...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(blackfin @ Dec 9 2017, 17:20) <{POST_SNAPBACK}>
B = 1.0/A;


умножте B на А вы не получите единичную матрицу, а это значит что В не обратная к А
Вы получите матрицу состоящую из единиц

да и вообще если опустить пока проблему с int32
и запустить вот такой код
CODE
A = randi(10, 5, 5);

B = inv(A);
E = A.*B;

то у меня в результате почемуто не получается Е = [1 0 0 0 0; 0 1 0 0 0; 0 0 1 0 0; 0 0 0 1 0; 0 0 0 0 1]

Цитата(Ivan55 @ Dec 9 2017, 17:27) <{POST_SNAPBACK}>
CODE
A = randi(10, 5, 5);

B = inv(A);
E = A.*B;

то у меня в результате почемуто не получается Е = [1 0 0 0 0; 0 1 0 0 0; 0 0 1 0 0; 0 0 0 1 0; 0 0 0 0 1]


извиняюсь точка не нужна тогда все норм
CODE
A = randi(10, 5, 5);

B = inv(A);
E = A*B;


В итоге Е - единичная матрица
Остается вопрос что делать когда матрица задана в формате int32
Изменено пользователем Ivan55

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(Ivan55 @ Dec 9 2017, 17:43) <{POST_SNAPBACK}>
В итоге Е - единичная матрица
Остается вопрос что делать когда матрица задана в формате int32

Преобразовать в double, найти обратную, масштабировать, преобразовать в int?

То есть:

A = randi(1000,5,5);
D = double(A);
B = inv(D);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(blackfin @ Dec 9 2017, 17:48) <{POST_SNAPBACK}>
Преобразовать в double, найти обратную, масштабировать, преобразовать в int?

То есть:

A = randi(1000,5,5);
D = double(A);
B = inv(D);

Кстати, элементы матрицы В будут очень очень малыми числами, так что смысл подобных вычислений весьма загадочен.


впринципе вариант) спасибо
смысл действительно загадочен...

есть еще более загадочный вопрос))) как ускорить вычисление произведения матриц большой размерности в матлаб, так чтобы это выполнялось быстрее чем просто А*В

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(Ivan55 @ Dec 9 2017, 18:22) <{POST_SNAPBACK}>
есть еще более загадочный вопрос))) как ускорить вычисление произведения матриц большой размерности в матлаб, так чтобы это выполнялось быстрее чем просто А*В

Дождаться, когда MATLAB начнет поддерживать инструкции AVX-512, ну и купить правильный процессор.. biggrin.gif

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(blackfin @ Dec 9 2017, 18:29) <{POST_SNAPBACK}>
Дождаться, когда MATLAB начнет поддерживать инструкции AVX-512, ну и купить правильный процессор.. biggrin.gif


biggrin.gif улыбнуло
ну а если серьезно то я толком ничего не нашел кроме алгоритма Штрассена, но его видимо надо реализовывыть на С++
и подключать к матлабу как MEX с чем я слабо знаком, может есть еще варианты менее извратные чем описал я и вы)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(Ivan55 @ Dec 9 2017, 18:37) <{POST_SNAPBACK}>
biggrin.gif улыбнуло
ну а если серьезно то я толком ничего не нашел кроме алгоритма Штрассена, но его видимо надо реализовывыть на С++
и подключать к матлабу как MEX с чем я слабо знаком, может есть еще варианты менее извратные чем описал я и вы)))

Есть алгоритмы, но не для произвольных матриц. Есть для эрмитовых матриц и есть для тёплицевых.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Препод всетаки уперся и хочет чтоб было без double

A = int32(randi(1000,5,5));
D = double(A);
B = inv(D);

Но блин я даже не знаю что делать матлаб ругаетя на все на det на lu
Что делать? как найти обратную?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Что делать? Предложить преподу обратить в целых числах матрицу [1 1; 1 -1] и представить результат в формате int32.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация