сравнить матрицу Matlab 2 - PullRequest
0 голосов
/ 27 ноября 2011

это мой второй вопрос о сравнении двух матриц. Я пытался сравнить две матрицы (3x3) и (4x6). Разрешающий код работает идеально, но если я хочу заменить матрицу z на строку с комментариями, matlab не нравитсямой код больше :( Не могли бы вы показать мою ошибку! Я буду великолепен, мгм

clear
x=[0  4  8 ;3 2 5 ;2 1 5 ]';
y=[0 1.1 2 2.1 3.6 7.3;1 3 2.2 2 3 2.4 ;2 1 3.3 3.4 6.7 5.8;3 3.4 5 6.6 6.5 7.8]';
z=zeros(6,3);
for i=1:3
    for j=1:3
        for p=1:6
            for r=1:4
                if x(i,1)==y(p,1)
                    z(p,j)=x(i,j);
                elseif (x(i,1)<y(p,1))&&(y(p,1)<x(i+1,1))
            z(p,j)=(x(i,j)+x(i+1,j))./2;%(x(i,j)+x(i+1,j)+x(i,j+1)+x(i+1,j+1))./4
        end
    end
        end
    end
end

конец

1 Ответ

0 голосов
/ 28 ноября 2011

код, который вы опубликовали, НЕ работает идеально - вам просто повезло с комбинацией чисел, которую вы выбрали;).

Просто посмотрите на сравнение значений в объявлении elseif, которое вы разместили, и вы увидитечто этот код не работает должным образом.

переключите эту строку:

elseif (x(i,1)<y(p,1))&&(y(p,1)<x(i+1,1))

на:

elseif ((y(p,1)<x(i+1,1)&&x(i,1)<y(p,1)))

Это потому, что matlab оценивает первое выражение воператор, и если он ложный, он не проверяет второй оператор - поэтому вы не получите ошибку, так как первый statemaent в вашем коде для последних элементов равен false 8 <7.3 </p>

Ошибка, которой вы являетесьЭто происходит потому, что вы пытаетесь получить доступ к элементам из индекса матриц.

У вас есть матрица 3x3 и вы пытаетесь получить доступ к элементу (4,1) в последнем цикле цикла for.Та же проблема с матрицей у.

...