利用克拉莫法则求解n元线性方程组

接上一篇随笔,利用克拉莫法则求解n元线性方程组。

代码:

  1 #include <iostream>
  2 #include <cmath>
  3 using namespace std;
  4 void appDescribe();                       //程序说明
  5 double valDet( double* detPtr, int rank);  //求解行列式
  6 class LinearEquations
  7 {
  8     public:
  9         LinearEquations();  //构造方程组
 10         void sol();         //求解
 11         void showAns();     //显示解
 12     private:
 13         int rank;           //阶数
 14         double* parPtr;     //系数行列式
 15         double* conPtr;     //常数项
 16         double* ansPtr;     //解
 17 };
 18 LinearEquations::LinearEquations()
 19 {
 20     cout<<"输入方程元数:";
 21     cin>>rank;
 22     int rank2=rank*rank;
 23     parPtr=new double[rank2];
 24     conPtr=new double[rank];
 25     cout<<endl<<"输入系数行列式:"<<endl;
 26     for(int i=0;i<rank2;i++)
 27          cin>>parPtr[i];
 28     cout<<endl<<"输入常数项:"<<endl;
 29     for(int i=0;i<rank;i++)
 30         cin>>conPtr[i];
 31 }
 32 void LinearEquations::sol()
 33 {
 34     int rank2=rank*rank;
 35     double det=valDet(parPtr,rank);
 36     ansPtr=new double[rank];
 37     double *tempParptr=new double[rank2];
 38     double tempDet;
 39     if(det==0)
 40     {
 41         ansPtr=NULL;
 42         return;
 43     }
 44     for(int i=0;i<rank;i++)
 45     {
 46         for(int j=0;j<rank2;j++)
 47             tempParptr[j]=parPtr[j];
 48         for(int j=0;j<rank;j++)
 49             tempParptr[i+j*rank]=conPtr[j];
 50         tempDet=valDet(tempParptr,rank);
 51         ansPtr[i]=tempDet/det;
 52     }
 53 }
 54 void LinearEquations::showAns()
 55 {
 56     if(ansPtr==NULL)
 57     {
 58         cout<<"该线性方程组无解或有无数解"<<endl;
 59         return;
 60     }
 61     cout<<endl<<"该线性方程组的解为:"<<endl;
 62     for(int i=0;i<rank;i++)
 63         cout<<‘x‘<<i+1<<‘:‘<<ansPtr[i]<<endl;
 64 }
 65 int main()
 66 {
 67     appDescribe();
 68     LinearEquations l1;
 69     l1.sol();
 70     l1.showAns();
 71     system("pause");
 72     return 0;
 73 }
 74 void appDescribe()
 75 {
 76     cout<<"***************************************"<<endl
 77         <<"本程序利用克拉莫法则求解n元线性方程组。"<<endl
 78         <<"案例:"<<endl
 79         <<"输入方程元数:4"<<endl<<endl
 80         <<"输入系数行列式:"<<endl
 81         <<"1 1 1 1"<<endl
 82         <<"1 2 -1 4"<<endl
 83         <<"2 -3 -1 -5"<<endl
 84         <<"3 1 2 11"<<endl<<endl
 85         <<"输入常数项:"<<endl
 86         <<"5 -2 -2 0"<<endl<<endl
 87         <<"该线性方程组的解为:"<<endl
 88         <<"x1:1"<<endl
 89         <<"x2:2"<<endl
 90         <<"x3:3"<<endl
 91         <<"x4:-1"<<endl
 92         <<"***************************************"<<endl;
 93 }
 94 double valDet( double* detPtr, int rank)
 95 {
 96     double val=0;
 97     if(rank==1) return detPtr[0];
 98     for(int i=0;i<rank;i++)                 //计算余子式保存在nextDetPtr[]中
 99     {
100         double *nextDetPtr=new double[(rank-1)*(rank-1)];
101         for(int j=0;j<rank-1;j++)
102             for(int k=0;k<i;k++)
103                 nextDetPtr[j*(rank-1)+k]=detPtr[(j+1)*rank+k];
104         for(int j=0;j<rank-1;j++)
105             for(int k=i;k<rank-1;k++)
106                 nextDetPtr[j*(rank-1)+k]=detPtr[(j+1)*rank+k+1];
107         val+=detPtr[i]*valDet(nextDetPtr,rank-1)*pow(-1.0,i);
108     }
109     return val;
110 }
111 /*
112 数据1:
113 2
114
115 1 2
116 2 1
117
118 3 3
119 数据2:
120 4
121
122 1 1 1 1
123 1 2 -1 4
124 2 -3 -1 -5
125 3 1 2 11
126
127 5 -2 -2 0
128 */
时间: 2024-10-11 19:49:10

利用克拉莫法则求解n元线性方程组的相关文章

