Матричное умножение и различия - PullRequest
0 голосов
/ 12 ноября 2018

Мне нужно вычислить это уравнение с MATLAB:

enter image description here

где Sn может быть как матрицей, так и скаляром, и я попытался сделать это с помощью

S_A = S_3*S_5*((ones-(S_1*S_5)).^(-1))*S_2+S_4

Проблема в том, что это не дает мне правильный результат, и проблема, похоже, в разнице enter image description here, но я не могу понять, почему она дает мне неправильные результаты.

Результат должен быть таким

enter image description here

но результат MATLAB

enter image description here

Я не понимаю, почему два результата не совпадают. Единственный способ, который я понял, - это

diff = ones-(S_1*S_5);
if S_1*S_5 == zeros         %Perchè senza non funziona?
    diff = ones;
else 
    diff = (ones-(S_1*S_5)).^(-1)
end
S_A = S_3*S_5*diff*S_2+S_4;

Но я не думаю, что это разумное решение. Кто-нибудь знает, почему я не получаю правильные результаты?

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

ones выводит матрицу, заполненную единицами, а не матрицу идентификации, которая задается функцией eye. Вам также необходимо указать размер ones или eye, в противном случае он просто выведет скаляр 1 (то есть матрицу 1 на 1, заполненную единицами, или единичную матрицу 1 на 1).

Попробуйте (при условии, что все матрицы имеют одинаковый размер):

siz=length(S_1);
S_A = S_3*S_5*((eye(siz)-(S_1*S_5))^(-1))*S_2+S_4
0 голосов
/ 12 ноября 2018

"Я пытался сделать это с S_A = S_3*S_5*((ones-(S_1*S_5)).^(-1))*S_2+S_4"

Проблема здесь в том, что A^(-1) в математической записи означает "взять обратное", тогда как вы использовали A. ^(-1), обратите внимание на точку, котораяв обозначениях MATLAB означает «взять каждый элемент матрицы в степень -1».Взять обратную матрицу в MATLAB все равно не умно, будь то через inv() или ^(-1), вместо этого используйте mldivide:

S_A = S_3*S_5*(eye(size(S_1*S_5,1))-(S_1*S_5))\S_2+S_4

Кроме того, как уже упоминалось в ответ Брайса , используйте eye, а не ones, чтобы создать матрицу тождественности, и передать ей аргумент размера, а не ничего.В целом мне кажется, что вы не обладаете твердым пониманием основных функций MATLAB, поэтому я хотел бы указать вам на собственное руководство MathWorks по MATLAB .

...