求解三元一次方程组(C++)

/**
 * author:johnny zen
 * date:2017-09-20 11:19
 * function:Calculate Ternary system of equations
 * notice:时间仓促,仅仅实现功能,方便使用,代码质量不可参考!!!
 */
#include<iostream>
using namespace std;

template<class T>
void input(T matrix[4][5]){
    cout<<"please input matrix element‘s data"<<endl;
    for(int i = 1;i<4;i++){
        for(int j=1;j<5;j++){
            cin>>matrix[i][j];
        }
    }
    cout<<"input ok";
}

template<class T>
void calc(T matrix[4][5]){
    T     base_D = matrix[1][1]*matrix[2][2]*matrix[3][3] + matrix[2][1]*matrix[3][2]*matrix[1][3] + matrix[3][1]*matrix[1][2]*matrix[2][3];//计算行列式
        base_D = base_D-(matrix[1][3]*matrix[2][2]*matrix[3][1] + matrix[1][1]*matrix[2][3]*matrix[3][2] + matrix[1][2]*matrix[2][1]*matrix[3][3]);

    if(base_D != 0){
        T     x_D = matrix[1][4]*matrix[2][2]*matrix[3][3] + matrix[2][4]*matrix[3][2]*matrix[1][3] + matrix[3][4]*matrix[1][2]*matrix[2][3];
            x_D = x_D-(matrix[1][3]*matrix[2][2]*matrix[3][4] + matrix[1][4]*matrix[2][3]*matrix[3][2] + matrix[1][2]*matrix[2][4]*matrix[3][3]);
        T     y_D = matrix[1][1]*matrix[2][4]*matrix[3][3] + matrix[2][1]*matrix[3][4]*matrix[1][3] + matrix[3][1]*matrix[1][4]*matrix[2][3];
            y_D = y_D-(matrix[1][3]*matrix[2][4]*matrix[3][1] + matrix[1][1]*matrix[2][3]*matrix[3][4] + matrix[1][4]*matrix[2][1]*matrix[3][3]);
        T     z_D = matrix[1][1]*matrix[2][2]*matrix[3][4] + matrix[2][1]*matrix[3][2]*matrix[1][4] + matrix[3][1]*matrix[1][2]*matrix[2][4];
            z_D = z_D-(matrix[1][4]*matrix[2][2]*matrix[3][1] + matrix[1][1]*matrix[2][4]*matrix[3][2] + matrix[1][2]*matrix[2][1]*matrix[3][4]);

        T x =  x_D/base_D;
        T y =  y_D/base_D;
        T z =  z_D/base_D;
        cout<<"[ x:"<<x<<"; y:"<<y<<"; z:"<<z<<" ]"<<endl;
    }else{
        cout<<"【无解】";
//        return DBL_MIN;
    }
}

int main(){
    double matrix[4][5] ; //三元一次方程组

    input<double>(matrix);
    calc<double>(matrix);
    system("pause");
    return 0;
}
/*demo
2x-y+z=10;
3x+2y-z=16;
x+6y-z=28;

2 -1 1 10
3 2 -1 16
1 6 -1 28

output:input ok[ x:4.18182; y:5.09091; z:6.72727 ]
*/
时间: 2024-10-12 06:35:58

求解三元一次方程组(C++)的相关文章

解不等式组、二元一次方程组、三元一次方程组

不等式性质: 一.加减同一个数,方向不变. 二.乘以(除以)同一个正数,方向不变. 三.乘以(除以)同一个负数,方向改变. 例:/3x - 15 > 0  ① \7x - 2 < 8x  ② 解①式可得 x > 5 解②可可得 -2 < x 该不等式的解集为 x > 5 解二元一次方程组: 1.消元解二元一次方程组有代入消元和加减消元法. 2.代入消元法:把二元一次方程组的一个未知数用另一个未知数表示出来,再带入另一个方程,实现消元. 3.加减消元法:两个方程中同一个未知数系

二元一次方程组求解

