假设 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)
嗯,您已经为 sin
和 exp
创建了数组,分别存储在 y
和 z
中。这些数组是在与 x
相同的域中创建的。您只需要按元素将两个数组相乘并绘制图形。就这么简单:
plot(x, z.*y);
这里,.*
代表逐元素乘法。如果您要执行 z*y
,MATLAB 将其解释为 矩阵乘法 ,其中 z
和 y
被解释为矩阵。这显然不是你想要的。
但是,您的 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)
部分,它不太正确。
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)
嗯,您已经为 sin
和 exp
创建了数组,分别存储在 y
和 z
中。这些数组是在与 x
相同的域中创建的。您只需要按元素将两个数组相乘并绘制图形。就这么简单:
plot(x, z.*y);
这里,.*
代表逐元素乘法。如果您要执行 z*y
,MATLAB 将其解释为 矩阵乘法 ,其中 z
和 y
被解释为矩阵。这显然不是你想要的。
但是,您的 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)
部分,它不太正确。