我的代码使用integral函数,但我希望使用trapz函数来实现它。
fc = 5*10^6;
fb = 0.2*10^6;
F = [0:10000:10^7];
Tb = 1/fb;
Sequence = [0 1 0 1 1 0 1 1 1 0 0 0 1 0 1 ];
A = sqrt(9/Tb);
w = 2*pi*fc;
I = zeros(1,length(F));
for counter1 = 1:length(Sequence)
if Sequence ( 1, counter1) == 1
s_of_t = @(t) A*cos(w*t)*exp(-1i*2*pi*t*F);
else
s_of_t = @(t) -A*cos(w*t)*exp(-1i*2*pi*t*F);
end
S_of_f = integral(s_of_t,((counter1-1)*Tb),(counter1*Tb),'ArrayValued', true);
for counter2 = 1:length(S_of_f)
I( 1, counter2) = I(1,counter2)+S_of_f(1,counter2);
end
clear S_of_f s_of_t;
end
figure(1)
plot(F,abs(I));
我想要做的是使用trapz函数而不是像这样的积分函数:
for n = 1 : length(F)
S_of_f(n) = trapz(F,s_of_t);
end
而不是:
S_of_f = integral(s_of_t,((counter1-1)*Tb),(counter1*Tb),'ArrayValued', true);
我无法使用此功能实现我的代码,所以如果您有任何建议我会很感激。
错误包括: 未定义函数'max'表示'function_handle'类型的输入参数。 trapz出错(第43行) perm = [dim:max(ndims(y),dim)1:dim-1];
我不确定哪个函数处理我错过了。
(是的,我正在进行傅立叶变换,但是我尝试使用FFT函数占用的内存太多了。)
答案 0 :(得分:1)
trapz
需要一个函数求值向量,而不是函数句柄,这是integral
所期望的。
if Sequence ( 1, counter1) == 1
s_of_t = @(t,F) A*cos(w*t).*exp(-1i*2*pi*t*F);
else
s_of_t = @(t,F) -A*cos(w*t).*exp(-1i*2*pi*t*F);
end
for i=1:length(F)
r=linspace(((counter1-1)*Tb),(counter1*Tb),100);
S_of_f(i) = trapz(r,s_of_t(r,F(i)));
end
...
我使用trapz
随意选择100个积分评估点;您需要根据使用此代码的方式将其修改为适当的值。