【线性代数|C++】克拉默法则

这篇具有很好参考价值的文章主要介绍了【线性代数|C++】克拉默法则。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、定义(克拉默法则)

  • 设含有 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= a11an1a1nann =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= a11an1a1,j1an,j1b1bna1,j+1an,j+1a1nann .

二、定理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+x25x3+x4=8x13x26x4=92x2x3+2x4=5x1+4x27x3+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;
}

【线性代数|C++】克拉默法则,线性代数,c++,开发语言


引用文献:《工程数学 线性代数(第五版)》同济大学数学系编,高等教育出版社文章来源地址https://www.toymoban.com/news/detail-852932.html

到了这里,关于【线性代数|C++】克拉默法则的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 克拉默法则证明(Cramer‘s Rule)

    若 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 begin{equation*} begin{cases} a_{11}x_{1} + a_ {12}x_{2} + ... + a_{1n}x_{n} = b_1 \\\\ a_{21}x_{1} + a_ {22}x_{2} + ... + a_{2n}x_{n} = b_

    2024年02月06日
    浏览(49)
  • PCL 使用克拉默法则进行三点定圆(二维)

    本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。    见:使用克拉默法则进行三点定圆(二维)

    2024年02月07日
    浏览(48)
  • 线性代数:克莱姆法则学习笔记

    克莱姆(Cramer)法则又称为克拉默法则,是在线性代数中解决线性方程组问题的一种方法。克莱姆法则的基本思想是通过用系数矩阵的行列式来判断线性方程组是否有唯一解,从而进一步求出各个未知数的值。其原理基于克莱姆定理: 对于 n 元线性方程组 Ax = b,如果系数矩

    2024年02月08日
    浏览(50)
  • 线性代数克莱姆法则的几何含义

    以二元一次方程组的求解为例: { a c a 1 + b c b 1 = c 1 a c a 2 + b c b 2 = c 2 left{begin{array}{l} a_{c}a_{1} +b_{c}b_{1} =c_{1} \\\\ a_{c}a_{2} +b_cb_{2} =c_{2} end{array}right. { a c ​ a 1 ​ + b c ​ b 1 ​ = c 1 ​ a c ​ a 2 ​ + b c ​ b 2 ​ = c 2 ​ ​ 其中 a c a_c a c ​ 和 b c b_c b c ​ 是我们待求的参数。

    2024年02月12日
    浏览(44)
  • 【线性代数】P4 行列式相乘+范德蒙德行列式+克莱姆法则 cramer

    行列式相乘的原则,就是将第一个行列式中依次将每行的每个元素分别与第二个行列式每列的每个元素进行相加再相乘。 其实这样理解:已知两个行列式,如上,相乘有新行列式,新行列式左上角第一个值为: a 11 *b 11 +a 12 *b 21 +a 13 *b 31 实例2: 当然,三阶行列式无法与四阶

    2024年02月02日
    浏览(50)
  • 线性代数代码实现(七)求解线性方程组(C++)

    前言:         上次博客,我写了一篇关于定义矩阵除法并且代码的文章。矩阵除法或许用处不大,不过在那一篇文章中,我认为比较好的一点是告诉了大家一种计算方法,即:若矩阵  已知且可逆,矩阵  已知,并且  ,求解矩阵 B 。我认为这种初等行变换的方法还是挺

    2023年04月23日
    浏览(48)
  • 【C++】开源:Eigen3矩阵与线性代数库配置使用

    😏 ★,° :.☆( ̄▽ ̄)/$: .°★ 😏 这篇文章主要介绍Eigen3线性代数模板库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路🥞 项目Gitlab地址: https://gitlab.com/libeigen/eigen 官网:

    2024年02月14日
    浏览(44)
  • GPU编程 CUDA C++ 线性代数求解器 cuSolver库

    cuSolver库较cuBLAS库更为高级,其能处理矩阵求逆,矩阵对角化,矩阵分解,特征值计算等问题。cuSolver库的实现是基于cuBLAS库和cuSPARSE库这两个基本库。cuSolver库的功能类似于Fortran中的LAPACK库:是Linear Algebra PACKage的简称。 以下以一个厄米矩阵的本征值(特征值)问题,代码示

    2024年02月05日
    浏览(50)
  • 线性代数的学习和整理2:什么是线性,线性相关,线性无关 以及什么是线性代数?

    目录 1 写在前面的话 1.1 为什么要先总结一些EXCEL计算矩阵的工具性知识, 而不是一开始就从基础学起呢?  1.2 关于线性代数入门时的各种灵魂发问: 1.3 学习资料 2 什么是线性(关系)? 2.1 线性的到底是一种什么关系: 线性关系=正比例/正相关关系 ≠ 直线型关系 2.2 一次函数

    2024年02月10日
    浏览(56)
  • 线性代数的学习和整理2:什么是线性,线性相关,线性无关 及 什么是线性代数?

    目录 1 写在前面的话 1.1 为什么要先总结一些EXCEL计算矩阵的工具性知识, 而不是一开始就从基础学起呢?  1.2 关于线性代数入门时的各种灵魂发问: 1.3 学习资料 2 什么是线性(关系)? 2.1 线性的到底是一种什么关系: 线性关系=正比例/正相关关系 ≠ 直线型关系 2.2 一次函数

    2024年02月11日
    浏览(139)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包