链表和矩阵.docx
- 文档编号:17329344
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:16
- 大小:38.25KB
链表和矩阵.docx
《链表和矩阵.docx》由会员分享,可在线阅读,更多相关《链表和矩阵.docx(16页珍藏版)》请在冰点文库上搜索。
链表和矩阵
第三章链表和矩阵
链表和矩阵是MMP的两个基本数据类型,本章将分别就这两个主题介绍相关的基本运算指令。
§3.1链表的运算
1.append
调用:
append(list,atom)
参数:
list是一个表
atom是一个元素
说明:
若atom不在list中,则将atom加到list的最后,形成新表返回,
否则,返回原表。
示例:
>append([1,2,3,4],5);
[1,2,3,4,5]
>append([1,2,3,4],4);
[1,2,3,4]
>append([a,b,c,d],[e,f]);
[a,b,c,d,[e,f]]
2.insert
调用:
insert(list,atom,pos)
参数:
list是一个表
atom是一个元素
pos是一个正整数
说明:
将元素atom插入到表list的第pos个元素之前,形成新表返回。
若表list的长度为n,则1<=pos<=n+1。
示例:
>insert([1,2,3,4],a,1);
[a,1,2,3,4]
>insert([a,b,c,d],[c,d],2);
[a,[c,d],b,c,d]
>insert([1,2,3,4],a,5);
[1,2,3,4,a]
3.merge
调用:
merge(l1,l2)
参数:
l1是一个表
l2是一个表
说明:
链表的合并,即把链表l2的结点直接插入链表l1的表尾,形成新表返回。
示例:
>merge([1,2,3],[3,4,5]);
[1,2,3,3,4,5]
4.first
调用:
first(list)
参数:
list是一个表
说明:
返回表list中的第一个元素
示例:
>first([10,20,30,40]);
10
5.last
调用:
last(list)
参数:
list是一个表
说明:
返回表list中的最后一个元素
示例:
>last([10,20,30,40]);
40
6.rest
调用:
rest(list)
参数:
list是一个表
说明:
返回将表list中的第一个元素去掉后形成的表
示例:
>rest([1,2,3,4]);
[2,3,4]
>rest([a]);
[]
7.part
调用:
part(list,pos)
参数:
list是一个表
pos是一个正整数
说明:
返回表list中的第pos个元素,pos从1开始计数。
示例:
>part([10,20,30,40],3);
30
>part([a,b,c,[e,f]],4);
[e,f]
8.find
调用:
find(atom,list)
参数:
atom是一个元素
list是一个表
说明:
检查元素atom是否在表list中。
如果atom在list中,返回它在list中第一次出现的位置(索引值);否则返回0。
示例:
>find(a,[1,2,a,b,c,a]);
3
>find([a,b],[1,2,[a,b],3,[a,b]]);
3
>find(a,[1,2,3,4]);
0
9.replace
调用:
replace(list,atom,pos)
参数:
list是一个表
atom是一个元素
pos是一个正整数
说明:
将表list的第pos个元素替换为元素atom,形成新表返回。
示例:
>replace([1,2,3,4],a,1);
[a,2,3,4]
>replace([a,b,c,d],[c,d],2);
[a,[c,d],c,d]
.equal
调用:
equal(list1,list2)
参数:
list1是一个表
list2是一个表
说明:
判断表list1和表list2是否相等,相等则返回1,不相等则返回0。
示例:
>equal([1,2,3,4],[1,2,3,4]);
1
>equal([a,b,c,d],[c,d,a,b]);
0
.union
调用:
union(list1,list2)
参数:
list1是一个表
list2是一个表
说明:
返回表list1和表list2的并集
示例:
>union([1,2,3,4],[2,3,6,7]);
[1,2,3,4,6,7]
.intersect
调用:
intersect(list1,list2)
参数:
list1是一个表
list2是一个表
说明:
返回表list1和表list2的交集
示例:
>intersect([1,2,3,4],[2,3,6,7]);
[2,3]
.minus
调用:
minus(list1,list2)
参数:
list1是一个表
list2是一个表
说明:
返回表list1和表list2的差集
示例:
>minus([1,2,3,4],[2,3,6,7]);
[1,4]
14.inverse
调用:
inverse(list)
参数:
list是一个表
说明:
返回表list的逆表
示例:
>inverse([1,2,3,4]);
[4,3,2,1]
15.remove
调用:
remove(list,pos)
参数:
list是一个表
pos是一个正整数
说明:
删除表list的第pos个元素,形成新表返回。
示例:
>remove([10,20,30,40],3);
[10,20,40]
>remove([10,20,30,40],0);
[1,2,3,4]
16.issub
调用:
issub(list1,list2)
参数:
list1是一个表
list2是一个表
说明:
如果list1是list2的子表,则返回1,否则返回0。
list1=list2时,返回1。
示例:
>issub([1,2,3],[1,2,3,4,5,6,7]);
1
>issub([1,2,3],[1,2,3]);
1
>issub([1,2,3],[2,3,4]);
0
§3.2矩阵的运算
1.matrix
调用:
matrix(v,h,l)
参数:
v是一个整数
h是一个整数
l是一个数据列表
说明:
这个函数是用来构造一个v行h列的矩阵,矩阵中的元素由列表l给出。
如果列表l给出的元素个数不足v*h个,那么缺少的元素个数将会用0来填充;
如果列表l给出的元素个数超过了v*h个,则会提示出现错误。
返回值是这个构造好的矩阵。
示例:
>a:
=matrix(3,3,[1,2,3,4,5,6,7,8,9]);(下同)
matrix(1,2,3;4,5,6;7,8,9)
2.det
调用:
det(a)
参数:
a是一个矩阵
说明:
计算一个矩阵的行列式。
返回值是某一种特定的数据类型,根据a的数据类型不同而不同。
示例:
>det(a);
0
>b:
=matrix(3,3,[x,y,z,2*x,y,0,0,2*x,y]);
>det(b);
4*z*x^2-y^2*x
>c:
=matrix(3,3,[x^2,y-3,z^2*x-y^2,12,x^5*y,y*z,3*z,0,y^4*x]);
>det(c);
y^5*x^8-3*z^3*y*x^6+3*z*y^3*x^5-12*y^5*x+36*y^4*x+3*z^2*y^2-
9*z^2*y
>d:
=matrix(4,4,[32,42,11,32,121,18,43,6,4,12,17,62,3,42,12,44]);
>det(d);
1983024
3.tran
调用:
tran(a)
参数:
a是一个矩阵
说明:
计算一个矩阵的转置,所谓一个矩阵的转置,就是让矩阵中的元素行列交换,
即a[i][j]变换成a[j][i]。
返回值是一个矩阵。
示例:
>tran(a);
matrix(1,4,7;2,5,8;3,6,9)
4.coldim
调用:
coldim(a)
参数:
a是一个矩阵
说明:
计算一个矩阵的列数。
返回值是一个整数。
示例:
>coldim(a);
3
5.rowdim
调用:
rowdim(a)
参数:
a是一个矩阵
说明:
计算一个矩阵的行数。
返回值是一个整数。
示例:
>rowdim(a);
3
6.submatrix
调用:
submatrix(a,v1,v2,h1,h2)
参数:
a是一个矩阵
v1是一个整数
v2是一个整数
h1是一个整数
h2是一个整数
说明:
计算一个矩阵的子矩阵,v1,v2是行的范围,h1,h2是列的范围。
返回值是一个矩阵。
示例:
>submatrix(a,1,2,1,2);
matrix(1,2;3,4)
7.submatrix
调用:
submatrix(a,l1,l2)
参数:
a是一个矩阵
l1是一个列表
l2是一个列表
说明:
计算一个矩阵的子矩阵,l1是行的列表,l2是列的列表,子矩阵中(i,j)上的元素
是a(l1[i],l2[j])。
返回值是一个矩阵。
示例:
>submatrix(a,[3,1,2],[1,2]);
matrix(7,8;1,2;4,5)
8.submatrix
调用:
submatrix(a,v1,v2,l)
参数:
a是一个矩阵
v1是一个整数
v2是一个整数
l是一个列表
说明:
计算一个矩阵的子矩阵,v1,v2是行的范围,l是列的列表。
返回值是一个矩阵。
示例:
>submatrix(a,2,3,[3,1]);
matrix(6,4;9,7)
9.submatrix
调用:
submatrix(a,l,h1,h2)
参数:
a是一个矩阵
l是一个列表
h1是一个整数
h2是一个整数
说明:
计算一个矩阵的子矩阵,l是行的列表,h1,h2是列的范围。
返回值是一个矩阵。
示例:
>submatrix(a,[3,1,2],1,2);
matrix(7,8;1,2;4,5)
10.swaprow
调用:
swaprow(a,v1,v2)
参数:
a是一个矩阵
v1是一个整数`
v2是一个整数
说明:
把矩阵a中第v1行和v2行的元素进行交换。
返回值是一个矩阵。
示例:
>swaprow(a,1,2);
matrix(4,5,6;1,2,3;7,8,9);
11.swapcol
调用:
swapcol(a,h1,h2)
参数:
a是一个矩阵
h1是一个整数
h2是一个整数
说明:
把矩阵a中第h1列和h2列的元素进行交换。
返回值是一个矩阵。
示例:
>swapcol(a,1,2);
matrix(2,1,3;5,4,6;8,7,9);
12.row
调用:
row(a,b)
参数:
a是一个矩阵
b是一个整数
说明:
求一个矩阵a的第b行,并构造成一个子矩阵。
返回值是一个矩阵。
示例:
>row(a,2);
matrix(4,5,6)
13.row
调用:
row(a,b,c)
参数:
a是一个矩阵
b是一个整数
c是一个整数
说明:
求一个矩阵a的以b,c为范围的那些行。
返回值是一个矩阵。
示例:
>row(a,1,2);
matrix(1,2,3;4,5,6)
14.col
调用:
col(a,b)
参数:
a是一个矩阵
b是一个整数
说明:
求一个矩阵a的第b列。
返回值是一个矩阵。
示例:
>col(a,3);
matrix(3;6;9)
15.col
调用:
col(a,b,c)
参数:
a是一个矩阵
b是一个整数
c是一个整数
说明:
求一个矩阵a的以b,c为范围的那些列。
示例:
>col(a,2,3);
matrix(2,3;5,6;8,9)
16.lsolve
调用:
lsolve(ps,var)
参数:
ps是一个多项式列表
var是一个变量列表
说明:
求解以多项式列表ps和变量列表var所定义的线性方程组的根。
返回值是一个解的列表。
示例:
为了求解线性方程组:
即:
我们可以按照下面的方法求解:
>a:
=[3*x+2*y-7*z-5,4*x+6*y-18*z+33];b:
=[x,y,z];lsolve(a,b);
[(3*z+48)/(5),(26*z-119)/(10),z]
这里表示:
,z是自由变量。
17.lsolve_m
调用:
lsolve_m(a)
参数:
a是一个矩阵
说明:
把这个矩阵当作一个线性方程组的增广矩阵,然后求解这个线性方程组。
返回值是一个列表,显示所得到的解。
示例:
为了求解线性方程组:
我们可以得到这个线性方程组的增广矩阵为:
因此我们可以按照下面的方法求解:
>a:
=matrix(4,5,[3,-5,7,1,1,2,-1,4,3,1,1,5,5,6,1,-2,0,3,7,1]);
>lsolve_m(a);
x[1]=11/57
x[2]=-9/133
x[3]=-1/57
x[4]=82/399
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 矩阵