将矩阵的元素表达为向量的算法

时间:2012-10-15 19:51:07

标签: algorithm matlab linear-algebra numerical-methods

问题陈述:

  1. 我有一个数组M,其中包含m行和n列。数组M填充非零元素。

  2. 我还有一个带有t元素的向量n和一个向量omega     使用m元素。

  3. t的元素对应于矩阵M的列。

  4. omega的元素对应于矩阵M的行。

  5. 算法目标:

    chi定义为向量tomega的乘法。 我需要获取一维向量a,其中a的每个元素都是chi的函数。

    chi的每个元素都是唯一的(即每个元素都不同)。

    使用数学符号,这可以表示为a(chi)

    向量a的每个元素对应于M的一个或多个元素。

    Matlab代码:

    以下是显示如何生成向量tomega的代码段。矩阵M已预先存在。

    [m,n] = size(M);
    t = linspace(0,5,n);
    omega = linspace(0,628,m);
    

    概念图:

    这似乎是一种整合方式(如果这是正确的词),沿着常数chi。

    Diagram

    参考:

    Link to reference

    该参考文献中未明确说明该算法。我只希望这种算法的描述方式让人想起计算机科学教科书!

    参见图11.5,矩阵M如图11.5(a)所示。目标是找到一种算法将图11.5(a)转换为11.5(b)。

    似乎算法是沿着常数chi的一种积分(平均,可能?)。

3 个答案:

答案 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轴(频率)。假设chiij变量可以采用任何实数,则bilinear interpolation用于查找与矩阵{{1}中的元素对应的幅度}}。整合只是对M

元素的平均

以下代码片段概述了使用从2D到1D的光谱折叠将矩阵元素表示为矢量的基本算法。我找不到任何参考,但它是一个适合我的解决方案。

M