MATLAB问题

MATLAB问题,matlab,for-loop,Matlab,For Loop,使用变量a和b计算周期图,频率序列f,介于1和20之间,间隔为0.2。对于每个频率值,通过方程找到值 T = (1/(4*pi*f))*atan(sum(sin(4*pi*f*t(i))))/(sum(cos(4*pi*f*t(i))) 然后,通过以下等式计算频率f,p(f)的周期图值: P(f) = ((sum(MasterYi(i)*sin(2*pi*f(t(i)-T))))^2)/(sum(sin^2(2*pi*f(t(i)-T))))+... ((sum(MasterYi(i)*co

使用变量
a
b
计算周期图,频率序列
f
,介于1和20之间,间隔为0.2。对于每个频率值,通过方程找到值

T = (1/(4*pi*f))*atan(sum(sin(4*pi*f*t(i))))/(sum(cos(4*pi*f*t(i))) 
然后,通过以下等式计算频率
f
p(f)
的周期图值:

P(f) = ((sum(MasterYi(i)*sin(2*pi*f(t(i)-T))))^2)/(sum(sin^2(2*pi*f(t(i)-T))))+... ((sum(MasterYi(i)*cos(2*pi*f(t(i)-T))))^2)/(sum(cos^2(2*pi*f(t(i)-T)))) 
在哪里,

MasterYi = a * sin(2*pi*f(ti-T))+b*cos(2*pi*f(ti-T)) 
我有以下代码:

for f = 1:0.2:20
%t is a value that we know
t = 1:82;
T(:,f) = (1./(4*pi.*f)).*tan(sum(sin(4*pi*f*t(:,f))))./(sum(cos(4*pi*f.*t(:,f))))

end
目前,我们正在尝试获取
T
的值,但它表示:

索引必须是实正整数或逻辑数


我对发生的事感到很困惑。我假设问题中的
t(:,f)
是一个错误。使用该假设,解决
T
值问题的一种方法如下:

% create a function handle to the T equation
T = @(f,t) (1/(4*pi*f))*atan(sum(sin(4*pi*f*t)))/(sum(cos(4*pi*f*t)));
% create the t vector
t = 0:82;
% create the f vector
f = 1:.02:20;
% pre-allocate the results Tresults
Tresults = zeros(length(f),1);
% loop over f finding T
for x = 1:length(f)
    Tresults(x) = T(f(x), t);
end

问题是您需要使用整数作为结果的索引
f
不能作为索引,因为它包含非整数的值,如
1.2、1.4、1.6
。您可以遵循此模式并将其扩展到方程的其余部分。我将继续,但问题描述中缺少变量,如
ti、a、b
。使用
bsxfun
有一些很酷的方法可以解决这个问题,但在现阶段这太高级了。

是的,明显的错误。您不是调用实正整数或逻辑数作为索引,而是
t(:,f)
。你是如何定义M(3,4.2)的矩阵项的?很奇怪。
t(:,f)
的目的是什么
t
是一个行向量,因此调用所有行是非常冗余的
f
包含95个值,而
t
包含82个值。因此,您不能简单地用
f
替换其索引号。请从
f
的单个值开始,并确保您得到了正确的答案。我不确定
T
对于单个值是否正确……更不用说总循环了。这是在尝试循环之前。
tan(sum(..)。/sum(..)
..的一些问题对于两个单值不需要点运算符。以及
t(:,f)
在这方面真的毫无意义。为了尽可能清楚,我已经提出了这个问题。很抱歉,我不习惯使用stackoverflow,我在这个练习中做了很多工作。谢谢你的帮助。除此之外,我不知道在代码上写什么。。。