Matlab 如何用倍频程绘制3个变量的函数?

Matlab 如何用倍频程绘制3个变量的函数?,matlab,octave,Matlab,Octave,我是新来的八度音阶(和matlab的问题)。我有一个像这样的函数 我想画g(x,0.5,5)表示 这是我在八度音阶中试过的 我定义了一个匿名函数 f=@(n,x,t) 1./n.*log(n.*pi.*t).*sin(n.*pi.*x); 然后是另一个匿名函数 g=@(m,x,t)x.^2+sum(f([1:m],x,t)); 最终定义 x=-1:0.1:1; plot(x,g(5,x,0.5)) 但是我犯了一个错误。这是绘制此函数的正确方法吗?我一定是在犯一个简单的初学者错误?当你调用

我是新来的八度音阶(和matlab的问题)。我有一个像这样的函数

我想画g(x,0.5,5)表示

这是我在八度音阶中试过的

我定义了一个匿名函数

f=@(n,x,t) 1./n.*log(n.*pi.*t).*sin(n.*pi.*x);
然后是另一个匿名函数

g=@(m,x,t)x.^2+sum(f([1:m],x,t));
最终定义

x=-1:0.1:1;
plot(x,g(5,x,0.5))
但是我犯了一个错误。这是绘制此函数的正确方法吗?我一定是在犯一个简单的初学者错误?

当你调用
f(n,x,t)
时,你传递的是
n
的1×5向量和
x
的1×21向量。这些元素具有不同的元素数,因此不能逐元素相乘。但是,您可以重写
f
以适应每个向量,并使用矩阵乘法执行
g
的求和:

f = @(n, x, t) (1./n.*log(n.*pi.*t))*sin(pi.*n(:)*x);
g = @(m, x, t) x.^2 + f(1:m, x, t);
现在,您的绘图将起作用:

x = -1:0.1:1;
plot(x, g(5, x, 0.5));

您正在使用
f(n,x,t)
f(1:5,-1:0.1:1,0.5)
一起使用,即
n
有5个元素,
x
有21个元素,它们不能以任何方式相乘,因此存在错误