追赶法求三对角矩阵

#include <iostream>

using namespace std;

int main()
{
    //初始化
    cout<<"请输入对三角矩阵中的非零数,用‘Z’表示结束"<<endl;
    char temp[200];
    int N;
    for(int i=0; ; i++)
    {
        cin>>temp[i];
        N=i+1;
        if(temp[i]=='z'||temp[i]=='Z')
            break;
    }
    int n=(N+2)/3;
    double A[N],B[n];
   cout<<"请输入结果矩阵的值"<<endl;
   for(int i=0; i<n; i++)
    {
        cin>>B[i];
    }
    for(int i=0; i<N; i++)
    {
       A[i]=temp[i]-'0';
    }
    double a[n],b[n-1],c[n-1];
    for(int i=0, j=0,k=0,l=1; i<N; i++)
    {
        if(i%3==0)       //初始化a[]
        {
            a[j]=A[i];
            j++;
        }
        else if(i%3==1)  //初始化c[]
        {
            c[k]=A[i];
            k++;
        }
        else            //初始化b[]
        {
            b[l]=A[i];
            l++;
        }
    }

    //计算p,q,存入a c
    c[0]=c[0]/a[0];
    for(int i=1; i<n; i++)
    {
        a[i]=a[i]-b[i]*c[i-1];//此时a[i]表示p[i]
        c[i]=c[i]/a[i];//此时c[i]表示q[i]
    }
   /* cout<<"计算得:"<<endl<<"p[]=";
    for(int i=1; i<n; i++)
    {
        cout<<a[i]<<" ";

    }
    cout<<endl<<"q[]=";
    for(int i=1; i<n; i++)
    {
        cout<<c[i]<<" ";

    }
    cout<<endl;*/
    double y[n]= {0};
    y[0]=B[0]/a[0];

    for(int i=1; i<n; i++)
    {
        y[i]=(B[i]-b[i]*y[i-1])/a[i];

    }
    double x[n]= {0};
    x[n-1]=y[n-1];
    for(int i=n-2; i>=0; i--)
    {
        x[i]=y[i]-c[i]*x[i+1];

    }
    cout<<"解得:"<<endl;
    for(int i=0; i<n; i++)
    {
        cout<<    "x["<<i+1<<"]="<<" "<<    ( (double)( (int)( (x[i]+0.0005)*1000 ) ) )/1000     <<endl;

    }


    return 0;
}

 

posted on 2016-11-18 17:36  江南烟雨尘  阅读(1798)  评论(0编辑  收藏  举报

导航