问题陈述:
我有一个数组M
,其中包含m
行和n
列。数组M
填充非零元素。
我还有一个带有t
元素的向量n
和一个向量omega
使用m
元素。
t
的元素对应于矩阵M
的列。
omega
的元素对应于矩阵M
的行。
算法目标:
将chi
定义为向量t
和omega
的乘法。 我需要获取一维向量a
,其中a
的每个元素都是chi
的函数。
chi
的每个元素都是唯一的(即每个元素都不同)。
使用数学符号,这可以表示为a(chi)
向量a
的每个元素对应于M
的一个或多个元素。
Matlab代码:
以下是显示如何生成向量t
和omega
的代码段。矩阵M
已预先存在。
[m,n] = size(M);
t = linspace(0,5,n);
omega = linspace(0,628,m);
概念图:
这似乎是一种整合方式(如果这是正确的词),沿着常数chi。
参考:
该参考文献中未明确说明该算法。我只希望这种算法的描述方式让人想起计算机科学教科书!
参见图11.5,矩阵M如图11.5(a)所示。目标是找到一种算法将图11.5(a)转换为11.5(b)。
似乎算法是沿着常数chi
的一种积分(平均,可能?)。
答案 0 :(得分:2)
在我看来reshape是你需要使用的matlab函数。如链接中所述:
B = reshape(A,siz)
返回一个n维数组,其元素与A相同,但重新转换为siz
,这是一个表示重新整形数组尺寸的向量。
也就是说,创建一个数字为siz
的向量m*n
,然后说A = reshape(P,siz)
,其中P是向量t和ω的乘积;或者说像A = reshape(t*ω,[m*n])
之类的话。 (我这里没有matlab,或者会运行一个测试,看看我是否有正确的产品。)注意,链接没有显示一个带有一个数字(而不是几个)的示例,在矩阵参数之后{ {1}},但我希望reshape
可能也有效。
答案 1 :(得分:2)
您应该为要实现的算法添加伪代码或链接。根据我的理解,我还开发了以下代码:
M = [1 2 3 4; 5 6 7 8; 9 10 11 12]' % easy test M matrix
a = reshape(M, prod(size(M)), 1) % convert M to vector 'a' with reshape command
[m,n] = size(M); % Your sample code
t = linspace(0,5,n); % Your sample code
omega = linspace(0,628,m); % Your sample code
for i=1:length(t)
for j=1:length(omega) % Acces a(chi) in the desired order
chi = length(omega)*(i-1)+j;
t(i) % related t value
omega(j) % related omega value
a(chi) % related a(chi) value
end
end
正如您所看到的,我还认为reshape()函数可以解决您的问题。我希望这段代码有帮助,
答案 2 :(得分:0)
基本思想是使用两个独立的循环。外部循环超过chi
变量值,而内部循环超过i
变量值。参考原始问题中的上图,i
变量对应于x轴(时间),j
变量对应于y轴(频率)。假设chi
,i
和j
变量可以采用任何实数,则bilinear interpolation用于查找与矩阵{{1}中的元素对应的幅度}}。整合只是对M
。
以下代码片段概述了使用从2D到1D的光谱折叠将矩阵元素表示为矢量的基本算法。我找不到任何参考,但它是一个适合我的解决方案。
M