Matlab:使用函数句柄实现指数求和

时间:2018-07-01 03:51:47

标签: matlab

我需要在Matlab中使用函数句柄实现以下公式

enter image description here

其中t是时间向量,n大。而且,Sk和fk对于每个k是恒定的。任何实现此目的的有效方法都值得赞赏。

编辑:

对于第一次谐波,我可以写

y=@(t) s(1)*exp(i*2*pi*f(1)*t);

但是,我不能在for循环中使用它来生成f(t)。有矢量方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:1)

假设您有一个长度相同的数据向量s,一个频率向量f和一个长度(可能)不同的时间向量t,则可以计算给定

result = sum( s(:) .* exp( i*2*pi * f(:) .* t(:).' ), 1 );

这里发生的是s(:)强制s成为列向量。我们以相同的方式将f制成列向量。 t(:).'是行向量。 MATLAB会执行隐式单例扩展,因此f(:) .* t(:).'返回2D矩阵。另一个.*也为s做单例扩展。最后,sum(.,1)在第一维度上求和,该维度在f的所有值上。结果是与t长度相同的行向量。

如果您需要一个可计算该值的函数句柄,只需将单行代码转换为匿名函数即可:

y = @(t) sum( s(:) .* exp( i*2*pi * f(:) .* t(:).' ), 1 );

此匿名函数将捕获定义时存在的sft可以在以后提供:

result = y(t);

但是请注意,ifft执行相同的计算,但是效率更高。