首先要找到二元一次方程组的通解,例如: ax+by=m cx+dy=n 不难算出 x=(md-bn)/(ad-bc) y=(mc-an)/(bc-ad) 程序代码: #include<stdio.h> #include<math.h> int main(){ int a,b,c,d,m,n; double x=0,y=0; scanf("%d,%d,%d,%d,%d,%d",&a,&b,&c,&d,&m,&n);

【poj2947】高斯消元求解同模方程组【没有AC,存代码】

题意: p start enda1,a2......ap (1<=ai<=n)第一行表示从星期start 到星期end 一共生产了p 件装饰物(工作的天数为end-start+1+7*x,加7*x 是因为它可能生产很多周),第二行表示这p 件装饰物的种类(可能出现相同的种类,即ai=aj).规定每件装饰物至少生产3 天,最多生产9 天.问每种装饰物需要生产的天数.如果没有解,则输出"Inconsistent data.",如果有多解,则输出"Multiple so

动态规划求解连续子数组最大和问题(应该是新的描述方法?)

刚才看了下网上搜索到的TOP5使用动态规划解决此问题的代码,感觉没有突出动态规划的特点.所以自己思考了一番,提出如下解决方案: 首先再重复下动态规划的定义:将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息. 思考状态转移方程:设d[i]表示i个数形成的数组中最大的连续子数列和,数组arr[i] ,i=0...n-1; 那么d[i] 和 d[i-1]应该具备什么样的关系?显然,有两种情况, 一是arr[i]>0得到d[i] = max(

codevs 1038 一元三次方程求解 NOIP2001提高组

题目链接:http://codevs.cn/problem/1038/ 题解: 嗯,exm?才知道二分隶属搜索专题…… 对-100到100枚举,按照题目中的提示,当当fi*fi+1<0时,二分深搜,直到精度达到小数点后4位为止(保守起见),当fi*fi+1=0时,判定i是否为解,否则跳过(如果i和i+1都为解,下一次循环时还会再判断i+1) 1 #include<cstdio> 2 #include<cmath> 3 double a,b,c,d; 4 double f(do

js高斯消元法解决n元一次方程组--算等额分期

importClass(java.text.DecimalFormat);let df = new DecimalFormat("0.##"); /*** 增广矩阵机型初等行变化的算法 @param value 需要算的增广矩阵 @return 计算的结果 */ function mathDeterminantCalculation(value) { // 当矩阵的行数大于2时 for (let i = 0; i < value.length; i++) { // 检查数组对角线

二元一次方程组简单解法(输入样式有介绍)

提示输入方程时输入如:5x+3y=2 要求全部字符串无空格 1 package cn.aikang.Calculation; 2 3 import java.math.BigDecimal; 4 import java.util.Scanner; 5 //BigDecimal 6 /** 7 * @Description: TODO(这里用一句话描述这个类的作用) 8 * @Author aikang 9 * @Date 2019/10/12 8:38 10 */ 11 public class

求解一元一次方程的正整数解(Python版本)

eq = input() eq1 = eq.replace("=","-(") + ")" c = eval(eq1, {'X': 1j}) print(int(-c.real/c.imag)) 例如:solve("x - 2x + 5x - 46(235-24) = x + 2") 下面就来解读下代码吧. 首先是第一行(除input()),它将等式进行了变形,生成了一个结果为0的算式 “x - 2x + 5x - 46(23

游戏编程精粹系列书籍目录一览

游戏编程精粹1 第1章 通用编程技术 1.0 神奇的数据驱动设计(Steve Rabin) 3 1.0.1 点子1--基础 3 1.0.2 点子2--最低标准 3 1.0.3 点子3--杜绝硬编码 3 1.0.4 点子4--将控制流写成脚本 4 1.0.5 点子5--什么时候不适合使用脚本? 5 1.0.6 点子6--避免重复数据 5 1.0.7 点子7--开发工具来生成数据 6 1.0.8 结论 6 1.1 面向对象的编程与设计技术(James Boer) 7 1.1.1 代码风格 7 1.1