Matlab:如何绘制这个傅里叶级数,其中每个索引都是奇数

时间:2017-01-06 22:44:26

标签: matlab

enter image description here

我只是一个简单的问题。如何输入上面显示的公式?我似乎无法得到n = 1,3,5,...... 我尝试了不同的代码:

syms k x
x = 1/2 + symsum(k^2, k, [1:2:15])

但是有一条错误消息。

另外,在旁注中,syms和" x"的目的是什么?在我获得此代码的matlab文档示例中显示的变量?

2 个答案:

答案 0 :(得分:4)

假设您没有承诺使用symsum,这是一种方式:

t = [0:0.01:4]; % time grid
n = [1:2:15];   % range of n

x = 0.5 + sum(2/pi*diag(1./n)*sin(pi*n(:)*t(:)')); % summation

% plot
figure;
plot(t, x);
xlabel('t');
ylabel('x');

万一你是Matlab的新手,以下是对这里发生的事情的一些解释:

  • n(:)是列向量
  • t(:)'是r行向量
  • 因此,产品n(:)*t(:)'是原始等式中nt项的矩阵。矩阵中的每列对应于t中的固定点。
  • 术语diag(1./n)*缩放上述矩阵的每一行,以处理原始等式中的除{ - 1}}运算。
  • 最后,n将矩阵折叠成一行,其元素是各列的总和。

Here's a plot of results obtained by evaluating the above code.

答案 1 :(得分:1)

代码顶部的syms语句用于表示名称xk将表示符号变量,其行为与通常的数值变量非常不同。符号变量允许您使用符号进行计算,如在微积分中,变量可以在实数集中具有任何值。并非总是需要使用syms进行绘图,如果是这种情况,您可以使用@ aksadv的答案。

现在来看你的编码问题。要使用syms获取范围内不均匀数字的总和,您有两种选择:使用sumsymsumsymsum允许您执行序列的符号求和,限制是总和的项必须按大小1的步长间隔。这可以实现,因为您可以将k重写为2m+1 m=0,1,..,7。另一个选项是使用sum,您只需获取一个函数数组,其中每个元素对应于您想要的值k,然后在该数组上调用sum。 / p>

使用symsum

syms k,x
y = 1/2 + symsum(2/pi/(2*k+1).*sin((2*k+1)*pi*x),k,0,7)

使用sum

syms x
y = 1/2 + sum(2/pi./(1:2:15).*sin((1:2:15)*pi*x))