原式如图所示,如果x是固定数值(比如1)的话就很好写,就如下所示
n=1:10000;
x=1;
f=sum(sind(n*x)./n)
但如果x是几十个数值组成的向量的话,如何把f这个向量写出来,按下面这么写会维数错误,难道要用for循环吗,for循环的话,我x的数量太多的话,会算的很慢,有没有数组的方法
n=1:10000;
x=1:1000;
f=sum(sind(n*x)./n)
用for循环的做法,以10万个数据测试单线程与多线程的速度,其实这速度还是可以接受的!
我不知道是否理解到题目的意思了。
这里复述一下:
x 是一个类似参数的变量,n 是自变量。
当 x = 1 时,得到一个 f 值;
当 x = 2 时,得到一个 f 值;
当 x = ... 时,得到一个 f 值;
最后,求所有 f 值的和。
现在有了固定 x 为一个确定值的方法,但是想要写出一个类似的当 x 为向量时的方法。
下面分享一下我的思路,不敢保证一定正确。
n = 1:10000;
x = 1:100;
X = repmat(n, length(x), 1);
Z = X .* x';
Y = sin(Z) ./ n;
f = sum(Y, 'all');
结果为:
最后,将代码合并一下,写成你期望的样子:
n = 1:10000;
x = 1:100;
f = sum(sin(repmat(n, length(x), 1) .* x') ./ n, 'all');
不需要的,这个是个级数求和的形式,先用sym的情况
syms k integer positive
syms x real
assume(x>0 & x<2*pi)
f = sin(k*x)/k;
p = symsum(f, k, 1, inf) % 得到无穷级数求和
f = matlabFunction(p); % 构成关于x的函数
fplot(f, [0, 2*pi])