julia常用矩阵函数_Julia中的基本线性代数

Julia中的基本线性代数

首先让定义一个随机矩阵

A = rand(1:4,3,3)

定义一个向量

x=fill(1.0,(3,)) # =fill(1.0,3)

请注意 许多基本操作与其他语言相同

b = A*x

如果我们有一个超定线性系统(一个“高”矩阵),给出了最小二乘解

Atall = rand(3, 2)

Atall\b

如果我们有一个秩缺陷最小二乘问题,那么最小范数的最小二乘解为

v = rand(3)

rankdef = hcat(v, v)

rankdef\b

当我们有一个“短”矩阵时,Julia也给了我们解决方案

bshort = rand(2)

Ashort = rand(2, 3)

Ashort\bshort

LinearAlgebra库

虽然Julia默认提供了很多线性代数(如上所示),但是有一个标准的库LinearAlgebra可以引入更多相关函数。特别是,它提供了分解和一些结构化矩阵类型。与所有软件包一样using LinearAlgebra

试一试喽

用LinearAlgebra引入分解和特殊矩阵结构。

using LinearAlgebra

A = rand(3, 3)

x = fill(1, (3,))

b = A * x

在Julia中,可以执行LU分解

PA = LU

其中P是置换矩阵,L是下三角,U是上三角,使用lufact。

Julia允许计算LU分解并定义用于存储它的复合分解类型。

Alu = lu(A)

typeof(Alu)

可以通过访问其特殊属性来提取分解的不同部分

Alu.P

Alu.L

Alu.U

Julia可以在分解对象上调度方法。

例如,我们可以使用原始矩阵或分解对象来求解线性代数

A\B

Alu\b

QR分解

在Julia,我们可以执行QR分解

A=QR 其中Q是单一的/正交的并且R是上三角 Aqr=qr(A) 类似于LU分解,矩阵Q和R可以从QR因式分解对象通过提取

Aqr.Q

Aqr.R

特殊矩阵

矩阵结构在线性代数中非常重要。了解它的重要性,让我们使用更大的线性代数

n=1000

A=randn(n,n)

朱莉娅会自动推断出特殊的矩阵结构

Asym = A + A'

issymmetric(Asym)

但有浮点数可能会产生错误。

Asym_noisy = copy(Asym)

Asym_noisy[1,2] += 5eps()

issymmetric(Asym_noisy)

幸运的是,我们可以明确地声明参数结构,例如Diagonal,Triangular,Symmetric,Hermitian,Tridiagonal和SymTridiagonal。

Asym_explicit = Symmetric(Asym_noisy);

让我们比较一下朱莉娅计算的不同特征值所花费的时间:用Asym,Asym_noisy和Asym_explicit

@time eigvals(Asym);

@time eigvals(Asym_noisy);

@time eigvals(Asym_explicit);

在这个例子中,使用Symmetric()on Asym_noisy使我们的计算更高效:)

有理数 Julia内置了有理数。要构造有理数,请使用双正斜杠: 1//2 示例:有理线性方程组 以下示例显示了如何在不提升浮点元素类型的情况下求解具有有理元素的线性方程组。使用有理数时,溢出很容易成为问题,所以我们使用BigInts。

Arational = Matrix{Rational{BigInt}}(rand(1:10, 3, 3))/10

x = fill(1, 3)

b = Arational*x

Arational\b

lu(Arational)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值