php中文网 | cnphp.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 377|回复: 0

C++:多元一次方程组的解法

[复制链接]

3138

主题

3148

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

UID
1
威望
0
积分
7946
贡献
0
注册时间
2021-4-14
最后登录
2024-11-21
在线时间
763 小时
QQ
发表于 2022-10-8 09:29:55 | 显示全部楼层 |阅读模式
[mw_shl_code=cpp,true]#include<iostream>
#include<math.h>
#include<fstream>
#include<stdlib.h>
using namespace std;
#define MaxElement  4

void print(double (*pArray)[MaxElement + 1], int iWidth,int iHigh);
void main(){
    int n,m;
    double a[MaxElement][MaxElement + 1] = {
        //3
//         {100, 10, 1, 10},
//         {400, 20, 1, 20},
//         {900, 30, 1, 10},

        //4
        {1,1,1,1,0},
        {1,2,3,4,-6},
        {2,6,4,5,-3},
        {3,4,-1,6,-12},
    };//第四列是增广矩阵
    int i,j;
    n = MaxElement;
    cout<<"输入方程组介数:";
    cout<<n<<endl;
    cout<<"输入增广矩阵:"<<endl;
    for(i = 0; i < n; i++){
        for(j = 0; j < n + 1;j++){
            cout<<a[j]<<"  ";
        }
        cout<<endl;
    }
    for(j = 0; j < n; j++)
    {
        double max = 0;
        double imax = 0;
        for(i = j; i < n; i++)
        {
            if(imax < fabs(a[j])){
                imax = fabs(a[j]);
                max = a[j];//得到各行中所在列最大元素
                m = i;
            }
        }
        if(fabs(a[j][j]) != max)
        {
            double b = 0;
            for(int k = j;k < n + 1; k++){
                b = a[j][k];
                a[j][k] = a[m][k];
                a[m][k] = b;
            }
        }
        print(a, MaxElement, MaxElement + 1);
        for(int r = j;r < n + 1;r++)
        {
            a[j][r] = a[j][r] / max;//让该行的所在列除以所在列的第一个元素,目的是让首元素为1
        }
        print(a, MaxElement, MaxElement + 1);
        for(i = j + 1;i < n; i++)
        {
            double c = a[j];
            if(c == 0) continue;
            for(int s = j;s < n + 1;s++){
                double tempdata = a;
                a = a - a[j] * c;//前后行数相减,使下一行或者上一行的首元素为0
                print(a, MaxElement, MaxElement + 1);  
            }
            print(a, MaxElement, MaxElement + 1);
        }
        print(a, MaxElement, MaxElement + 1);
    }
    for(i = n - 2; i >= 0; i--)
    {
        for(j = i + 1;j < n; j++)
        {
            double tempData = a[j];
            double data1 = a[n];
            double data2 = a[j][n];
            a[n] = a[n] - a[j][n] * a[j];
            print(a, MaxElement, MaxElement + 1);
        }
    }
    print(a, MaxElement, MaxElement + 1);
    cout<<"方程组的解是:"<<endl;
    for(int k = 0; k < n; k++){
        cout<<"x"<<k<<" = "<<a[k][n]<<endl;
    }
}
void print(double (*pArray)[MaxElement + 1], int iWidth,int iHigh) {
    std::cout<<"Array: "<<"\n";
    for(int i = 0; i < iWidth; i++)
    {
        for(int j = 0; j < iHigh;j++)
        {
            cout<<pArray[j]<<"  ";
        }
        cout<<endl;
    }
}[/mw_shl_code]

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|php中文网 | cnphp.com ( 赣ICP备2021002321号-2 )

GMT+8, 2024-11-22 04:09 , Processed in 0.995723 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

申明:本站所有资源皆搜集自网络,相关版权归版权持有人所有,如有侵权,请电邮(fiorkn@foxmail.com)告之,本站会尽快删除。

快速回复 返回顶部 返回列表