zoukankan      html  css  js  c++  java
  • 2-2 LU crout 分解

    #include <math.h>
    #include "..CommonFiles
    rutil.h"
    #define TINY 1.0e-20;
    
    /* Crout算法
    ** indx为输出向量,保存部分主元法而改变了行的行排列顺序
    ** 输出向量d为±1,表示行交换次数为偶数还是为奇数
    */
    void ludcmp(float **a, int n, int *indx, float *d) {
        int i,imax,j,k;
        float big,dum,sum,temp;
        float *vv;              /* 用于保存每行的内含比例因子*/
    
        vv=vector(1,n);
    
        *d=1.0;
        for (i=1; i<=n; i++) {  /* 按行循环,求内含比例因子(每一行最大元素的倒数)*/
            big=0.0;
            for (j=1; j<=n; j++)
                if ((temp=fabs(a[i][j])) > big) big=temp;
            if (big == 0.0) nrerror("Singular matrix in routine ludcmp");
            vv[i]=1.0/big;
        }
    
        for (j=1; j<=n; j++) {            /* 外层列循环*/
            for (i=1; i<j; i++) {        /* 上三角部分*/
                sum=a[i][j];
                for (k=1; k<i; k++) 
                    sum -= a[i][k]*a[k][j];
                a[i][j]=sum;
            }
            big=0.0;                       /* 初始化最大主元*/
            for (i=j; i<=n; i++) {      /* i >= j 下三角部分*/
                sum=a[i][j];
                for (k=1; k<j; k++)
                    sum -= a[i][k]*a[k][j];
                a[i][j]=sum;
                if ( (dum=vv[i]*fabs(sum)) >= big) {
                    big=dum;
                    imax=i;
                }
            }
            if (j != imax) {            /* 是否进行交换?*/
                for (k=1; k<=n; k++) {
                    dum=a[imax][k];
                    a[imax][k]=a[j][k];
                    a[j][k]=dum;
                }
                *d = -(*d);             /* 改变d的奇偶性*/
                vv[imax]=vv[j];
            }
            indx[j]=imax;
            if (a[j][j] == 0.0) a[j][j]=TINY;
            if (j != n) {
                dum=1.0/(a[j][j]);
                for (i=j+1; i<=n; i++) a[i][j] *= dum;
            }
        }
    
        free_vector(vv,1,n);
    }
    #undef TINY
  • 相关阅读:
    spring注解事务管理
    Spring切入点表达式常用写法
    JPA和事务管理
    maven仓库
    struts2拦截器
    js中 转义字符
    jquery中变量加$和不加$有什么区别!
    spring大乱炖
    第一章 java多线程
    CS:APP 05 笔记
  • 原文地址:https://www.cnblogs.com/dLong/p/4477945.html
Copyright © 2011-2022 走看看