在c ++中进行LU分解

时间:2012-05-10 13:18:27

标签: c++ arrays

我目前正在使用一些带有代码的probs将数组分解为上(u)和下(l)数组。

我正在使用doolittle方法

我的代码:

#include <iostream>

using namespace std;

int main(){

    double a[10][10];
    double l[10][10];
    double u[10][10];
    double som=0;
    int RANG;
    cin >> RANG;
    for(int i=0; i<RANG; i++){
            for(int j=0; j<RANG;j++){
                    cin >> a[i][j];
            }
    }
    for(int i=0; i<RANG; i++){
            for(int j=0; j<RANG;j++){
                    u[i][j]=0;
                    l[i][j]=0;
            }
    }

    for(int i=0;i<RANG;i++) {
    l[i][i]=1;

        for(int j=i;j<RANG;j++) {
            for(int s=0;s<i-1;s++) {
                som+= l[i][s]*u[s][j];
            }
            u[i][j]=a[i][j]-som;
        }

        for(int k=i+1;k<RANG;k++) {
            double som=0;
            for(int s=0;s<i-1;s++) {
                som+=l[k][s]*u[s][i];
            }
            l[k][i]=(a[k][i]-som)/u[i][i];
        }
     }
     cout << "l:" << endl;
    for(int i=0; i<RANG; i++){
            for(int j=0; j<RANG;j++){
                    cout << l[i][j] << "\t";
            }
            cout << endl << endl;
    }
    cout << "u: " << endl;
        for(int i=0; i<RANG; i++){
            for(int j=0; j<RANG;j++){
                    cout << u[i][j] << "\t";
            }
            cout << endl << endl;
    }
    return 0;
}

如果可以,请帮助......

PS:不确定它是否属于这里,可能在数学网站上更好

3 个答案:

答案 0 :(得分:2)

看看http://download.intel.com/design/PentiumIII/sml/24504601.pdf它是否有完整的解决方案和源代码!

答案 1 :(得分:1)

您可能想要查看QuantLib。 http://quantlib.org/index.shtml

以下是使用QuantLib库分解3x3阵列的代码示例。它使用Cholesky分解,但也许它会有所帮助。 http://quantcorner.wordpress.com/2011/02/20/matrix-decomposition-with-quantlib/

答案 2 :(得分:-3)

检查你的&#39;迭代应该是 for(int s = 0; s