【问题标题】:construct two dimensional array in matlab在matlab中构造二维数组
【发布时间】:2014-03-21 05:44:14
【问题描述】:

让我们考虑以下等式

x(t)=sum(a(i)*sin(2*pi*f(i)*t+b(i)*cos(2*pi*f(i)*t))

其中 i=1,2,......m 和频率 f=[f1,f2,.....fm]t=[t1,t2,....tn]

我想通过sin(2*pi*f(i)*t)cos(2*pi*f(i)*t)创建矩阵,显然它是维度为NX2*m的矩阵,我尝试了以下代码

function [amplitudes]=determine_amplitudes(y,f,t,n,m);

X=zeros(n,2*m);
for i=1:n
     for k=1:m
      if mod(k,2)==1 
          X(i,k)=sin(2*pi*f(k)*t(i));
      else
           X(i,k)=cos(2*pi*f(k)*t(i);
      end

     end
end
end

我使用 mod 运算符来确定如果 k 是奇数索引,那么应该写入 sin 值,否则写入 cosine 值,但问题是我不确定给定矩阵的维度是否为 NX2*m,所以如何创建这样的矩阵,以便不超过频率数组边界的索引,回想频率数组跟随f=[f1,f2,..fm],所以我的问题很简单是如何在 2*m 位置应用 m 频率,谢谢帮助

更新:

假设 m=3,频率 f=[12.5 13.6 21.7]

那么我们有以下矩阵,也假设

 n=4 t=[0.01 0.02 0.03 0.04]

 sin(2*pi*f(1)*t(1))  cos(2*pi*f(1)* t(1)) sin(2*pi*f(2)*t(1)) cos(2*pi*f(2)*t(1)) sin(2*pi*f(3)*t(1)) cos(2*pi*f(3)*t(1))

【问题讨论】:

  • 我认为最终的 matix 的大小将是 nXm,因为使用 if 条件它只是选择 sin 或 cos 项之一,不是吗?
  • 不不,选择正弦或余弦是,但好的,我会更新我的问题以澄清它
  • 我已经更新了,请查看并感谢回复
  • 对不起必须有2*m个分量,没有空格,应该是sin(f(1) cos(f(1)) sin(f(2) cos(f(2))等等
  • f有三个值,怎么会有f(4)?

标签: matlab loops matrix


【解决方案1】:

无循环版本

[f1,t1] = meshgrid(f',t');

p1 = sin(bsxfun(@times,f1,2*pi*t')); %%// Create sin copy '
p2 = cos(bsxfun(@times,f1,2*pi*t')); %%// Create cos copy '

d1 = [p1;p2];
final_matrix = reshape(d1,size(p1,1),[]);

朴素循环版本

final_matrx2 = zeros(n,2*m);
for k1=1:n
    for k2=1:2*m
        if rem(k2,2)==1 
            final_matrx2(k1,k2) = sin(2*pi*f(ceil(k2/2))*t(k1));
        else
            final_matrx2(k1,k2) = cos(2*pi*f(ceil(k2/2))*t(k1));
        end
    end
end

【讨论】:

  • 请问是否可以使用循环?这对我来说更容易
  • 不,我没有测试过这段代码,只需要像我发布的那样有代码
猜你喜欢
  • 2017-08-27
  • 1970-01-01
  • 1970-01-01
  • 2015-02-21
  • 2021-11-13
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多