| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 469 人关注过本帖
标题:求解用IU分解法解线性方程组,编程怎么编?
只看楼主 加入收藏
爱生活爱奋斗
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-6-23
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
求解用IU分解法解线性方程组,编程怎么编?
IU分解法解线性方程组
2015-06-23 14:47
爱生活爱奋斗
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-6-23
收藏
得分:0 
2015-06-23 14:47
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
LU分解吧
程序代码:
//在VB中写的,转成c大概是这样
//LU分解,由系数矩阵a得到l和u
//需要先初始化对角阵l和u,n为阶数

...
  n=n-1;
  for(p=0;p<=n;p++)
    { for(m=p;m<=n;m++)
        { sum=0;
      for(k=0;k<=n;k++)
            { if (k!=p) sum=sum+l[p][k]*u[k][m]; }
          u[p][m]=(a[p][m]-sum)/l[p][p];
         }
       for(m=p+1;m<=n;m++)
         { sum=0;
       for(k=0;k<=n;k++)
             { if(k!=p) sum=sum+l[m][k]*u[k][p];}
           l[m][p]=(a[m][p]-sum)/u[p][p];
          }
     }

  sum=0;
  for(k=0;k<=n;k++)
     { if(k!=n) sum=sum+l[n][k]*u[k][n];}
    u[n][n]=(a[n][n]-sum)/l[n][n];

 ...


 //后面解线性方程,很容易自己考虑
这段代码在vc++中也测试过了。

[ 本帖最后由 lianyicq 于 2015-6-24 16:13 编辑 ]

大开眼界
2015-06-23 16:24
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:20 
程序代码:
#include <stdio.h>
#include <stdlib.h>

void main()
  {
    int i,j,n,p,m,k;
    int **a;
    float **l,**u;
    float sum;
    system("cls");
    printf("Please input matrix a's order:");
    scanf("%d",&n);
    printf("Matrix a's order is %d.\n",n);
/*Input n order 2-d array a*/
    printf("Please updata matrix a\n");
    a=(int**)malloc(sizeof(int*)*n);
    for(i=0;i<n;i++)
      a[i]=(int*)malloc(sizeof(int)*n);

    for(i=0;i<=n-1;i++)
    {  for(j=0;j<=n-1;j++)
          {  printf("a[%d][%d]=",i,j);
           scanf(" %d",&a[i][j]);
        }
    }

    printf("Matrix a is:\n");
    for(i=0;i<=n-1;i++)
      { for(j=0;j<=n-1;j++)printf("%d\t",a[i][j]);
        printf("\n");
      }
/*Create n order 2-D array l,u*/
    l=(float**)malloc(sizeof(float*)*n);
    for(i=0;i<n;i++)
      l[i]=(float*)malloc(sizeof(float)*n);

    u=(float**)malloc(sizeof(float*)*n);
    for(i=0;i<n;i++)
      u[i]=(float*)malloc(sizeof(float)*n);
    n--;
/*Initialize l and u */
  for(i=0;i<=n;i++)
    { for(j=0;j<=n;j++)
    { l[i][j]=i<j?0:1;
      u[i][j]=i>j?0:1;
         }
     }
  for(p=0;p<=n;p++)
    { for(m=p;m<=n;m++)
        { sum=0;
      for(k=0;k<=n;k++)
        { if (k!=p) sum+=l[p][k]*u[k][m]; }
          u[p][m]=(a[p][m]-sum)/l[p][p];
         }
       for(m=p+1;m<=n;m++)
         { sum=0;
       for(k=0;k<=n;k++)
         { if(k!=p) sum+=l[m][k]*u[k][p];}
           l[m][p]=(a[m][p]-sum)/u[p][p];
          }
     }

  sum=0;
  for(k=0;k<=n;k++)
     { if(k!=n) sum=sum+l[n][k]*u[k][n];}
    u[n][n]=(a[n][n]-sum)/l[n][n];

  printf("\nMatrix l is:\n");
  for(i=0;i<=n;i++)
    { for (j=0;j<=n;j++)
    { printf("%5.2f\t",l[i][j]); }
      printf("\n");
    }
  printf("\n");
  printf("Matrix u is:\n");
  for(i=0;i<=n;i++)
    { for (j=0;j<=n;j++)
    { printf("%5.2f\t",u[i][j]); }
      printf("\n");
    }
/*Free memory*/
    for(i-0;i<n+1;i++)
    { free(a[i]);free(l[i]);free(u[i]);}
    free(a);free(l);free(u);
   getch();
  }

大开眼界
2015-06-25 16:50
快速回复:求解用IU分解法解线性方程组,编程怎么编?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020275 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved