内部矩阵尺寸必须一致吗?

时间:2014-09-11 02:20:15

标签: matlab

这是我的第一个matlab脚本,所以这个问题可能看起来基本而且非常明显,但我现在有点陷入困境。

我有两行的matlab脚本:

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

我要离开Mathworks上的Create 2-D Line Graph教程。我想在0到4pi的范围内绘制f(x)= e ^( - x)sin(x),但我得到一个内部矩阵维度必须在第二行上达成一致。我不知道发生了什么,因为我不认为我现在正在制作任何矩阵。任何帮助,将不胜感激!我缺少哪些语法简单的东西?谢谢!

2 个答案:

答案 0 :(得分:13)

这是一个非常简单的错误要解决,我承认这是大多数MATLAB程序员第一次面对MATLAB时所面临的常见错误。具体来说,当你这样做时:

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

此操作假设您将执行矩阵乘法。您实际想要做的是逐个元素操作。您希望exp(-x)中的点与sin(x)中的相应元素相乘。 @ellieadam提供了一些很好的链接供您查看这些操作是什么,但是如果您想要逐个元素操作,则需要添加.之前乘法运算符。因此,您需要这样做:

y = exp(-x) .* sin(x); %// Note the dot!

此行现在应该有效。


作为奖励,这是一个简单的例子。假设我有这两个矩阵:

A = [1 2;
     3 4];

B = [4 3;
     2 1];

通过在MATLAB中执行A * B,您得到:

>> A * B

ans =

     8     5
    20    13

请注意,这将执行矩阵乘法。通过A .* B,这就是我得到的:

>> A .* B

ans =

     4     6
     6     4

与此声明的不同之处在于A中的一个元素乘以B中的对应元素A的第一行和第一列乘以第一行B的第一列,输出矩阵中的相同位置是存储此结果的位置。您可以跟随输出矩阵中的其他元素,它会给您相同的行为。还有其他逐个元素的操作,例如除法和取幂。加法和减法本质上是逐个元素的,因为在矩阵上执行这些操作是以这种方式定义的。

要添加到@ ellieadam的帖子,请查看此MathWorks文章,其中专门向您展示了矩阵和向量的各种操作,包括逐个元素的操作:

http://www.mathworks.com/help/matlab/matlab_prog/array-vs-matrix-operations.html

答案 1 :(得分:4)

根据您的代码,您的x变量是一个向量。因此,当您将术语exp(-x)乘以sin(x)时,您实际上将两个相同大小的向量相乘并且在数学上不正确。这就是你得到错误的原因。

为了执行可接受的操作(两个矢量的值相乘,但逐个元素),您需要将其更改为以下格式:

x = linspace(0,4*pi,100);
y = exp(-x) .* sin(x);

.*按元素乘法进行元素处理,只是为了您自己的记录,以相同的方式./逐元素进行元素分割。

我希望它有所帮助。