показывая аналогичное значение по осям x и y в Matlab

у меня есть матрица, как показано ниже; из расчета будет некоторое значение, которое будет иметь одинаковое значение друг с другом при построении графика (я использовал точечный график), избыточное значение при построении графика вопрос здесь заключается в том, как узнать/определить, какой расчет дает совпадающие данные, и можно ли их сохранить в таблице. Я пробовал использовать функцию поиска в Matlab, но произошла ошибка.

A = [2/3 -1/3 -1/3;
    -1/3 2/3 -1/3;
    -1/3 -1/3 2/3];
B=[0 0 0;
    0 0 1;
    0 1 0;
    0 1 1;
    1 0 0;
    1 0 1;
    1 1 0;
    1 1 1];
d= [2/3 -1/3 -1/3];
q = [0 0.5773 -0.5773];
for i = 1:size(B,1)
    p1 =  A * B(1,:)' -A * B(i,:)';
    dtransformation0a(i) = d*p1;
    qtransformation0a(i) = q*p1;
    p2 =  A * B(2,:)' -A * B(i,:)'
    dtransformation0b(i) = d*p2;
    qtransformation0b(i) = q*p2;
     p3 =  A * B(3,:)' -A * B(i,:)';
    dtransformation0c(i) = d*p3;
    qtransformation0c(i) = q*p3;
    p4 =  A * B(4,:)' -A * B(i,:)';
    dtransformation0d(i) = d*p4;
    qtransformation0d(i) = q*p4;
    p5 =  A * B(5,:)' -A * B(i,:)';
    dtransformation0e(i) = d*p5;
    qtransformation0e(i) = q*p5;
    p6 =  A * B(6,:)' -A * B(i,:)';
    dtransformation0f(i) = d*p6;
    qtransformation0f(i) = q*p6;
end
figure
 scatter(dtransformation0a,qtransformation0a,100,'b.')
hold on
scatter(dtransformation0b,qtransformation0b,100,'b.')
hold on

person dan    schedule 11.03.2013    source источник
comment
Непонятно, что вы имеете в виду под избыточностью здесь.   -  person Oliver Charlesworth    schedule 11.03.2013
comment
@OliCharlesworth означает, что когда Matlab умножает и строит график, будет как минимум 3 умножения, которые дают одинаковое значение осей x и y. поэтому мой интерес здесь состоит в том, чтобы найти, какое умножение дает это.   -  person dan    schedule 11.03.2013
comment
@RoneyMichael, не могли бы вы помочь мне с этим? решение, которое вы дали мне раньше. не могу работать   -  person dan    schedule 11.03.2013
comment
@dan: я не буду уведомлен, если я уже не активен в теме. Я просто случайно увидел это. Я посмотрю на это.   -  person Roney Michael    schedule 11.03.2013
comment
@dan: мне нужно кое-что уточнить: скажем, (dtransformation0a, qtransformation0a) — это набор точек PA, а (dtransformation0b, qtransformation0b) — это набор точек PB. Теперь я заметил, что есть избыточность внутри PA и PB по отдельности, а также избыточность между ними. Например, точка (0,0) встречается дважды в PA и один раз в PB. Теперь, вы имеете в виду, что это должно произойти только один раз в PA и остаться таким же в PB?   -  person Roney Michael    schedule 11.03.2013
comment
@RoneyMichael, я хочу найти одинаковое значение. независимо от того, находится ли он в PA или PB. до тех пор, пока он помещается на график, он дает одну и ту же пунктирную линию на той же оси x (dtransformation) и оси y (qtransformation). Допустим, точка (0,0) встречается дважды в PA и один раз в PB, поэтому я хотите знать умножение того, что дает те точки. Я застрял. не знаю, что делать. я думаю, что это можно решить, используя for-loops правильно? но как. большое спасибо чувак   -  person dan    schedule 12.03.2013
comment
@RoneyMichael не показал, где находится точка (0,0) .. она должна встречаться дважды в PA и один раз в PB, верно?   -  person dan    schedule 12.03.2013
comment
@dan: Так и было. Теперь это должно произойти только один раз в my_points.   -  person Roney Michael    schedule 12.03.2013
comment
@RoneyMichael я отредактировал вопрос и прикрепил картинку. большое спасибо мужик..   -  person dan    schedule 12.03.2013
comment
@RoneyMichael, если вы обратитесь к картинке выше, она показывает, что точка (0,0) имеет 7 точек от другого умножения ... поэтому я хочу найти, что это за умножение ... хе-хе-хе ... может быть, вы неправильно понимаете мои вопросы.   -  person dan    schedule 12.03.2013
comment
Хорошо, разве вы не могли бы просто указать условия в цикле? Я прикреплю код ниже.   -  person Roney Michael    schedule 12.03.2013
comment
@RoneyMichael, спасибо, чувак.. что-то похожее на это.. но мне нужно переделать его, потому что из твоего кода ты уже указал точки (0,0), но проблема в том, что я не знал, что такое точки.. допустим если у меня есть 2000 данных... в любом случае fprintf(dtransformation0a =› (%f = %f * %f;)\n,dtransformation0a(i),d,p1); следует заменить на fprintf('dtransformation0a =› (%f = %f * %f;)\n',dtransformation0a(i),d,p1);   -  person dan    schedule 12.03.2013
comment
@дан: Хорошо. Рад помочь. :) Если вам нужна дополнительная помощь, я готов помочь, если вы можете предоставить простой базовый пример того, что вам нужно.   -  person Roney Michael    schedule 12.03.2013


