Как отобразить вектор столбца x в правиле Крамера в MATLAB? - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь закодировать правило Крамера на MATLAB для квадратной матрицы.Я прекрасно понимаю Правило и верю, что логика моего кода в порядке.Однако, не могли бы вы проверить, где я могу ошибаться, если мой результат отображается неправильно?Любая помощь будет оценена!Спасибо:)

function x = cramer(A, b)

r = size(A, 1);
c = size(A, 2);
n = size(b, 1);


if r ~= c
    disp('Oops! Please enter a square matrix');
end 

if r == c == n

D = det(A);

if D == 0
    disp('Oops! Either, there are a family of soultions or no unique solution')
end

if D ~= 0 

result = zeros(n, 1);


        for (i = 1:n)
        A_x = A;
        A_x(:, i) = b;
        Dx = det(A_x);
        result(i,1) = Dx/D;

        end

        x = result;
end

end 



end

1 Ответ

0 голосов
/ 25 сентября 2018

У вас есть ошибка в вашем if r == c == n чеке.Выражение r == c == n можно развернуть как (r == c) == n, поэтому оно сравнивает значение logical(r == c) с n.

. Например:

>> 2 == 2 == 1

ans =

logical

1

Перепишите ваш чек как r == c && c == n или isequal(r,c,n), и вы должны быть хорошими.

РЕДАКТИРОВАТЬ: Вы можете несколько упростить свою логику, скажем, например:

function x = cramers(A, b)

if diff(size(A)) && size(A,1) == n

    D = det(A);

    if D == 0
        disp('Oops! Either, there are a family of solutions or no unique solution')
        return
    else
        result = zeros(n, 1);


        for i = 1:n
            A_x = A;
            A_x(:, i) = b;
            Dx = det(A_x);
            result(i,1) = Dx/D;

        end

        x = result;
    end
else
    disp('Dimension error')
    return
end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...