07-求解Ax=0:主变量、特解

一、定义转向算法

 在第六节讲了空间,列空间,零空间的定义,这节主要讲解如何求出这些空间,即求解$Ax=0$的过程是怎么样的过程,以下面的矩阵$A$为例:(这里主要是长方阵)

$A=\left[\begin{array}{llll}{1} & {2} & {2} & {2} \\ {2} & {4} & {6} & {8} \\ {3} & {6} & {8} & {10}\end{array}\right]$

仔细观察上面的矩阵就会发现行列之间的关系:第二列是第一列的2倍,第三行是前两行的和

 

 1)消元:零空间不会变,因为方程解不变

  第一阶段(找到第一个主元):$\left[\begin{array}{llll}{1} & {2} & {2} & {2} \\ {0} & {0} & {2} & {4} \\ {0} & {0} & {2} & {4}\end{array}\right]$

第二阶段(找第二个主元,发现是0,也无法通过后面的行交换来使得该位置不为0,我们就将0后面的2当作主元,继续对下面的行消元)

$\left[\begin{array}{llll}{0} & {2} & {2} & {2} \\ {0} & {0} & {2} & {4} \\ {0} & {0} & {0} & {0}\end{array}\right]=U$

 

  综上:我们已经找到了两个主元1和2,这里我们知道主元的数量是2,所以矩阵的秩就是2,矩阵的秩(rank)即为矩阵的主元数量

  我们原本要求$Ax=0$,现在经过消元,方程解不变,现在只需要求$Ux=0$

 

 2)主列和自由列

  主元所在的列为主列(如第一列和第三列),另外的是自由列(如第二列和第四列),所谓自由列就是我们可以任意分配其对应的未知变量的系数,如$x_2=1, x_4=0$

 

$x_{1}+2 x_{2}+2 x_{3}+2 x_{4}=0$
$2 x_{3}+4 x_{4}=0$

则方程解为:$x=\left[\begin{array}{c}{-2} \\ {1} \\ {0} \\ {0}\end{array}\right]$

当然也存在下面的解:$x=C\left[\begin{array}{c}{-2} \\ {1} \\ {0} \\ {0}\end{array}\right]$

 

  我们说过,自由列的存在使得我们可以为自由变量随意分配值,所以当然$x_2=0, x_4=1$也是可以的:

则方程解为:$x=\left[\begin{array}{c}{2} \\ {0} \\ {-2} \\ {1}\end{array}\right]$

当然也存在下面的解:$x=d\left[\begin{array}{c}{2} \\ {0} \\ {-2} \\ {1}\end{array}\right]$

 

有了上面两个特定解,我们就可以求出所有x,即矩阵的零空间:$x=C\left[\begin{array}{c}{-2} \\ {1} \\ {0} \\ {0}\end{array}\right] + d\left[\begin{array}{c}{2} \\ {0} \\ {-2} \\ {1}\end{array}\right]$

所以矩阵的零向量就是特定解的线性组合

 

 3)简化U:下面我们将会简化U来得到R

  简化的过程:从U出发,将主元上下全变为0,即$\left[\begin{array}{llll}{1} & {2} & {0} & {-2} \\ {0} & {0} & {2} & {4} \\ {0} & {0} & {0} & {0}\end{array}\right]$,然后将主元变为1即得到简化行阶梯形式R

$\left[\begin{array}{cccc}{1} & {2} & {0} & {-2} \\ {0} & {0} & {1} & {2} \\ {0} & {0} & {0} & {0}\end{array}\right]=R$

从上面的过程看出,全0的行是其他行的线性组合

  整个过程从求解$Ax=0$,消元变为$Ux=0$,简化变为$Rx=0$,熟悉了整个过程,Matlab中很容易实现这个过程$R = rref(A)$

 

  我们从$R$观察到单位矩阵(主元行和主元列交汇所得)和自由矩阵(自由变量行和列组成):(注意零行没写)

单位矩阵$I$:$\left[\begin{array}{cccc}{1} & {0}\\ {0} & {1}\end{array}\right]$和自由矩阵$F$:$\left[\begin{array}{cccc}{2} &{-2} \\{0} & {2}\end{array}\right]$

对比2)中提到的两个特解,我们发现矩阵的零空间可以从$R$矩阵直接看出,即零空间$x=\left[\begin{array}{cccc}{-F}\\{I}\end{array}\right]$

转载于:https://www.cnblogs.com/always-fight/p/11381242.html

### 解决矩阵方程 \( AX = XB \) 矩阵方程 \( AX = XB \) 可以视为一种特殊的线性矩阵方程,其中 \( A \) 和 \( B \) 是已知的矩阵,\( X \) 是待求解的未知矩阵。这类方程通常通过将矩阵方程转换为向量形式并利用Kronecker积来处理。 #### Kronecker 积法 为了简化该类型的矩阵方程,可以采用如下变换: \[ (I_p \otimes A - B^T \otimes I_n)\text{vec}(X)=0 \] 这里, - \( I_p \) 表示维度为 \( p \times p \) 的单位矩阵- \( I_n \) 表示维度为 \( n \times n \) 的单位矩阵- \( \otimes \) 表示克罗内克乘积运算符, - \( \text{vec}(X) \) 将矩阵 \( X \) 向量化成一个长列向量[^1]。 此方法允许把始问题重写为标准齐次线性系统的形式,从而能够应用常规技术找到非平凡解(如果存在)。 #### 使用MATLAB求解 当考虑数值稳定性时,在 MATLAB 中推荐使用斜杠操作符 `\` 来代替显式地计算逆矩阵。对于给定的具体实例,假设已经构建好了相应的增广系数矩阵,则可以直接调用 `null()` 函数获取基础解析空间的一组基底作为可能存在的多个解之一[^3]。 ```matlab % 假设A和B已经被正确定义 % 构建增广矩阵 M=(I⊗A-B'⊗In) M = kron(eye(p), A) - kron(B.', eye(n)); % 寻找零空间的基础 Z = null(M); if isempty(Z) disp('No non-trivial solution exists.'); else % Z包含了所有独立变量构成的空间内的潜在解决方案 end ``` #### 利用Eigen库实现C++代码片段 在某些编程环境中比如 C++ 下面借助于 Eigen 库也可以高效完成同样的任务: ```cpp #include <iostream> #include <Eigen/Dense> using namespace std; using namespace Eigen; int main() { MatrixXd A(m,n); // 定义适当大小的矩阵A MatrixXd B(p,q); // 定义适当大小的矩阵B // ... 初始化A,B... int np = n * p; // 计算np值用于创建大矩阵 MatrixXd K(np,np); // 创建(I ⊗ A − BT ⊗ In) for(int i=0;i<p;++i){ K.block(i*n,(p-i-1)*n,n,n)=-B.row(i).transpose()*MatrixXd::Identity(n,n); } for(int j=0;j<n;++j){ K.col(j*p+j)+=MatrixXd::Identity(p,p).kroneckerProduct(A.col(j)); } FullPivLU<MatrixXd> luDecomp(K); VectorXd vec_x(np); if(luDecomp.kernel().cols()>0){ cout << "Found solutions:" << endl; vec_x = luDecomp.kernel(); // 进一步处理得到的结果... } else{ cerr << "No nontrivial solution found."<<endl; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值