Ответы (1)


У меня сейчас нет доступа к интерпретатору MATLAB, поэтому я не могу проверить его сам, но это должно работать:

A = [2/3 -1/3 -1/3;
    -1/3 2/3 -1/3;
    -1/3 -1/3 2/3];
B = [0 0 0;
    0 0 1;
    0 1 0;
    0 1 1;
    1 0 0;
    1 0 1;
    1 1 0;
    1 1 1];
d = [2/3 -1/3 -1/3];
q = [0 0.5773 -0.5773];
for i = 1:size(B,1)
    p1 =  A * B(1,:)' -A * B(i,:)';
    dtransformation0a(i) = d*p1;
    qtransformation0a(i) = q*p1;
    p2 =  A * B(2,:)' -A * B(i,:)'
    dtransformation0b(i) = d*p2;
    qtransformation0b(i) = q*p2;
     p3 =  A * B(3,:)' -A * B(i,:)';
    dtransformation0c(i) = d*p3;
    qtransformation0c(i) = q*p3;
    p4 =  A * B(4,:)' -A * B(i,:)';
    dtransformation0d(i) = d*p4;
    qtransformation0d(i) = q*p4;
    p5 =  A * B(5,:)' -A * B(i,:)';
    dtransformation0e(i) = d*p5;
    qtransformation0e(i) = q*p5;
    p6 =  A * B(6,:)' -A * B(i,:)';
    dtransformation0f(i) = d*p6;
    qtransformation0f(i) = q*p6;
end

X = [dtransformation0a, dtransformation0b];    %Assuming dtransformation0a and dtransformation0b are row martices.
Y = [qtransformation0a, qtransformation0b];    %Assuming qtransformation0a and qtransformation0b are row martices.
my_points = [X';Y'];    %Each row of my_points will represent a particular point.
my_points = unique(my_points, 'rows');    %Get unique rows, hence points.

figure
scatter(my_points(:,1),my_points(:,2),100,'b.')

Дайте мне знать, если у вас возникнут какие-либо проблемы.

**

РЕДАКТИРОВАТЬ!!

**

Согласно вашему требованию, я понял, что вы хотите отобразить те вычисления, которые дают значение, скажем, (0,0); если это действительно то, что вы хотите, вы сможете получить его, заменив часть цикла на:

my_point = [0, 0];
for i = 1:size(B,1)
    p1 =  A * B(1,:)' -A * B(i,:)';
    dtransformation0a(i) = d*p1;
    qtransformation0a(i) = q*p1;
    p2 =  A * B(2,:)' -A * B(i,:)'
    dtransformation0b(i) = d*p2;
    qtransformation0b(i) = q*p2;
     p3 =  A * B(3,:)' -A * B(i,:)';
    dtransformation0c(i) = d*p3;
    qtransformation0c(i) = q*p3;
    p4 =  A * B(4,:)' -A * B(i,:)';
    dtransformation0d(i) = d*p4;
    qtransformation0d(i) = q*p4;
    p5 =  A * B(5,:)' -A * B(i,:)';
    dtransformation0e(i) = d*p5;
    qtransformation0e(i) = q*p5;
    p6 =  A * B(6,:)' -A * B(i,:)';
    dtransformation0f(i) = d*p6;
    qtransformation0f(i) = q*p6;

    if(dtransformation0a(i)==my_point(1))
        fprintf("dtransformation0a => (%f = %f * %f;)\n",dtransformation0a(i),d,p1);
    end
    if(dtransformation0b(i)==my_point(1))
        fprintf("dtransformation0b => (%f = %f * %f;)\n",dtransformation0b(i),d,p2);
    end
    if(qtransformation0a(i)==my_point(2))
        fprintf("qtransformation0a => (%f = %f * %f;)\n",qtransformation0a(i),q,p1);
    end
    if(qtransformation0b(i)==my_point(2))
        fprintf("qtransformation0b => (%f = %f * %f;)\n",qtransformation0b(i),q,p2);
    end
end

Надеюсь, это то, что вы ищете.

person Roney Michael    schedule 12.03.2013