资源描述
实验5 集合和向量的基本运算
一、实验目的
学会用MATLAB求两个集合的交集、差集、抑或集、并集,和向量的点集、叉集,以及在空间解析几何中的简单应用。
二、实验内容与要求
1、两个集合的交集
格式:c=intersect(a,b) %返回向量a,b的公共部分,即c=ab。
c=intersect(A,B,’rows’) %A,B为相同列数的矩阵,返回元素相同的行。
[c,ia,ib]= intersect(a,b) %c为的a,b公共元素,ia表示公共元素在a中的位置,ib表示公共元素在b中的位置。
【例1.38】
>> A=[1,2,3,4;1,2,4,6;6,7,1,4];
>> B=[1,2,3,8;1,1,4,6;6,7,1,4];
>> C=intersect(A,B,'rows')
C =
6 7 1 4
>> A=[1,9,6,20];B=[1,2,3,4,6,10,20];
>> [c,ia,ib]=intersect(A,B)
c =
1 6 20
ia =
1 3 4
ib =
1 5 7
2、两个集合的差集
格式:c=setdiff(a,b) %返回属于a但不属于b的不同元素的集合,即c=a-b.
c=setdiff(A,B,’rows’) %返回属于A但不属于B的不同行。
[c,i]=setdiff(….) %c与前面一致,i表示c中元素在a中的位置。
【例1.39】
>> A=[1,7,9,6,20];B=[1,2,3,4,6,10,20];
>> c=setdiff(A,B)
c =
7 9
【例1.40】
>> A=[1,2,3,4;1,2,4,6;6,7,1,4];
>> B=[1,2,3,8;1,1,4,6;6,7,1,4];
>> c=setdiff(A,B,'rows')
c =
1 2 3 4
1 2 4 6
3、两个集合交集的异或
格式:c=setxor(a,b) %返回集合a,b交集的非。
c=setxor(A,B,’rows’) %返回矩阵A,B交集的非,A,B有相同列数。
[x,ia,ib]=setxor(….) %ia,ib表示中元素分别在a(或A),b(或B)中的位置。
【例1.41】
>> A=[1,2,3,4];
>> B=[2,4,5,8];
>> C=setxor(A,B)
C =
1 3 5 8
【例1.42】
>> A=[1,2,3,4;1,2,4,6;6,7,1,4];
>> B=[1,2,3,8;1,1,4,6;6,7,1,4];
>> [C,ia,ib]=setxor(A,B,'rows')
C =
1 1 4 6
1 2 3 4
1 2 3 8
1 2 4 6
ia =
1
2
ib =
2
1
4、两个集合的并集
格式:c=union(a,b) %返回a,b的并集,即c=ab
c=union(A,B,’rows’) %返回矩阵A,B不同行向量构成的大矩阵,其中相同行向量只取其一。
[c,ia,ib]=union(…) %ia,ib分别表示c中行向量在原矩阵(向量)中的位置。
【例1.43】
>> A=[1,2,3,4];
>> B=[2,4,5,8];
>> c=union(A,B)
则结果为:
c =
1 2 3 4 5 8
【例1.44】
>> A=[1,2,3,4;1,2,4,6];
>> B=[1,2,3,8;1,1,4,6];
>> [c,ia,ib]=union(A,B,'rows')
c =
1 1 4 6
1 2 3 4
1 2 3 8
1 2 4 6
ia =
1
2
ib =
2
1
5、向量的点积
格式:C=dot(A,B) %A,B为向量且长度相等,则返回向量A与B的点积。若为矩
则它们必须有相同的维数。
C=dot(A,B,dim) %在dim维数中给出A与B的点积。
【例1.45】
>>A=[1,2,3]; B=[3,4,5];
>>dot(A,B); %计算向量A,B的标积,结果为26
还可用另一种算法:sum(A.*B).
6、向量的叉积
在数学上,两向量叉积是一个相交向量的交点且垂直两向量的平面的向量,在MATLAB中,
用函数cross实现。
格式:C=cross(A,B) %A,B为向量,则返回A与B的叉积,即C=AB、A、B,3个元素的向量;若为矩阵,则返回一个3n矩阵,其中列是A与B对应列的叉积,A,B都是3n矩阵。
C=cross(A,B,dim) %在dim维数中给出向量A,B的叉积,必须有相同的维数,size(A,dim),size(B,dim)必须是3。
【例1.46】
>>A=[1,2,3]; B=[3,4,5];
>>cross(A,B); %计算向量A,B的叉积,结果为:-2 4 -2
7、向量的混合积
混合积由以上两个函数来实现.
【例1.47】 计算向量a=(1,2,3),b=(4,5,6)和c=(-3,6,-3)的混合积a·(b×c).
解:
>> a=[1,2,3];b=[4,5,6];c=[-3,6,-3];
>> x=dot(a,cross(b,c))
结果显示:
x =
54
注意:先叉积后点积,顺序不可颠倒.
8.向量的长度
由定义,向量的长度,所以,命令
>> sqrt(dot(A,A)) %或sqrt(sum(A.*A))
可求出向量的长度.
9.向量的方向角
由定义,向量的方向余弦为,,所以:
L=sqrt(dot(A,A)); %计算向量A的长度
alpha=acos(A(1)/L); %计算向量A与x轴的夹角
beta=acos(A(2)/L); %计算向量A与y轴的夹角
gamma=acos(A(3)/L); %计算向量A与z轴的夹角
问题 1.18:若向量,求它的方向角,并验证.
10.向量的夹角
向量A,B间的夹角,由可得,所以:
L1=sqrt(dot(A,A)); %计算向量A的长度
L2=sqrt(dot(B,B)); %计算向量B的长度
c=dot(A,B)/L1/L2; %计算向量A,B的点积
alpha=acos(c) %计算向量A,B间夹角
问题1.19:
判断两直线,是否共面?求它们之间的夹角.令, , ,若,则共面,它们之间的夹角就等于向量间的夹角.
11.点与点之间的距离
由两点间距离公式,所以:
>>s= A-B;
>>L=sqrt(dot(s,s)) %计算两点A,B间的距离
12、点与与平面的距离
平面方程用表示,点用表示,则点P到平面的距离为。由公式
可以得到:
>>d1=dot(f,[p,1]); %计算Aa+Bb+Cc+D
>>d2=sqrt(dot(f(1:3),f(1:3))); %计算
>>d=abs(d1/d2) %d为点P到平面f的距离
问题1.20:求点P(-2,–3,1)到平面2x-y+2z+1=0的距离。
13、点与直线的距离
将直线表示为点和向量,点到直线的距离为,由公式
得到:
>>vs=p-vp; %计算
>>d1=sqrt(dot(v,v)); %计算
>>c=cross(v,vs); %计算
>>d2=sqrt(dot(c,c)); %计算
>>d=d2/d1 %计算点p到直线的距离d
问题1.21:已知异面直线和= =,如何求它们之间的距离?令,根据
分步来求。
三、练习与思考
①已知向量,求它的长度、方向角。
②又已知向量,求向量之间点积、叉积、夹角。
③求点到平面的距离。
④求异面直线和= 之间的距离
⑤已知向量,若,则向量共线,若或,则向量共面,为什么?若,, 试判断与,与,与之间是否共线?之间是否共面?
⑥求点关于直线的垂足和对称点。
参考答案:令,表示垂足,表示对称点。
编文件名fp.m为的M函数文件如下:
%这是一个求点关于直线对称点及垂足的程序
%求点指向点P的向量
%求向量V的长度
%求在V上投影向量
%求垂足指向点P的向量
%求垂足的坐标
%求对称点的坐标
在命令窗口输入:
>>
结果为:
=
1.1493 -4.9851 1.8507
=
0.2985 -5.9701 -1.2985
6
展开阅读全文