我尝试使用类概念为3 * 3矩阵编写高斯消除程序。但是这段代码每次显示0 0 0结果? [英] I tried to write gauss eleimination program for 3*3 matrix using classes concept.But this code is every time showing 0 0 0 result ?

查看:90
本文介绍了我尝试使用类概念为3 * 3矩阵编写高斯消除程序。但是这段代码每次显示0 0 0结果?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

#include<iostream>
#include<string>
#include<cmath>
#include<vector>


using namespace std;


class matrix{

private:
int row;
int coloumn;
double * x;

public:
matrix();
matrix(int nrow,int ncol);
double * gaussElimination(double **a , double *b,matrix & u);
~matrix();


};

matrix::matrix()
{
    row=0 ;
    coloumn=0;
    x=NULL;
}

matrix::~matrix()
{delete x;}

matrix::matrix(int nrow,int ncol)
{
    row=nrow;
    coloumn= ncol;
    for (int i=0;i<row;i++)
        {x=new double [row+1];}
}

double * matrix:: gaussElimination (double ** a,double *b,matrix & u)
{
    int m,n,i,j,k;
    m=u.row;
    n=u.coloumn;
    
    a=new double * [m+1];
    b=new double  [m+1];
    
    for (i=1;i<n;i++)
    {
         a[i]=new double [n+1];
    }

    // row operations
    double Sum,ratio;
    for (k=1;k<=m-1;k++)
        for (i=k+1;i<=m;i++)
        {
            ratio=a[i][k]/a[k][k];
            for (j=1;j<=m;j++)
                a[i][j] -= ratio*a[k][j];
            b[i] -= ratio*b[k];
        }
    
    // backward substitutions
    for (i=m;i>=1;i--)
    {
        Sum=0;
        x[i]=0;
        for (j=i;j<=m;j++)
            Sum += a[i][j]*x[j];
        x[i]=(b[i]-Sum)/a[i][i];
    }
    
    cout<<endl;
    
    return x;
    
    for (i=0;i<=m;i++)
    {delete a[i];}
    delete a,x,b;
    

}

int main(){

    const int m=3,n=3; //row,col
    double **amatrix,*bmatrix;
    
    amatrix=new double * [m+1];
    bmatrix=new double  [m+1];
    
    for (int i=0;i<n;i++)
    {
         amatrix[i]=new double [n+1];
    }
    
    //double amatrix[m][n],bmatrix[m];
    
    for (int j=0;j<m;j++)
    {
        bmatrix[0]=2;bmatrix[1]=10;bmatrix[2]=4;
        for (int i=0;i<n;i++)
        {
            amatrix[0][0]=10;amatrix[0][1]=2;amatrix[0][2]=3;
            amatrix[1][0]=2;amatrix[1][1]=1;amatrix[1][2]=2;
            amatrix[2][0]=3;amatrix[2][1]=50;amatrix[2][2]=2;
        }
    }
    
    matrix matrix1;
    matrix();
    matrix(m,n);
    
    for (int i=0;i<m;i++)
        {cout<<matrix1.gaussElimination(amatrix,bmatrix,matrix1)<<endl;}
    
    for (int i=0;i<=m;i++)
    {delete amatrix[i];}
    delete amatrix,bmatrix;
    

}

推荐答案

显然,你的代码不符合你的期望,那里这是一个通用的解决方案:

在调试器上运行你的代码,看看它到底在做什么。

你会看到某个地方,它没有达到预期的效果。



你会学到很多有价值的东西。
Obviously, your code don't do what you expect, there is 1 general solution to this:
Run your code on debugger and see what it is really doing.
You will see that somewhere, it don't do what you expect.

And you will learn a lot of valuable things.


这篇关于我尝试使用类概念为3 * 3矩阵编写高斯消除程序。但是这段代码每次显示0 0 0结果?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