【问题标题】:MATLAB: How to make the Hermitean matrix from specific complex vectors?MATLAB:如何从特定的复向量制作 Hermitean 矩阵?
【发布时间】:2013-06-30 19:53:15
【问题描述】:

给予:
静止质量 ms=1;
Eta 常数 eta=0.45;
重复次数可变,例如 N=5;
欧米茄 OM=sqrt(ks/ms);
角频率 om=eta*OM;
时间段 T=2*pi/om;
上限 TTT=1.5;
用于创建函数的变量 t=0:0.001:TTT;

我做了一个这样的函数:

kt=zeros(size(t));
for j=1:2*N+1
    n= j-(N+1);    
    if n==0
        k(j)=ks/2;
    else
        k(j)=i/pi/n;
    end
    kt=kt+k(j)*exp(i*n*om*t);
end

这是一个锯齿波,这是我的问题。从值为 1x1501 double 的复数向量 kt 中,我必须为 变量 N 制作 Hermitean 矩阵。这意味着 N 可以是 5,可以是 50、100 等。矩阵应如下所示(图片):

其中 k1 是 k,对于 N=1,k0 是 k,对于 N=0,或者 k-1 是 k,对于 N=-1。矩阵大小为 2*N+1 和 2*N+1。

感谢您的帮助和回复!

【问题讨论】:

    标签: matlab complex-numbers


    【解决方案1】:

    那是Toeplitz matrix,可以使用toeplitz命令生成上面的矩阵。在一般情况下,这将被写成:

    H = toeplitz(kt(N:end), kt(1:N + 1))
    

    其中kt中的前N个值对应k-N,... k-1,最后N + 1个值为k0, . .. kN。但是,由于 H 是 Hermitian,因此可以简化为:

    H = toeplitz(kt(N:end));
    

    【讨论】:

    • 谢谢,我知道那是特定的矩阵,但我不记得名字了:)
    【解决方案2】:

    试试这个代码:

    k=[1 2+i 3+i 4+i 5+i];
    N=7;
    M=diag(k(1)*ones(N,1));
    
    for j=1:length(k)-1
        M=M+diag(k(j+1)*ones(N-j,1),j)+diag(conj(k(j+1))*ones(N-j,1),-j)
    end;
    

    这里N应该等于或大于k数组的长度

    【讨论】:

    • 谢谢,也很有用;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 2016-05-26
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多