SAS的IML过程等在高等代数中的应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SAS的IML过程等在高等代数中的应用
1.SAS/IML模块
1.1SAS/IML模块简介
IML是Interactive Matrix Language 的缩写,即交互式矩阵语言,也是一种程序设计语言,它提供了条件转移、循环等流程控制语句,还提供了用户自定义函数和子程序的功能,它是用户研究新算法或解决系统中没有现成方法可用的问题的工具。
1.2启动和退出SAS/IML模块
启动语句为:Proc IML;
退出语句为:Quit
2.矩阵变量的建立
2.1一般方式建立矩阵
格式:矩阵变量名=矩阵初值;
2.2通过赋值建立矩阵变量
格式:矩阵变量名=IML表达式;
2.3 行向量的特殊产生方式
格式1:矩阵变量名=起始值:结束值;
说明:矩阵的第一个元素值为起始值,起始值小于结束值时,矩阵元素依次增加1,直到最后一个元素的值小于等于结束值,反之依次减少1,直到最后一个元素的值大于等于结束值
格式2:矩阵变量名=do(起始值,结束值,步长);
例子见附录程序SAS2.1
3.矩阵运算
3.1矩阵的算术运算
除以通常意义下的矩阵相加、减和乘运算外,SAS/IML还定义了矩阵的除、乘方、对应元
SAS3.1
3.2矩阵的比较运算
矩阵的比较运算是指比较矩阵相应元素大小关系,结果产生一个与相比较矩阵同阶的矩阵。若比较关系成立,则结果矩阵中的相应元素为1,否则为0。
SAS3.2
3.3矩阵的合并与拆分
将两个满足一定条件的矩阵按照一定规则合成一个矩阵的过程为矩阵的合并,矩阵合并有水平合并与垂直合并之分。从一个矩阵中分出一个阶数较小的矩阵的过程称为矩阵的拆分。
SAS3.3
3.4其它常用矩阵运算
SAS3.4
4.综合应用
4.1用克拉默法则解线性方程组
解线性方程组⎪⎪
⎩⎪⎪
⎨⎧=+⋯⋯+⋯⋯⋯⋯⋯⋯⋯⋯=+⋯⋯+=+⋯⋯+n n bn n n n n n n b
x a x a x a b x a x a x a b x a x a x a 221
12
22221211
1212111
设矩阵X=()T
n x x x ⋯⋯21,,Y=()
T
n b b b ⋯⋯21,,A=⎪⎪⎪⎪
⎪⎭
⎫
⎝⎛⋯
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯nn n n n n a a a a a a a a a 2
1
2222111211
用矩阵表示方程组Y=AX
根据克拉默法则若det(A) ≠0,则方程组有解。 利用SAS/IML 解方程组⎪⎪⎩⎪⎪
⎨⎧=+-+-=+-=--=+-+0
6745229
6328
524321
432
4214321x x x x x x x x x x x x x x
运行SAS 程序SAS4.1
结果:
即31=x ,42-=x ,13-=x ,14=x
4.2判定矩阵是否正定
判定原理:若二次型矩阵是正定的充要条件是:矩阵所有顺序主子式大于都0。 判断矩阵A=是否正定矩阵⎪⎪⎪
⎭
⎫
⎝
⎛----52
4212
425
运行程序SAS4.2.
结果:
附录
SAS2.1 proc iml ;
/*******矩阵定义********/
A={1 2 3,4 5 6, 7 8 9}; /*一般方式建立矩阵*/ B={9 8 7,6 5 4, 3 2 1}; C=A+B;
D=1:9; /*行向量的特殊产生方式*/ E=do(-1,1,0.5); print A B C D E; /*******显示矩阵********/ quit ; SAS3.1
proc iml ;
/*******矩阵定义********/
A={1 2 3,4 5 6, 7 8 9}; /*一般方式建立矩阵*/ B={9 8 7,6 5 4, 3 2 1}; C1=A>B; /*******矩阵加**********/ C2=A-B; /*******矩阵减**********/ C3=A*B; /*******矩阵乘**********/
C4=A#B; /*******矩阵对应元素相乘**********/
C5=A/B;
/*******矩阵对应元素相除**********/
C6=t(A); /*******矩阵转置**********/
print c1 c2 c3 c4 c5 c6; /*******显示矩阵********/ quit ;
SAS3.2
proc iml;
/*******矩阵定义********/
A={123,456, 789}; /*一般方式建立矩阵*/
B={987,654, 321};
C1=A>B; /*******大于**********/
C2=A>=B; /*******大于等于**********/
C3=A
C4=A<=B; /*******小于等于**********/
C5=(A=B); /*******等于**********/
C6=A^=B; /*******不等于**********/
print c1 c2 c3 c4 c5 c6; /*******显示矩阵********/
quit;
SAS3.3
proc iml;
/*******矩阵定义********/
A={123,456, 789}; /*一般方式建立矩阵*/
B={987,654, 321};
C1=A||B; /*******右拼接**********/
C2=A//B; /*******下拼接**********/
C3=A[2,3]; /*******矩阵第2行,第3列元素*********/
C4=A[2,]; /*******矩阵第2行所有元素**********/
C5=A[1:2,1:3]; /*******第1、2行,1、2、3列元素**********/
C6=A[+,]; /*******各列元素的和**********/
print c1 c2 c3 c4 c5 c6; /*******显示矩阵********/
quit;
SAS3.4
proc iml;
A={12,34};
C1=I(5); /***产生一个n阶单位阵**/
C2=J(3,4,5); /***产生一个元素全为k的m×n阶矩阵**/
C3=Diag(A); /***以向量C的各元素为主对角线元素(顺序不变)的对角矩阵\**/ C4=Trace(A); /***矩阵A的迹(主对角线元素之和)**/
C5=A**(-1); /***矩阵A的逆矩阵,即A-1**/
C6=A`; /***矩阵A的转置(`为右斜撇,一般为键盘的左上方)**/
C7=Det(A); /***矩阵A的行列式值**/
C8=Eigval(A); /***矩阵A的全部特征值 **/