linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > c/c++/c# >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·Windows/Linux下配置Eclipse+C
·VC++(Ctime日期函数)应用
·c语言static与extern的用法
·C#发送Email邮件方法总结
·typedef struct和struct的区别
·C/C++对文件操作
·struct的初始化,拷贝及指针成
·C常用算法程序实例-线性代数方
·C语言入门实例 switch使用
·c++二叉树实现源代码
·对初学者的建议:如何学习C语言
·使用C/C++扩展Python
·C++ Builder 处理控件中的文本
·一道C#面试题目引发的思考
·C++ Builder 创建程序包和DLL方
最新文章
·使用C/C++扩展Python
·C语言入门实例 switch使用
·在C#里实现DATAGRID的打印预览
·如何使用 Visual C# .NET 创建
·C#发送Email邮件方法总结
·一道C#面试题目引发的思考
·c语言艺术清屏
·c语言static与extern的用法
·大数的阶乘算法
·C#编码好习惯
·构造函数,复制构造函数
·typedef struct和struct的区别
·struct的初始化,拷贝及指针成
·超强的指针学习笔记推荐
·STL中erase方法对链表类容器的
Google
 
C常用算法程序实例-线性代数方程组的求解
[ 作者:  加入时间:2007-10-05 22:18:07  来自:Linux联盟收集整理 ]

1线性代数方程的求解

1.1 [主元]高斯消去法

 

例:求解4方程

-------------------------------------------------------  

/* AGAUS0.c */  主函数,调用AGAUS.c中的agaus(a,b,n)函数

------------------------------------------------------- 

  #include "stdio.h"
  #include "agaus.c"
  main()
  { int i;
    static double a[4][4]=   
           { {0.2368,0.2471,0.2568,1.2671},
             {0.1968,0.2071,1.2168,0.2271},
             {0.1581,1.1675,0.1768,0.1871},
             {1.1161,0.1254,0.1397,0.1490} };

    static double b[4]={1.8471,1.7471,1.6471,1.5471};
    if (agaus(a,b,4)!=0)
      for (i=0;i<=3;i++)
        printf("x(%d)=%e\n",i,b[i]);
  }
/*****************************************************/

 

-------------------------------------------------------  

/* AGAUS.c */

本函数返回一个整型标志位。

若返回的标志位为0,则表示原方程组的系数矩阵奇异,输出

信息"fail";

若返回的标志位不为0,则表示正常返回。

其中a为双精度实型二维数组,为n*n。存放方程组的系数矩阵,

返回时将被破坏。

    b为双精度实型一维数组,长度为n。存放方程组右端的常数

向量;返回方程组的解向量。

    n为整型变量。存放方程组的阶数。

-------------------------------------------------------  
  #include "stdlib.h"
  #include "math.h"
  #include "stdio.h"
  int agaus(a,b,n)
  int n;
  double a[],b[];
  { int *js,l,k,i,j,is,p,q;
    double d,t;
    js=malloc(n*sizeof(int));
    l=1;
    for (k=0;k<=n-2;k++)
      { d=0.0;
        for (i=k;i<=n-1;i++)
          for (j=k;j<=n-1;j++)
            { t=fabs(a[i*n+j]);
              if (t>d) { d=t; js[k]=j; is=i;}
            }
        if (d+1.0==1.0) l=0;
        else
          { if (js[k]!=k)
              for (i=0;i<=n-1;i++)
                { p=i*n+k; q=i*n+js[k];
                  t=a[p]; a[p]=a[q]; a[q]=t;
                }
            if (is!=k)
              { for (j=k;j<=n-1;j++)
                  { p=k*n+j; q=is*n+j;
                    t=a[p]; a[p]=a[q]; a[q]=t;
                  }
                t=b[k]; b[k]=b[is]; b[is]=t;
              }
          }
        if (l==0)
          { free(js); printf("fail\n");
            return(0);
          }
        d=a[k*n+k];
        for (j=k+1;j<=n-1;j++)
          { p=k*n+j; a[p]=a[p]/d;}
        b[k]=b[k]/d;
        for (i=k+1;i<=n-1;i++)
          { for (j=k+1;j<=n-1;j++)
              { p=i*n+j;
                a[p]=a[p]-a[i*n+k]*a[k*n+j];
              }
            b[i]=b[i]-a[i*n+k]*b[k];
          }
      }
    d=a[(n-1)*n+n-1];
    if (fabs(d)+1.0==1.0)
      { free(js); printf("fail\n");
        return(0);
      }
    b[n-1]=b[n-1]/d;
    for (i=n-2;i>=0;i--)
      { t=0.0;
        for (j=i+1;j<=n-1;j++)
          t=t+a[i*n+j]*b[j];
        b[i]=b[i]-t;
      }
    js[n-1]=n-1;
    for (k=n-1;k>=0;k--)
      if (js[k]!=k)
        { t=b[k]; b[k]=b[js[k]]; b[js[k]]=t;}
    free(js);
    return(1);
  }

/*****************************************************/

Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·DELPHI中操作ACCESS技巧集  (2007-10-30 16:08:48)
 ·动态创建、压缩Access数据库(*.MDB)  (2007-10-30 16:08:12)
 ·如何同步两个TRichEdit的滚动条?  (2007-10-30 15:53:15)
 ·创建漂亮的气球提示(balloon tooltips)  (2007-10-30 15:52:37)
 ·Delphi中树型控件的使用技巧  (2007-10-30 15:41:50)
 ·Delphi的嵌入式asm: Byte快速转换为16进制  (2007-10-30 15:40:20)
 ·如何得到硬盘物理序号  (2007-10-30 15:38:20)
 ·获取网络工作组名称  (2007-10-30 15:22:07)
 ·监视当前网络的流量  (2007-10-30 15:21:38)
 ·动态改变/添加网络设置中的TCP/IP的DNS 地址  (2007-10-30 15:19:25)