matlab中如果方程有累加要如何不用for循环写

img

原式如图所示,如果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万个数据测试单线程与多线程的速度,其实这速度还是可以接受的!

img

我不知道是否理解到题目的意思了。
这里复述一下:
x 是一个类似参数的变量,n 是自变量。
当 x = 1 时,得到一个 f 值;
当 x = 2 时,得到一个 f 值;
当 x = ... 时,得到一个 f 值;
最后,求所有 f 值的和。

现在有了固定 x 为一个确定值的方法,但是想要写出一个类似的当 x 为向量时的方法。
下面分享一下我的思路,不敢保证一定正确。

  • 尝试将 n 进行扩展,得到一个矩阵。
  • 计算 nx 的值,采用元素乘以元素的方法,仍然是同维度矩阵。
  • 计算 sin(nx) 的值,仍旧为矩阵。
  • sin(nx) / n,采用元素除以元素的方法,仍然是同维度矩阵。
  • 矩阵所有元素求和。
n = 1:10000;
x = 1:100;
X = repmat(n, length(x), 1);
Z = X .* x';
Y = sin(Z) ./ n;
f = sum(Y, 'all');

结果为:

img

最后,将代码合并一下,写成你期望的样子:

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])

img