本文转自:http://blog.sina.com.cn/s/blog_5f234d4701012p64.html
科学计算:Python VS. MATLAB(3)----线性代数基础
按:在介绍工具之前先对理论基础进行必要的回顾是很必要的。没有理论的基础,讲再多的应用都是空中楼阁。本文主要设涉及线性代数和矩阵论的基本内容。先回顾这部分理论基础,然后给出MATLAB,继而给出Python的处理。个人感觉,因为Python是面向对象的,操纵起来会更接近人的正常思维;而MATLAB大多是以函数实现的,是向对象施加的一个操作。比如,A是一个矩阵,它有一个属性attr。用Python更可能是A.attr,而用MATLAB更可能是attr(A)。
一、线形代数理论基础
线形代数(linear algebra)是数学的一个分支,研究矩阵理论、向量空间、线性变换和有限维线形方程组等内容。
比较重要的思想有:1.线性代数的核心内容是研究有限维线性空间的结构和线性空间的线性变换;2.向量的线性相关性是研究线性空间结构与线性变换理论的基础;3.矩阵是有限维线性空间的线性变换的表示形式;4.线性方程组的求解问题是n维空间到m维空间线性映射求核和全体原象的问题;5.行列式是研究这些问题的一个工具。
主要内容有:1.矩阵运算:加减乘除、转置、逆矩阵、行列式、矩阵的幂、伴随矩阵;2.矩阵分块、秩、迹;3.解方程;4.线性相关;5.向量空间;6.特征值和特征向量;7.对称、相似;8.二次标准型;9.线性空间和基变换;10.正交空间;11.矩阵对角化;13.矩阵分解;14.重要数字特征。
二、MATLAB的处理
1.建立矩阵
MATLAB中,矩阵是默认的数据类型。它把向量看做1×N或者N×1的矩阵。
%建立了一个行向量,不同元素之间使用空格或者逗号分开都是可以的。
A=[1,2,3] 或者 A=[1 2 3]
%建立一个矩阵,使用分号隔开不同的行。
A=[1,2,3;4,5,6]
%那么,建立一个列向量就好办了。每行一个元素,分号分开即可。当然也可以使用行向量的转置(一个撇号表示转置)。
A=[1;2;3] 或者 A=[1,2,3]’
MATLAB内置了很多特殊的矩阵生成函数,建立特殊矩阵十分方便。
i)第一组用来生成特殊规则的矩阵。如全零、全一、随机、等步长等形式。
X=zeros(m,n)
%生成一个m*n的全0矩阵。同理,ones(m,n)生成一个全1矩阵;eye(m,n)生成一个单位阵。它们的重要作用在于预先分配矩阵空间,所以,在预知矩阵规模但是不知道矩阵具体数据的情况下,先用这几个函数生成一个矩阵,对提高运算速度十分有用。
X=rand(m,n)
%生成一个平均分布的随机矩阵,数值区间[0,1]。同理,randn(m,n)生成一个服从正态分布的随机矩阵。注意,这些所谓的随机实际上都是伪随机。
v=linspace(a,b,n)
%产生线性空间矢量。a和b分别是起点和终点,n是本区间内的点数,默认100个点。同理