一、定义(克拉默法则)
- 设含有 n n n个未知数 x 1 , x 2 , ⋯ , x n x_1,x_2,\cdots ,x_n x1,x2,⋯,xn的 n n n个线性方程的方程组 { a 11 x 1 + a 12 x 2 + ⋯ + a 1 n x n = b 1 a 21 x 1 + a 22 x 2 + ⋯ + a 2 n x n = b 2 ⋯ ⋯ ⋯ a n 1 x 1 + a n 2 x 2 + ⋯ + a n n x n = b n , (1) \begin{cases} a_{11}x_1+a_{12}x_2+\cdots +a_{1n}x_n=b_1 \\ a_{21}x_1+a_{22}x_2+\cdots +a_{2n}x_n=b_2 \\ \cdots \cdots \cdots \\ a_{n1}x_1+a_{n2}x_2+\cdots +a_{nn}x_n=b_n\end{cases}\tag{1} , ⎩ ⎨ ⎧a11x1+a12x2+⋯+a1nxn=b1a21x1+a22x2+⋯+a2nxn=b2⋯⋯⋯an1x1+an2x2+⋯+annxn=bn,(1)如果线性方程组(1)的系数行列式不等于零,即 D = ∣ a 11 ⋯ a 1 n ⋮ ⋮ a n 1 ⋯ a n n ∣ ≠ 0 , D=\begin{vmatrix}a_{11}&\cdots &a_{1n} \\ \vdots && \vdots \\a_{n1} & \cdots & a_{nn} \end{vmatrix} \neq 0, D= a11⋮an1⋯⋯a1n⋮ann =0,那么,方程组(1)有唯一解 x 1 = D 1 D , x 2 = D 2 D , ⋯ , x n = D n D , x_1=\frac{D_1}{D},x_2=\frac{D_2}{D},\cdots ,x_n=\frac{D_n}{D}, x1=DD1,x2=DD2,⋯,xn=DDn,其中 D j ( j = 1 , 2 , ⋯ , n ) D_j(j=1,2,\cdots ,n) Dj(j=1,2,⋯,n)是把系数行列式D中的第 j j j列的元素用方程组右端的常数项代替后所得到的 n n n阶行列式,即 D j = ∣ a 11 a 1 , j − 1 b 1 a 1 , j + 1 ⋯ a 1 n ⋮ ⋮ ⋮ ⋮ ⋮ a n 1 a n , j − 1 b n a n , j + 1 ⋯ a n n ∣ . D_j=\begin{vmatrix} a_{11}&a_{1,j-1}&b_1&a_{1,j+1}&\cdots & a_{1n} \\ \vdots & \vdots & \vdots &\vdots &&\vdots \\ a_{n1}&a_{n,j-1}&b_n & a_{n,j+1}&\cdots &a_{nn}\end{vmatrix}. Dj= a11⋮an1a1,j−1⋮an,j−1b1⋮bna1,j+1⋮an,j+1⋯⋯a1n⋮ann .
二、定理4
- 如果线性方程组(1)的系数行列式 D ≠ 0 D\neq 0 D=0,则(1)一定有解,且解是惟一的.
三、定理4’
- 如果线性方程组(1)无解或有两个不同的解,则它的系数行列式必为零.
四、定义(非齐次线性方程组、齐次线性方程组)
- 线性方程组(1)右端的常数项 b 1 , b 2 , ⋯ , b n b_1,b_2,\cdots ,b_n b1,b2,⋯,bn不全为零时,线性方程组(1)叫做非齐次线性方程组.
- 当 b 1 , b 2 , ⋯ , b n b_1,b_2,\cdots ,b_n b1,b2,⋯,bn全为零时,线性方程组(1)叫做齐次线性方程组.
五、定理5
- 如果齐次线性方程组(1)的系数行列式 D ≠ 0 D\neq 0 D=0,则齐次线性方程组(1)没有非零解.
六、定理5’
- 如果齐次线性方程组(1)有非零解,则它的系数行列式必为零.
七、C++代码实现
- 解线性方程组 { 2 x 1 + x 2 − 5 x 3 + x 4 = 8 x 1 − 3 x 2 − 6 x 4 = 9 2 x 2 − x 3 + 2 x 4 = − 5 x 1 + 4 x 2 − 7 x 3 + 6 x 4 = 0 \begin{cases}2x_1+\;\;x_2-5x_3+x_4=8\\ \;\; x_1-3x_2 \quad \quad \; -6x_4=9 \\ \quad \quad \;\;\; 2x_2-\;x_3+2x_4=-5\\ \;\;x_1+4x_2-7x_3+6x_4=0\end{cases} ⎩ ⎨ ⎧2x1+x2−5x3+x4=8x1−3x2−6x4=92x2−x3+2x4=−5x1+4x2−7x3+6x4=0
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
//行列式求值函数
int GetDetVal(const vector<vector<int>> &vvDetInput)
{
int iDetVal;
//行列式空白时,退出
if(0 == vvDetInput.size())
return 0;
//当行列式仅有1个元素(阶数为1)时,该值就是行列式的值
if(1 == vvDetInput.size() && 1 == vvDetInput[0].size())
{
return vvDetInput[0][0];
}
//当行列式元素阶数大于1时,将行列式按第1行展开
else
{
//先求行列式的余子式
vector<vector<int>> vvCofactor(vvDetInput);//1.复制输入行列式
vvCofactor.erase(vvCofactor.cbegin());//2.删除第1行
for(unsigned int i = 0; i < vvCofactor[0].size(); i++)//3.逐列删除
{
for(unsigned int j = 0; j < vvCofactor.size(); j++)
{
vvCofactor[j].erase(vvCofactor[j].cbegin() + i);
}
//对第1行各元素预期代数余子式的成绩进行累加,得到行列式的值。当行列式阶数大于1时,递归调用本函数
iDetVal += (vvDetInput[0][i] * pow(-1, i) * GetDetVal(vvCofactor));
vvCofactor.clear();
vvCofactor = vvDetInput;
vvCofactor.erase(vvCofactor.cbegin());//2.删除第1行
}
}
return iDetVal;
}
//主函数
int main() {
//方程组系数行列式
vector<vector<int>> vvCoefficients{{2,1,-5,1},
{1,-3,0,-6},
{0,2,-1,2},
{1,4,-7,6}};
//方程组常数项
vector<int> vConstants{8,9,-5,0};
//克拉默法则中分母D的值
int D = GetDetVal(vvCoefficients);
//求克拉默法则中分子的值,并代入公式求方程的解
for(unsigned int i = 0; i < vvCoefficients[0].size(); i++)
{
vector<vector<int>> vvDet0(vvCoefficients);
for(unsigned int j = 0; j < vvCoefficients.size(); j++)
{
vvDet0[j][i] = vConstants[j];
}
cout << "x" << i + 1 << " = " << GetDetVal(vvDet0) / D << endl;
}
return 0;
}
文章来源:https://www.toymoban.com/news/detail-852932.html
引用文献:《工程数学 线性代数(第五版)》同济大学数学系编,高等教育出版社文章来源地址https://www.toymoban.com/news/detail-852932.html
到了这里,关于【线性代数|C++】克拉默法则的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!