我只是一个简单的问题。如何输入上面显示的公式?我似乎无法得到n = 1,3,5,...... 我尝试了不同的代码:
syms k x
x = 1/2 + symsum(k^2, k, [1:2:15])
但是有一条错误消息。
另外,在旁注中,syms和" x"的目的是什么?在我获得此代码的matlab文档示例中显示的变量?
答案 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(:)'
是原始等式中n
次t
项的矩阵。矩阵中的每列对应于t
中的固定点。 diag(1./n)*
缩放上述矩阵的每一行,以处理原始等式中的除{ - 1}}运算。 n
将矩阵折叠成一行,其元素是各列的总和。答案 1 :(得分:1)
代码顶部的syms
语句用于表示名称x
和k
将表示符号变量,其行为与通常的数值变量非常不同。符号变量允许您使用符号进行计算,如在微积分中,变量可以在实数集中具有任何值。并非总是需要使用syms
进行绘图,如果是这种情况,您可以使用@ aksadv的答案。
现在来看你的编码问题。要使用syms
获取范围内不均匀数字的总和,您有两种选择:使用sum
或symsum
。 symsum
允许您执行序列的符号求和,限制是总和的项必须按大小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))