假设 x、y 和 z 是 Matlab 数组,在区间 [0. 4pi]

Assume that x, y, and z are Matlab arrays, plot the function e^(-x)sin(x) across the interval [0. 4pi]

x=linspace(0, 2*pi, 100);
y=sin(x);
z=exp(-x);

鉴于 x、y 和 z 已经初始化,我如何编写一个函数来绘制 exp(-x)sin(x) 在区间 [0, 4pi] 上而无需额外调用 sin 或 exp?只需要一些入门帮助。

感谢@Rayryeng 让我入门。我相信以下命令更符合问题的规范。

plot(x+x, z.*z.*y)

嗯,您已经为 sinexp 创建了数组,分别存储在 yz 中。这些数组是在与 x 相同的域中创建的。您只需要按元素将两个数组相乘并绘制图形。就这么简单:

plot(x, z.*y);

这里,.*代表逐元素乘法。如果您要执行 z*y,MATLAB 将其解释为 矩阵乘法 ,其中 zy 被解释为矩阵。这显然不是你想要的。

但是,您的 x 数组只包含从 0 到 2*pi 的点。如果你想把它从 0 绘制到 4*pi,你必须将你的调用修改为 linspace:

x=linspace(0, 4*pi, 100); %// Change
y=sin(x);
z=exp(-x);
plot(x, z.*y);

现在,x 将包含 0 到 4*pi 之间的 100 个点。有关基本 MATLAB 操作的更多信息,请查看此 link:http://www.mathworks.com/help/matlab/matlab_prog/array-vs-matrix-operations.html。你问的属于数组和矩阵运算的基本领域。

编辑

根据你的问题,我们无法修改 linspace。你做了一些聪明的事情,我们可以简单地将 x 的值缩放 2 或与 x 相加,这样我们的点从 0 到 2*pi 到 0 到 4*pi。此外,如果我们将点缩放 2,这意味着我们输入到函数中的参数也必须缩放 2。因此,我们需要绘制的最终函数是:

y = exp(-2x)*sin(2x)

注意到你的提示,exp(-2x) = exp(-x-x) = exp(-x)exp(-x)。此外,请注意 sin(2x) 执行了一个 compression 2 倍的压缩(感谢 knedlsepp 注意到了我的错误)。由于 sin(x) 的周期性,我们知道元素会在 2*pi 之后重复,所以如果你想转到 4*pi,只需对 y 进行二次采样2 然后将这些相同的元素附加到一个新向量。因此,我们的函数表达式简化为:

y = exp(-x)exp(-x)sin(2x)

这导致了 knedlsepp 提到的答案:

plot(x+x, z.*z.*[y(1:2:end) y(1:2:end)]);

因此,您应该考虑更改您的编辑以匹配此答案。对于代码中的 sin(x) 部分,它不太正确。