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

    

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

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

 

Есть проблема матлаб выдает ошибку при поиске обратной матрицы заданной в формате int32

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. Исправил...

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


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

 

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

Вы получите матрицу состоящую из единиц

 

да и вообще если опустить пока проблему с int32

и запустить вот такой код

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]

 

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]

 

извиняюсь точка не нужна тогда все норм

A = randi(10, 5, 5);

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

 

В итоге Е - единичная матрица

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

Изменено пользователем Ivan55

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


Ссылка на сообщение
Поделиться на другие сайты
В итоге Е - единичная матрица

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

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

 

То есть:

 

A = randi(1000,5,5);

D = double(A);

B = inv(D);

 

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


Ссылка на сообщение
Поделиться на другие сайты
Преобразовать в double, найти обратную, масштабировать, преобразовать в int?

 

То есть:

 

A = randi(1000,5,5);

D = double(A);

B = inv(D);

 

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

 

впринципе вариант) спасибо

смысл действительно загадочен...

 

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

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


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

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

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


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

 

:biggrin: улыбнуло

ну а если серьезно то я толком ничего не нашел кроме алгоритма Штрассена, но его видимо надо реализовывыть на С++

и подключать к матлабу как MEX с чем я слабо знаком, может есть еще варианты менее извратные чем описал я и вы)))

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


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

ну а если серьезно то я толком ничего не нашел кроме алгоритма Штрассена, но его видимо надо реализовывыть на С++

и подключать к матлабу как MEX с чем я слабо знаком, может есть еще варианты менее извратные чем описал я и вы)))

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

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


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

Препод всетаки уперся и хочет чтоб было без double

 

A = int32(randi(1000,5,5));

D = double(A);

B = inv(D);

 

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

Что делать? как найти обратную?

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


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

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

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


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

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

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

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

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

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

Войти

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

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