Я использовал инструмент кодера MATLAB для создания MEX-версии матричной экспоненциальной функции, которая будет использоваться в другом наборе функций. Проблема в том, что версия MEX дает результаты, отличные от исходного m-файла.
После отладки я считаю, что причина в том, что файл MEX и m-файл не выполняют матричное деление (\) одинаково. Или файл MEX имеет проблемы с ним в первую очередь. Все переменные, ведущие к строке, где происходит деление матрицы, эквивалентны с обеих сторон.
Это строка, в которой возникает проблема:
F = (V-U)\(2*U) + I
Где I — единичная матрица размера V и U.
В чем причина несоответствия, когда файл MEX выполняет матричное деление, и как я могу исправить эту проблему? Можно ли переписать эту строку кода без разделения?
F = inv(V-U)*(2*U) + I
. Выполнение<\>
по существу берет обратную матрицу левой части и умножает ее на правую. Оператор<\>
обычно используется для неквадратных матриц, чтобы найти решение линейной системы уравнений методом наименьших квадратов. - person rayryeng   schedule 15.10.2014inv(A)
сама вычисляет обратную матрицу. Существует другой алгоритм вычисления обратной матрицы вместо вызова оператора<\>
. Насколько сильно различаются эти два ответа? - person rayryeng   schedule 15.10.2014V
иU
, а также знать результатF
и сравнивать два метода? - person rayryeng   schedule 15.10.2014error < 1e-14
) - person rayryeng   schedule 15.10.2014