线性代数的例子
本教程展示了一些使用 Wolfram 语言 进行涉及线性代数的计算的例子.
矩阵排序
某些稀疏矩阵技术尝试对矩阵重新排列,使元素组合成块. 然后利用高密度矩阵技术计算每个矩阵块. 一个简单的对矩阵按块排序的方式,涉及到按照每行元素的总和排序. 这将在这个例子中说明.
满秩最小二乘解
求解矩阵方程 是矩阵计算的关键问题之一;关于求解技巧在"求解线性系统"中有讨论. 如果 是一个 × 矩阵,这是由含有 个未知数的. 如果 ,即方程个数大与未知数个数,则方程组是超定系统. 一种用于找到最小二乘解的一般技巧在"最小二乘解集"中给出. 这个例子将展示一些不同的技术来找到满秩矩阵超定系统的近似解.
请注意对于本节所有例子中的解同样适用于在输入中给出稀疏矩阵的情形.
最小二乘 Cholesky
这个技巧采用 Cholesky 分解找到最小二乘解. 如果一个矩阵 有满秩,可以通过以下方式找到解.
最小二乘 QR
当 是满秩时,一种更准确的解决该问题的方法是使用如下的 QR 分解.
1-范数和无穷-范数的最小化
当矩阵方程 超定(即 )时,找到近似解的许多技术要进行2范数最小化. 这是由于使得它在计算上易于处理的一定的优势. 原因之一是,函数
是可微的,并且微分是一个线性操作. 因此,可以构成一个找到最小解的线性系统. 另一个原因是,在正交变换下2范数可以保存. 这意味着可以构成一系列可能比较易于求解的等价问题.
然而,还可以通过最小化其它的范数,例如1范数或范数,来找到另外的解. 在某些特定情况下,这些方式可能会由于找到的解能够保持一些相对于个别问题的重要性质,从而更可取. 在这个例子中展示了一些技术来找到使范数最小化的适当解; 两者都将使用一个方法来寻找约束线性问题的最小值;这通常被称为线性编程.
在 Wolfram 语言 中,线性编程由函数 LinearProgramming 实现. 它可以解决对 Wolfram 语言 所支持的不同类型的数值的线性编程问题:这些数值类型包括整数、有理数,以及机器精度近似实数和任意精度近似实数. 另外,它还通过内点法来提供适当的技术来使极大型系统最小化.
在本节中给出的解适用于密集矩阵的输入. 将这些解进行修改可直接作为稀疏矩阵输入,这将有必要充分利用内点法线性编程技术.
1-范数最小化
无穷-范数最小化
范数的最小化与1范数的最小化相似,涉及到找到使下式最小的 的值.
有限差分解
求解偏微分方程的一种方式是,形成一个空间离散并求其有限差分解. 这个例子考察一个单位正方形上的泊松方程的基本有限差分解.
网格分区
这个例子演示了一个极端特征值的实际用途. 其目的是将网格或图形的顶点分割为两个子域,各自含有数量大致相等的顶点,分区贯穿尽可能少的边缘.(边缘在当它的两个顶点分别在每个子域上被削去.)对图形分区的一种方式是形成拉普拉斯并使用其费德勒向量(对应第二最小特征值的特征向量)以对顶点排序. 对图形分区还存在更高效的算法,不需要进行特征向量的计算,但是费德勒方法仍然是重要的一种方法.
数据
绘制网格
拉普拉斯算符
一幅图形的拉普拉斯算符,,是一个 × 离散矩阵,在图形中有 个顶点. 的输入值大多为零,对角线是与顶点次数对应的正整数,这里次数指的是与该顶点相连的顶点的个数. 另外,如果两个顶点, 和 通过一条边相连,则 为 -1.
费德勒向量
每一行之和为零,因此拉普拉斯算符矩阵是具有零特征值的正半定矩阵. 对应于第二最小特征值的特征向量称为费德勒向量.
节点的分区
带有 NDSolve 的矩阵函数
Wolfram 语言 的诸多数值求解程序的重要特征之一是它们适用于向量和矩阵输入. 通常这用于求解耦合方程组,但也可用于解决矩阵特有的问题. 这里将给出一个使用数值微分方程求解程序 NDSolve 来找到矩阵函数的参数化解的例子.