我需要在Matlab中使用函数句柄实现以下公式
其中t是时间向量,n大。而且,Sk和fk对于每个k是恒定的。任何实现此目的的有效方法都值得赞赏。
编辑:
对于第一次谐波,我可以写
y=@(t) s(1)*exp(i*2*pi*f(1)*t);
但是,我不能在for循环中使用它来生成f(t)。有矢量方法可以做到这一点吗?
答案 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 );
此匿名函数将捕获定义时存在的s
和f
。 t
可以在以后提供:
result = y(t);
但是请注意,ifft
执行相同的计算,但是效率更高。