[转]利用excel进行线性规划求解

                       利用线性回归方法求解生产计划 文件〉选项〉加载项〉Excel加载项〉规划求解加载项〉确定 方法一: 1.建立数学模型: ?设变量:设生产拉盖式书桌x台,普通式书桌y台,可得最大利润 ?确定目标函数及约束条件 目标函数:max P = 115x+90y 约束条件:  10x+20y<=200.....................⑴   4x+6y<=128 .....................⑵ 15x+10y<=220 ......

利用栈实现迷宫求解

利用栈实现迷宫求解 前言:众所周知,栈是(First in last out)先进后出的数据结构,利用这个属性可以实现类似与回溯的方式,比如当前数据满足条件,则入栈,否则出栈返回上一级,依次循环. 在本题中,将每个迷宫路径上的点封装成上下左右四个方向数节点,先入栈迷宫入口节点,如果上下左右没被使用,则将其上下左右的点入栈,否则出栈.如果最终达到迷宫终点则成功,否则失败. 如下是每个节点的数据结构 1 typedef struct{ 2 int top; 3 int bottom; 4 int l

利用标准库算法求解排列组合

以前求序列的排列时,最常用的方法就是递归回溯,现在发现其实像这样有特定算法的重复性工作是可以在STL标准库中找到答案的. 在STL的变序性算法中,有两个用于排列元素的算法分别如下: bool next_permutation(Iterator beg,Iterator end) bool prev_permutation(Iterator beg,Iterator end) 这两个算法的功能也很简单,next_permutation()会改变区间(beg,end)内的元素次序,使它们符合"下一个

迷宫问题求解(一)利用栈与递归求解出口

本文适合于对迷宫问题已有初步研究,或阅读代码能力较强的人. 因此,如果你对迷宫问题一无所知,请参考其他更详细的资料. 迷宫问题,是一个对栈(Stack)典型应用的例子之一. 假如,有如下10X10的迷宫(0代表通路,1代表障碍),我们需要用写程序来找出迷宫的出口. 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 0 0 0 0 1 0 0 0 1 1 1 1 0 1 1 0 1 0 0 1 1 1 0 1 0 0 1 0 1 1 1 1 0 1 1 1 1 0 0

斐波那契数列以及斐波那契数列的衍生形式 利用矩阵快速幂求解

一.斐波那契数列F[n]=F[n-1]+F[n-2] 可转换为矩阵s[1,1,1,0]的n次幂的矩阵的s[0][1]的值 矩阵的幂次方 可通过 奇判断及进制移位提高时间效率 位与运算 n&1表示的意思:取二进制n的最末位,二进制的最末位为零表示n为哦数,为1表示奇数,即等价于n%2 n>>1 是将n的二进制向右移动一位, n>>=1 即把移动后的值赋给n 题目:求斐波那契数列F[n]%10000(取模) #include <cstdio> #include &l

[家里蹲大学数学杂志]第241期利用正交变换和对称性求解三重积分

求 $$\bex I=\iiint_V|x+y+2z|\cdot |4x+4y-z|\rd x\rd y\rd z, \eex$$ 其中 $V$ 是区域 $\dps{x^2+y^2+\frac{z^2}{4}\leq 1}$. 解答: 作变换 $$\bex x=u,\quad y=v,\quad \frac{z}{2}=w, \eex$$ 则 $$\beex \bea I&=\iiint_{u^2+v^2+w^2\leq 1} |u+v+4w|\cdot |4u+4v-2w|\cdot 2\rd

利用中国剩余定理(求解一元线性同余方程组)

POJ 1329 Circle Through Three Points(求三角形的外接圆)

Circle Through Three Points 博客原文地址:http://blog.csdn.net/xuechelingxiao/article/details/40985403 题目大意: 给你三个不共线的三个点的坐标,求出过这三个点的圆的方程.写出方程的两种形式. 解题思路: 其实题目要求写出的方程的形式中包含圆心坐标跟半径,所以说关键问题其实就是求出过三点圆的圆心跟半径就OK了. 其实就是个求三角形外接圆的题目,最后加上一些蛋疼的输出控制就可以了. 代码写的有点麻烦,看到Dis

【转】线性方程组求解

§4  线性方程组的解 定理   n元线性方程组 1.   无解 2.   有唯一解 3.   有无穷多解 证   设 ,为讨论方便,不妨设增广矩阵经若干次初等行变换变成如下行最简形矩阵 证 1 . ,则 ,上述矩阵的第r+1 行对应矛盾方程 ,故方程组无解. 2 . ,则上述行最简形矩阵为 对应的方程组是 即表示方程组有唯一解. 3 . ,则 ,对应的方程组可表示为 令 ,则解得方程组含 个参数的解: 即 由于参数可任取,故方程组有无穷多个解. 例   求解齐次线性方程组 解   例   求解