本文最先发布于本人博客 哔哔哔哔-使用C++实现克拉默法则(Cramer’s law)

克拉默法则(Cramer’s law)是线性代数中的一条定理,用行列式来计算出线性等式组中的所有解,被用于计算n元一次方程

前言

近期线性代数学习到了克拉默法则,结合前文使用C++实现n阶行列式的计算所写代码,可以实现解n元一阶方程的目的

项目地址

https://github.com/gst-be/cramer

代码

本次代码分为主程序main.cpp和子程序det.cpp两部分,主程序主要负责数值的输入和输出,子程序负责计算行列式

main.cpp

#include <iostream>
#include "det.cpp"//导入det.cpp子程序文件
#define MAX 30//最大阶数//生成临时数组c,从a导入数值,并将c[][t]赋b的值
double calc(double a[MAX][MAX],double b[MAX],int n,int t)
{double c[MAX][MAX];for(int i=0;i<n;i++){for(int j=0;j<n;j++){if(j==t)c[i][j]=b[i];elsec[i][j]=a[i][j];}}return det(c,n);//调用子程序的函数计算并返回结果
}int main() {double a[MAX][MAX];//定义每项前系数double b[MAX];//定义等号右边的数int n;//定义阶数cout<<"Input n=";cin>>n;for(int i=0;i<n;i++){for(int j=0;j<n;j++){cout<<"a["<<i<<"]["<<j<<"]=";cin>>a[i][j];}cout<<"b["<<i<<"]=";cin>>b[i];}for(int t=0;t<n;t++){cout<<"x["<<t<<"]="<<calc(a,b,n,t)/det(a,n)<<endl;//即x=Di/D}return 0;
}

det.cpp

#include <iostream>
#include <cmath>
#define N 900//比n^n大即可
#define max_n 30//最高可算多少阶行列式using namespace std;//计算每项前系数
int t(int p[N],int n)
{   int c=0;//定义逆序数计数器for(int i=0;i<n-1;i++){for(int j=i+1;j<n;j++){if(p[i]>p[j])  c++;//出现逆序则自增1else if(p[i]==p[j])return 0;//出现同列情况将系数变为0}}if(c%2==0)return 1;//偶逆序数返回1elsereturn -1;//奇逆序数返回-1
}//计算系数外每项的乘积
double product(double x[max_n][max_n],int p[N],int n)
{double pdt=1;//乘积初始化为1for(int i=0;i<n;i++){pdt*=x[i][p[i]];}return pdt;//返回本次序列数所对应的乘积
}double det(double x[max_n][max_n],int n)
{double sum=0;//初始化结果为0int p[N];//定义序列数,从p[1]开始每一位的值对应取x[][]中每行的第几列for(int i=0;i<N;i++){p[i]=0;//初始化}for(int i=0;i<pow(n,n);i++){sum+=t(p,n)*product(x,p,n);//开始生成序列数p[0]++;for(int j=0;j<n;j++){if(p[j]==n){p[j]=0;p[j+1]++;}}}return sum;
}

解析

行列式的计算

有关行列式相关代码,此处不作解析,详见前文使用C++实现n阶行列式的计算

克拉默法则

xi=DiDx_i=\frac{D_i}{D}xi​=DDi​​
系数行列式D的值由数组a[MAX][MAX]存储,等号右边数值由数组b[MAX]存储
下标ifor循环遍历,i的值会被传递给子函数calc()
在子函数calc()中,会复制a[][]的值给临时数组c[][]
但在第i列会赋b[i]的值以替换

本文已发表于哔哔哔哔(bebebe.be)

