先说结论:叉乘用于《线性代数》中的矩阵运算,得到的是一个矩阵;点乘用于《高等数学》中的数值/数字运算,得到的是一个数。注意运用就是冒号表达式在高等数学计算中的运用。
下面具体介绍。
叉乘和点乘的具体定义和应用,在各种搜索引擎中都是可以查询到,在这里不再过多的赘述。这里着重介绍的是两者之间的区别和应用。
下面先看看两个例子:
创建两个3×3的两个向量A、B,具体如下:
A = B =
1 2 3 1 2 3
4 5 6 1 2 3
7 8 9 1 2 3
叉乘运算: 点乘运算:
A*B= A.*B=
6 12 18 1 4 9
15 30 45 4 10 18
24 48 72 7 16 27
通过对应位置的对比可以得到:
叉乘结果的元素是是符合线代运算的,是相应行、列的互相作用的结果;点乘的结果是对应位置的乘积,是相对应两个位置的独立作用的结果。由此我们来进行深入分析。
在MATLAB中,严格来说是没有《高等数学》中数字的含义的,只是将一个数字命名为了一个特殊的数组或者是矩阵。在运算中这里非常容易出错。例如运用非常广泛的冒号表达式,其本质上也是一个矩阵。
>> a=1:1:5
a =
1 2 3 4 5
>> whos a
Name Size Bytes Class Attributes
a 1x5 40 double
我们可以通过whos命令来查看它的性质。
但是,在MATLAB中有很大一部分的计算是在将数组或者矩阵中的元素进行标量化运用。如果说,我们在运用的过程中,在这里不注意的话,MATLAB会报错,得不到结果。举例如下:
>> x=linspace(0,2*pi,100); %效果等同于x=0:2*pi:100
>> y=sin(x);
>> plot(x,y)
>> title('sin函数图像')
得到的结果如下图:
但是如果改变成下面的函数:
>> y1=sin(x)*cos(x);
plot(x,y1)
title('sin*cos函数图像')
会发现无法执行,MATLAB返回下面的建议:
错误使用 *
用于矩阵乘法的维度不正确。请检查并确保第一个矩阵中的列数与第二个矩阵中的行数匹配。要执行按元素相乘,请使用 '.*'
改变为:y1=sin(x).*cos(x)后得到下面的结果
从这两个例子上就可以发现,在直接运用乘法的时候是无法进行的。最主要的原因就是在定义x的时候,采用的冒号表达式生成的,其本质是一个数组,叫一个矩阵也是一样。对数组或者矩阵中的元素进行标量化运算,必须采用的点乘。其实也是在告诉MARLAB,这个运算我要用《高等数学》的方法,《线性代数》统统闪开。
其实从这个例子,我们可以对点乘运用扩大化,经验总结如下(有误的话,还请见谅):
在采用冒号表达式定义的未知数的状态下,想进行标量形式的运算的话,只有加减不用点运算,除此之外的所有运算全部采用点运算。
部分运算格式如下:
运算法则 | MATLAB中形式变化 |
除法 | a./b |
乘法 | Sin(x).*cos(x) |
次幂 | a.^b=ab |
例1、
在MATLAB中表示为:y=x.^2./(5+x);
例2、
在MATLAB中表述如下:f=sqrt(x.^2+y.^2)+eps;
第一次写文章,如有不妥之处,望请见谅!!!