Matlab 存储特定索引位置的矩阵向量乘法的迭代

Matlab 存储特定索引位置的矩阵向量乘法的迭代,matlab,min,matrix-multiplication,Matlab,Min,Matrix Multiplication,我需要解决一个最小距离问题,看看正在尝试的一些工作,看看: 链接: 我有四个元素:两个列向量:dim(px1)的α和β。在这种情况下,p=q=50给出dim(50x1)的两个列向量。它们的定义如下: alpha = alpha = 0:0.05:2; beta = beta = 0:0.05:2; d = min( (x-(alpha_p*t1_k - beta_q*t1_m)).^2 + (y-(alpha_p*t2_k - beta_q*t2_m)).^2 + (z-(alpha_p*

我需要解决一个最小距离问题,看看正在尝试的一些工作,看看:

链接:

我有四个元素:两个列向量:
dim
(px1)
的α和β。在这种情况下,
p=q=50
给出dim
(50x1)
的两个列向量。它们的定义如下:

alpha = alpha = 0:0.05:2;
beta = beta = 0:0.05:2;
 d = min( (x-(alpha_p*t1_k - beta_q*t1_m)).^2 + (y-(alpha_p*t2_k - beta_q*t2_m)).^2 +
 (z-(alpha_p*t3_k - beta_q*t3_m)).^2 )
我有两个矩阵:
L1
L2

L1
由三个维度为
(kx1)
的列向量组成

L2
由三个维度为
(mx1)
的列向量组成

在这种情况下,它们具有相同的大小,这意味着
k=m=1000
给出了dim
(1000x3)
L1
L2
。这些矩阵的值是预定义的

然而,它们的结构如下:

L1(kx3) = [t1(kx1) t2(kx1) t3(kx1)];
L2(mx3) = [t1(mx1) t2(mx1) t3(mx1)];
我需要解决的最小距离问题(数学上)如下所示:

alpha = alpha = 0:0.05:2;
beta = beta = 0:0.05:2;
 d = min( (x-(alpha_p*t1_k - beta_q*t1_m)).^2 + (y-(alpha_p*t2_k - beta_q*t2_m)).^2 +
 (z-(alpha_p*t3_k - beta_q*t3_m)).^2 )
x、y、z
是三个固定常数

我的问题

我需要开发一个迭代,它可以从
alpha、beta、L1
L2
组合中返回索引位置,从而满足上面的最小距离问题

我希望问题的表述是清楚的,我对索引符号非常小心。但如果还不太清楚的话。。。步骤大小为:

alpha
为p=1,…50

beta
是q=1,…50

对于
L1
<代码>t1、t2、t3
为k=1、…、1000

对于
L2
<代码>t1、t2、t3为m=1、…、1000

我需要找到p的
索引,q的
索引,k的
索引和m的
索引,这给了我到点的最小距离
x,y,z


提前感谢您的帮助

我不知道您的值,因此无法检查代码。我使用循环是因为它是最明显的解决方案。非常肯定来自
bsxfun
-brigarde(;-D)的人会找到一个更短/更有效的解决方案

alpha = 0:0.05:2;
beta = 0:0.05:2;

L1(kx3) = [t1(kx1) t2(kx1) t3(kx1)];
L2(mx3) = [t1(mx1) t2(mx1) t3(mx1)];
idx_smallest_d =[1,1,1,1];
smallest_d = min((x-(alpha(1)*t1(1) - beta(1)*t1(1))).^2 + (y-(alpha(1)*t2(1) - beta(1)*t2(1))).^2+...
                    (z-(alpha(1)*t3(1) - beta(1)*t3(1))).^2);

%The min. distance problem I need to solve is given (mathematically) as follows:
for p=1:1:50
    for q=1:1:50
        for k=1:1:1000
            for m=1:1:1000
                d = min((x-(alpha(p)*t1(k) - beta(q)*t1(m))).^2 + (y-(alpha(p)*t2(k) - beta(q)*t2(m))).^2+...
                    (z-(alpha(p)*t3(k) - beta(q)*t3(m))).^2);
                if d < smallest_d
                    smallest_d=d;
                    idx_smallest_d= [p,q,k,m];
                end
            end
        end
    end
end
alpha=0:0.05:2;
β=0:0.05:2;
L1(kx3)=[t1(kx1)t2(kx1)t3(kx1)];
L2(mx3)=[t1(mx1)t2(mx1)t3(mx1)];
idx_最小值_d=[1,1,1,1];
最小值=最小值((x-(α(1)*t1(1)-β(1)*t1(1)))。^2+(y-(α(1)*t2(1)-β(1)*t2(1))。^2+。。。
(z-(α(1)*t3(1)-β(1)*t3(1))。^2);
%我需要解决的最小距离问题(数学上)如下所示:
对于p=1:1:50
对于q=1:1:50
对于k=1:1:1000
对于m=1:1:1000
d=最小值((x-(α(p)*t1(k)-β(q)*t1(m))。^2+(y-(α(p)*t2(k)-β(q)*t2(m))。^2+。。。
(z-(α(p)*t3(k)-β(q)*t3(m))。^2);
如果d<最小值
最小的d=d;
idx__d=[p,q,k,m];
结束
结束
结束
结束
结束

我所做的是预先定义最小距离作为第一个组合的距离,然后检查每个组合,而不是距离小于前一个最短距离

您知道是否有一种方法可以在
SO
外部执行此操作吗<代码>t1、t2、t3
是(1000x3),在这里发布的内容太多了。。。。或者它可能不是?你是说OP外部的
是什么意思?我指的是StackOverflow,我已经修正了我最后的评论:)
codereview.stackexchange.com
可以是一个地方,但那里的流量不多。我不明白的是:1)使用
t1_k
t1_m
正确吗?因为按照上面的定义,这些值始终相同(对于
t2\u m和t3\u m
)。我猜您的意思是有两个不同的数组,它们对应于相同类型的数据,但不是完全相同的数据。2.)您确定需要以下索引:
p、q、k、m
?因此,是否要比较
50x50x1000x1000
?至少你的问题听起来是这样的。谢谢!!!:D我很快就会试用你的代码。实际上,我已经为这个问题实现了
bsxfun
代码。(迪瓦卡)是应该为此获得荣誉的人。但问题是:在计算您提到的多重性
(50x50x1000x1000)
时,
bsxfun
会耗尽内存。那么,让我们看看好的老式for loop是如何解决这个问题的:D.再次感谢!嗨,再次感谢你的帮助,很抱歉,我有个问题要打扰你。在代码中,当您预定义最小距离时。我试着只写一个数字(例如100),但代码不起作用,为什么?我是否需要总是使用我正在使用的向量预定义这个小距离?其次,选择
alpha(1)和beta(1)
将给我零,这是向量的值,这是“安全的”还是我应该选择其他值?我正在处理这个相同的问题,只是循环比这个复杂得多,但是…原理是相同的(!):)PS:no
bsxfun
到目前为止这个循环的实现。这个循环工作得非常好@SergioHaram您应该明确地使用最小距离的计算,而不是固定值,因为您根本不知道是否有小于(100)的距离。使用第一个距离可以确保结果是正确的。我真的不知道
alpha(1)
beta(1)
但是在我看来应该是~=0,因为否则你总是在步骤1找到可能的最小距离(0),代码是不必要的。是的,我明白你指出的关于alpha和beta是´´~=0´。谢谢你的快速回答,我将使用计算。我的最后一个问题是:当我预定义最小距离时,我