使用C++实现克拉默法则(Cramer‘s law)相关推荐

  1. matlab 矩阵维度受限,matlab中变量问题——readonly 索引超出矩阵维度 workspacefunc 215...

    matlab程序运行过程中会出现如上提示,在网上检索未果,键入dbstop if error语句也无法定错误之处,就想这个错误不是一般的错误. 通过间隔打断点的方式最后定位错误为一句exist = f ...

  2. Chapter 3 (Determinants): Cramer‘s rule, volume, and linear transformations (克拉默法则、体积和线性变换)

    本文为<Linear algebra and its applications>的读书笔记 目录 Cramer's Rule Application to Engineering A Fo ...

  3. 线性代数学习笔记——克拉默法则及矩阵的秩——1. 克拉默法则

    1. 克拉默法则(Cramer) 2. 克拉默法则应用示例1 3. 克拉默法则应用示例2(待定系数法) 4. 克拉默法则的理论意义大于实际意义

  4. Power Law and Exponential Decay of Inter Contac...

    2019独角兽企业重金招聘Python工程师标准>>> MobiCom'07, September 9–14, 2007: the observed dichotomy: Power ...

  5. R语言distCosine函数计算大圆距离实战(Law of Cosines Great Circle Distance)

    R语言distCosine函数计算大圆距离实战(Law of Cosines Great Circle Distance) 目录 R语言distCosine函数计算大圆距离实战(Law of Cosi ...

  6. 的g极串一个电阻_Ohm#39;s Law 简单系列D:从惠斯通(会石头)测电阻开始说

    引子 伏安法测电阻是初中电学中考典型实验之一,也是历年中考.一二模重点考查的内容,但电阻的测量方法不局限于伏安法,具有一定的灵活性.技巧性.多样性.按照基本器材来分有:伏安法.伏阻法.安阻法等.按照设 ...

  7. 台湾国立大学郭彦甫Matlab教程笔记(22) Cramer's method(Inverse matrix逆矩阵法)

    台湾国立大学郭彦甫Matlab教程笔记(22) Cramer's method(Inverse matrix) matrix left division左除:\ or mldivide() solvi ...

  8. tableau必知必会之运用本福德定律(Benford‘s law)验证数据真实性

    本福德定律 本福德定律(本福德法则 Benford's law ),也称为本福德法则,说明一堆从实际生活得出的数据中,以1为首位数字的数的出现机率约为总数的三成,接近期望值 1/9 的 3 倍.而越大 ...

  9. 线性代数:第一章 行列式(2)行列式按行(列)展开 克拉默法则

    第三节 行列式按行(列)展开 一.数学概念 余子式和代数余子式 在n阶行列式中,把元素  所在第i行和第j列划去后,留下来的n-1阶行列式叫做元素  的余子式,记作  ,记  ,  叫做元素  的代数 ...

  10. 迪米特法则(Law of Demeter) 简介

    在Java里class设计经常会提到一些个原则或者规则 最出名的莫非是 封闭-开放原则了(closed-open principle) 而这次这个 Law of Demeter 也是挺重要的. 一, ...

最新文章

  1. 浅谈MySQL架构体系
  2. Hive _练习,更新中
  3. One order text browser tool
  4. 程序员看了表示很开心
  5. 启动php-fpm服务器_无服务器冷启动不是问题-这就是为什么(对于大多数应用程序)...
  6. [hdu5372 Segment Game]树状数组
  7. 爬早-精典小结-0226
  8. mysql报错代码10051_zabbix_server 不能监听端口tcp 10051(示例代码)
  9. MFC创建MDI程序一个Doc对应多个View
  10. 24.事务控制和锁定语句
  11. 推荐系统实践--基于用户的协同过滤算法
  12. 工作流引擎之-activiti6使用
  13. CV520直接pin对pin替换 MS520,直接替换,无需修改硬件以及软件
  14. 实现B站弹幕很难么?这个开源项目了解一下
  15. 王文京:纵横30年,阵阵桂花香
  16. docker 仓库镜像 替换_Docker如何制作自己镜像并上传dockerhub
  17. AWS 吹走了私有云天空中最后一片乌云
  18. 字节跳动 文林福_AI实力赋能,让汽车营销玩出抖音范
  19. matlab平稳性检验
  20. 网络爬虫——爬取京东数据

热门文章

  1. CSS实现导航栏半透明背景效果
  2. 浅谈人工智能:现状、任务、构架与统一 | 正本清源(看完有新认知)
  3. 【数据库考试】数据库期末考试试题及答案
  4. IP跳转,驱动级IP重定向,驱动级IP跳转,IP转向实现代码及流程!
  5. xp系统之家官网纯净版系统下载
  6. 第55章、播放视频(从零开始学Android)
  7. HTML5CSS3网页设计仿微信通讯录页
  8. openfire 加 spark组建局域网聊天室
  9. 欧姆龙485通讯示例程序_【精品实验】PLC学习神器与温湿度变送器的通讯
  10. 行列式键盘+共阴极数码管显示