【问题标题】:showing similar value in x and y-axis in matlab在 matlab 中的 x 和 y 轴上显示相似的值
【发布时间】:2013-02-26 02:10:54
【问题描述】:

我有如下矩阵; 从计算来看,在图中绘制时会有一些彼此具有相同值的值(我使用散点图), 这里的问题是如何知道/识别哪个计算给出了匹配的数据,并且可以将它存储在表中。我试过在matlab中使用find函数,但出现错误。

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

【问题讨论】:

  • 这里的“冗余”不清楚是什么意思。
  • @OliCharlesworth 表示当 matlab 相乘并绘制图形时,至少有 3 次乘法给出相同的 x 轴和 y 轴值。所以我的兴趣是找出产生那个的乘法。
  • @RoneyMichael 你能帮我解决这个问题吗?你之前给我的解决方案。不能工作
  • @dan:除非我已经在线程中处于活动状态,否则我不会收到通知。我只是偶然看到这个。我去看看。
  • @dan:我需要澄清一点:说(dtransformation0a, qtransformation0a) 是点集PA(dtransformation0b, qtransformation0b) 是点集PB。现在我观察到PAPB 内部分别存在冗余以及两者之间的冗余。例如,点(0,0)PA 中出现两次,在PB 中出现一次。现在,您的意思是它应该只在PA 中出现一次并且在PB 中保持不变?

标签: matlab matrix matching scatter


【解决方案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

我希望这就是你要找的。​​p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多