【问题标题】:Filling in a Cell of Matrices in MATLAB在 MATLAB 中填充矩阵单元
【发布时间】:2016-05-24 19:10:54
【问题描述】:

在 Matlab 中,我试图创建一个大小为 16 x1 的单元格,其中该单元格的每个条目都是一个矩阵。我有以下等式

  $$W_g = exp^{\frac{j{2\pi m}{N}(n+\frac{g}{G}))}  \,\,\,\,\,\,\, m,n=0,1,.....(N-1)$$

对于这项工作,假设 $N=4$ 并且索引 $g$ 是引用单元格元素的索引,即 g=0:1:15

W=cell(16,1);

for g=1:16
for m=1:3
    for n=1:3
        W{g,m,n}= exp((2*pi*j*m/4)*      n+(g-1)/16));
end 
end
end

我怎样才能做到这一点?我有两个问题,你看到 g 从 0 开始,MATLAB 不接受零索引以及如何实际定义单元格内的矩阵。

谢谢

【问题讨论】:

  • 堆栈溢出不处理 LaTeX。还要给g加1? W{g+1, m, n}
  • 谢谢。显示这个等式的最佳方法是什么
  • @Henry 我尝试通过 LaTeX 编辑器运行您的方程式。它不渲染。您可以使用此网站:codecogs.com/latex/eqneditor.php ... 创建可用于嵌入到您的帖子中的方程式的图像表示。更正您的方程式,渲染图像,然后将其嵌入到您的帖子中。

标签: matlab


【解决方案1】:

所以如果我理解你有这个等式:

而您只需要以下代码:

W=cell(16,1);

n = 1:3;
m = 1:3;
N = 4;
for g=1:16
        W{g}= exp((2*pi*j.*m/4*N).*n+(g-1)/16);
end

%or the 1 line version:

W = cellfun(@(g) exp((2*pi*j.*m/4*N).*n+(g-1)/16),num2cell([1:16]),'UniformOutput',0);

使用 matlab 你可以使用Element-wise multiplication 符号.*

例如:

%A matrix multiplication
A = [2,3]
B = [1,3]';

result = A * B %result = 11

%An element wise multiplication
A = [2,3]
B = [1,3];

result = A .* B %result = [2,9]

【讨论】:

    【解决方案2】:

    首先,i是matlab中的复数(sqrt(-1))而不是j,而且你是对的,matlab的索引是1,所以只要从1开始数g,直到16。

    接下来,创建一个零矩阵,并相应地计算所有索引。像这样的东西应该可以正常工作:

    clc
    clear all
    
    W=cell(16,1);
    
    for g=1:16;
    
        temp = zeros(3,3);
        for m=1:3
            for n=1:3
    
                temp (m,n) = exp((2*pi*1i*m/4)*      n+g/16);
            end
    
        end
    
        W{g} = temp;
    end
    

    如果您正在考虑进行更大的运算,请考虑使用 linspace 创建 m 和 n 索引并使用矩阵运算

    【讨论】:

    • 其实ij都是sqrt(-1)g 也是等式的一部分,因此您可能不想这样做 g = 1:16
    • 我认为 OP 需要 g 在每次迭代中进行更改,因为他最初是如何发布他的 for 循环的。您当然可以将另一个变量 G 设置为常数。不知道 j 在 matlab 中默认也是复杂的,我今天学到了一些新东西 ;)
    • @Henry 这很难说,因为你还没有把 actual 方程放在问题中。
    猜你喜欢
    • 2011-07-23
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 2015-05-15
    相关资源
    最近更新 更多