Julia:基本线性代数--函数使用方法

# julia1.0需要using LinearAlgebra

在开始讲解之前,我们先建立一个简单的线性系统:
A = rand(3,3)
x = fill(1, (3,1))
b = A * x

**Factorizations:**
1. LU分解
PA = LU
此处P为置换矩阵,L是下三角矩阵(对角线元素为1),U是上三角矩阵
julia使用函数lufact可以获得矩阵A,L,U
Alu = lufact(A)  # 在julia1.0中,Alu = lu(A)
也可以查看Alu的type:typeof(Alu)

查看矩阵P
P = Alu[:P]  # julia1.0使用Alu.P
L = Alu[:L]  # julia1.0使用Alu.L
U = Alu[:U]  # julia1.0使用Alu.U

例如我们可以使用LU分解矩阵求解原线性系统
A\b的值与Alu\b的值相同
det(A)约等于det(Alu)

2. QR分解
A = QR. 此处Q是酉矩阵/正交矩阵
Aqr = qrfact(A)  # in julia 1.0, qr(A)
Q = Aqr[:Q]  # in julia 1.0, Q = Aqr.Q
R = Aqr[:R]  # in julia 1.0, R = Aqr.R

3. 特征值分解: Eigendecompositions
Asym = copy(A)
AsymEig = eigfact(Asym)  # in julia 1.0, eig(Asym)
特征值与特征向量可以通过下面的命令获得
AsymEig[:values]  # in julia 1.0, AsymEig.values
AsymEig[:vectors]  # in julia 1.0, AsymEig.vectors

# 这里要注意一下:inv(AsymEig)*Asym = I

4. 特殊矩阵构造
在线性代数中,矩阵构造非常重要。
n = 1000
A = randn(n,n)  # randn:生成正太随机数,均值为0,标准差为1.
Asym = A +A'  # A+A'是对称矩阵
issymmetric(Asym)  # 返回值true

但有时会产生浮点错误
Asym_noisy = copy(Asym)
Asym_noisy[1,2] += eps()
issymmetric(Asym_noisy)  # 返回值false

我们还可以显式地声明下面地矩阵:Diagonal(对角矩阵),Symmetric(对称矩阵),Hermitian(埃尔米特矩阵)
Tridiagonal(三对角矩阵),SymTridiagonal(对称三角矩阵)[SymTridiagonal只能作用于对称矩阵]
n = 6
A = randn(n,n)
B = Symmetric(A)
B = Hermitian(A)
B = Tridiagonal(A)
B = SymTridiagonal(A+A')

# 接下来我们看一下求解Asym矩阵和Asym_noisy矩阵特征值的时间
@time eigvals(Asym); eigmax(Asym)  # 求取最大特征值
@time eigvals(Asym_noisy);
LowerTriangular(A)  # 返回矩阵A的下三角矩阵
UpperTriangular(A)  # 返回矩阵A的上三角矩阵
Diagonal(A)  # 返回矩阵A的对角矩阵

# 这里注意一下,求取特征值和特征向量有两种方法
eigvals(A) = eigfact(A)[:values]
eigvecs(A) = eigfact(A)[:vectors]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值