现在的位置: 首页 > 综合 > 正文

列主元法解方程C++

2013年12月04日 ⁄ 综合 ⁄ 共 1745字 ⁄ 字号 评论关闭
//程序:张建波
#include "iostream.h"

double N[3][4]={
    {0.0001,0.5402,0.3425,0.8828},
    {1.235,2.567,0.9750,4.777},
    {1.024,2.001,4.555,7.580}};

void PRINT()
{
    //输出矩阵
    cout<<"/n----------------------------------/n";
    for(int i=0;i<3;i++)
    {
        for(int k=0;k<4;k++)
        {cout<<N[i][k]<<"        ";
        if(N[i][k]==0)cout<<"   ";
        }
        cout<<"/n";
    }
    cout<<"/n----------------------------------/n";

}

void f1()
{    //调整矩阵  按大到小顺序
    double TMP;
    int k=0;
    int p=0,q=0;
    //冒泡法
    for(int i=p;i<3;i++)  
        for(int j=p;j<3;j++) 
        {
            if(N[i][q]==N[j][q] && N[i][q]==0)
            {
                //如果 每行第 1 个元素已经为0 ,则 按第2元素排序
                //依次类推,如果第2元素也为0 则按第3 元素排序
                q++;               
            }
            else
            if(N[i][q]>N[j][q])
            {//按 关键 元素对行排序       
                for(k=0;k<4;k++)
                {
                    TMP=N[i][k];
                    N[i][k]=N[j][k];
                    N[j][k]=TMP;
                }           
           
            }
        }
}
void f2()
{
    //消元
    //变 第 1 个系数 为1

    int i;
    double a,T[4];

    //默认从第2行开始消,第1个开始消
    int R=1,L=0;   // R=行  L=列
    int q=0;
    int h=0;
    int n=1;

Loop:

    for(h=R;h<3;h++)
    {
       
        a=-N[h][q]/N[q][q];
        for(i=q;i<4;i++)
        {
            T[i]=N[q][i]*a;
            N[h][i]+=T[i];
        }
        cout<<"/n第 "<<n++<<"次消元/n";PRINT();
       
        if(h>0 && h<3 && N[h-1][q]==0 && N[h-1][q]==N[h][q])
        {
            f1();//排序
            q++;
            R++;
            PRINT();
            goto Loop;
        }
       
    }   
}

void f3()
{
    //迭代求根
    int n=0;
   
    double x2=(N[2][3]-N[2][1]-N[2][0])/N[2][2];

    double x1=(N[1][3]-N[1][2]*x2-N[1][0])/N[1][1];

    double x0=(N[0][3]-N[0][2]*x2-N[0][1]*x2)/N[0][0];

    cout<<"X0="<<x0<<" X1="<<x1<<" X2="<<x2<<endl;

}

void main()
{
    cout<<"原矩阵:/n";
    PRINT();
    cout<<"排序:/n";
    f1();//排序
    PRINT();
    f2();//消元
    PRINT();

    f3();

}

抱歉!评论已关闭.