Ivan55 0 9 декабря, 2017 Опубликовано 9 декабря, 2017 · Жалоба Добрый вечер! Есть проблема матлаб выдает ошибку при поиске обратной матрицы заданной в формате 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); Что можно сделать? как это обойти? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 27 9 декабря, 2017 Опубликовано 9 декабря, 2017 · Жалоба B = eye(2000)/double(A); или B = double(A)^-1; Ессно, детерминант матрицы А должен быть не равен нулю. PS. Исправил... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan55 0 9 декабря, 2017 Опубликовано 9 декабря, 2017 (изменено) · Жалоба 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 Изменено 9 декабря, 2017 пользователем Ivan55 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 27 9 декабря, 2017 Опубликовано 9 декабря, 2017 · Жалоба В итоге Е - единичная матрица Остается вопрос что делать когда матрица задана в формате int32 Преобразовать в double, найти обратную, масштабировать, преобразовать в int? То есть: A = randi(1000,5,5); D = double(A); B = inv(D); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan55 0 9 декабря, 2017 Опубликовано 9 декабря, 2017 · Жалоба Преобразовать в double, найти обратную, масштабировать, преобразовать в int? То есть: A = randi(1000,5,5); D = double(A); B = inv(D); Кстати, элементы матрицы В будут очень очень малыми числами, так что смысл подобных вычислений весьма загадочен. впринципе вариант) спасибо смысл действительно загадочен... есть еще более загадочный вопрос))) как ускорить вычисление произведения матриц большой размерности в матлаб, так чтобы это выполнялось быстрее чем просто А*В Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 27 9 декабря, 2017 Опубликовано 9 декабря, 2017 · Жалоба есть еще более загадочный вопрос))) как ускорить вычисление произведения матриц большой размерности в матлаб, так чтобы это выполнялось быстрее чем просто А*В Дождаться, когда MATLAB начнет поддерживать инструкции AVX-512, ну и купить правильный процессор.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan55 0 9 декабря, 2017 Опубликовано 9 декабря, 2017 · Жалоба Дождаться, когда MATLAB начнет поддерживать инструкции AVX-512, ну и купить правильный процессор.. улыбнуло ну а если серьезно то я толком ничего не нашел кроме алгоритма Штрассена, но его видимо надо реализовывыть на С++ и подключать к матлабу как MEX с чем я слабо знаком, может есть еще варианты менее извратные чем описал я и вы))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 27 9 декабря, 2017 Опубликовано 9 декабря, 2017 · Жалоба улыбнуло ну а если серьезно то я толком ничего не нашел кроме алгоритма Штрассена, но его видимо надо реализовывыть на С++ и подключать к матлабу как MEX с чем я слабо знаком, может есть еще варианты менее извратные чем описал я и вы))) Есть алгоритмы, но не для произвольных матриц. Есть для эрмитовых матриц и есть для тёплицевых. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan55 0 19 декабря, 2017 Опубликовано 19 декабря, 2017 · Жалоба Препод всетаки уперся и хочет чтоб было без double A = int32(randi(1000,5,5)); D = double(A); B = inv(D); Но блин я даже не знаю что делать матлаб ругаетя на все на det на lu Что делать? как найти обратную? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thermit 1 19 декабря, 2017 Опубликовано 19 декабря, 2017 · Жалоба Что делать? Предложить преподу обратить в целых числах матрицу [1 1; 1 -1] и представить результат в формате int32. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться