【算法】高斯算法(1)

原创 2007年10月12日 09:44:00
高斯算法(1)
#include "stdio.h"
#include "math.h"
#include "stdlib.h"
void max_ele(double af[][21],int n,int k) /* 选主元 */
 {double max1,t;
   int i,j;
   max1=af[k][k]; i=k;
   for (j=k+1;j<=n;j++)
     if(fabs(af[j][k])>fabs(max1)) i=j;
   if(i>k)
     for (j=k;j<=n+1;j++)
       {t=af[i][j],af[i][j]=af[k][j],af[k][j]=t;}
 }
int gauss(double a[][20],double f[],double x[],int n)
/* Guass 消去法,引入af[20[21],x[]是为了不改变矩阵a[][],f[]
   及简化程序 */
 {int i,j,k;
 double af[20][21],del,t;
 for(i=1;i<=n;i++)
    { for(j=1;j<=n;j++) af[i][j]=a[i][j];
      af[i][n+1]=f[i];
    }
 for (k=1;k<n;k++)
    { max_ele(af,n,k);
      del=af[k][k];
      if (fabs(del)<1e-7)
       {printf("Single! press any key return.../n");
        getchar();
        return 0;}
      for (j=k;j<=n+1;j++) af[k][j]/=del;
      for (i=k+1;i<=n;i++)
       { t=af[i][k];
        for (j=k;j<=n+1;j++)
           af[i][j]-=af[k][j]*t;
       }
     }
 del=af[n][n];
 for (j=n;j<=n+1;j++) af[n][j]/=del;
 for (j=1;j<=n;j++) x[j]=af[j][n+1];
 for (i=n-1;i>0;i--)
    for (j=n;j>i;j--) x[i]-=x[j]*af[i][j];
 return 1;
 }
void test1()
 /* 检验 Guass消去法 */
 { double a[20][20], f[20],x[20];
   int i,j,n;
   printf("Input n(<20)");
   scanf("%d",&n);
   /* 随机生成系数矩阵及右端项,进行检验 */
   for (i=1;i<=n;i++)
      for (j=1;j<=n;j++) a[i][j]=(float)rand()/100.0;
   for (i=1;i<=n;i++)
     { for (j=1;j<=n;j++) printf("%8.4f ",a[i][j]);
       printf("/n");}
   for (i=1;i<=n;i++)
     { f[i]=0;
       for (j=1;j<=n;j++) f[i]+=a[i][j];
      }
   gauss(a,f,x,n);
   printf("the system solution is:/n");
   for (i=1;i<=n;i++) printf("%lf ",x[i]);
   printf("/n");
 }
int inver(double a[20][20],double e[20][20],int n)
 /* 用追赶法求三对角阵 a[][] 的逆 */
 {double ae[20][40],gamma,del;
 int i,j;
 gamma=-a[2][1];
 for (i=1;i<=n;i++)
    {for (j=1;j<=n;j++)
      { ae[i][j]=a[i][j]; ae[i][n+j]=0; }
      ae[i][n+i]=1;
     }
 for(i=1;i<=n-1;i++)
    {if((del=ae[i][i])==0) return 0;
     for (j=i;j<=n*2;j++)
       { ae[i][j]/=del; ae[i+1][j]+=ae[i][j]*gamma; }
     }
 del=ae[n][n];
 for(j=n;j<=n*2;j++)
    ae[n][j]/=del;
 for(i=1;i<=n;i++)
    {for (j=1;j<=2*n;j++)
       printf("%8.4f ",ae[i][j]);
    printf("/n");
    }
 for(i=n;i>1;i--)
    { del=ae[i-1][i];
      for (j=i;j<=n*2;j++)
       ae[i-1][j]-=ae[i][j]*del;
     }
 for (i=1;i<=n;i++)
    for (j=1;j<=n;j++)
      e[i][j]=ae[i][n+j];
 return 1;
 }
void mult(double a[][20],double e[][20],double f[][20],int n)
 {double s;
 int i,j,k;
 for (i=1;i<=n;i++)
    for (j=1;j<=n;j++)
      { s=0;
       for (k=1;k<=n;k++)
        s+=a[i][k]*e[k][j];
       if (fabs(s)<1e-7) s=fabs(s);
       f[i][j]=s;
      }
 }
void minus(double a[][20],double b[][20],double c[][20],int n)
 {int i,j;
 for (i=1;i<=n;i++)
    for (j=1;j<=n;j++)
      c[i][j]=a[i][j]-b[i][j];
 }
main()
{
 int i,j,n,m;
 double gamma,beta,beta1,a[20][20],b[20][20],c[20][20],d[20][20],
       e[20][20],f[20][20],deltag,deltax;
 double gx[20]={0,1,0,1,0,-1}, r[20][20],x[20];
 printf("请输入主梁数目,gamma,beta,beta1:/n");
 scanf("%d,%lf,%lf,%lf",&n,&gamma,&beta,&beta1);
 m=n-1;
 for (i=1;i<=m;i++)
   for (j=1;j<=m;j++)
     a[i][j]=b[i][j]=c[i][j]=d[i][j]=0;
 deltag=2*(1+gamma+beta);
 deltax=2*(gamma+3*beta1);
 printf("%8.4f %8.4f/n",deltag,deltax);
 for (i=1;i<=m;i++)
 { a[i][i]=deltax;
    b[i][i]=deltag;}
 for (i=1;i<=m-1;i++)
 { a[i][i+1]=a[i+1][i]=-gamma;
    b[i][i+1]=b[i+1][i]=gamma-1;
    c[i][i+1]=d[i+1][i]=gamma;
    c[i+1][i]=d[i][i+1]=-gamma;}
 inver(a,e,m);
 for (i=1;i<=m;i++)
   { for (j=1;j<=m;j++)
     printf("%6.3f ", e[i][j]);
     printf("/n"); }
 mult(c,e,f,m);
 mult(f,d,e,m);
 minus(b,e,r,m);
 gauss(r,gx,x,m);
 printf("The result is:/n");
 for (j=1;j<=m;j++)
   printf("%8.4f ", x[j]);
 printf("/n");
}
 

使用随机梯度算法对高斯核模型进行最小二乘学习法的MATLAB程序源码分析

n=50; N=1000; x=linspace(-3,3,n)'; X=linspace(-3,3,N)';pix=pi*x; y=sin(pix)./(pix)+0.1*x+0.05*randn(...
  • PeterZhuGe
  • PeterZhuGe
  • 2015年11月06日 14:42
  • 1504

高斯判别分析算法及其python实现

高斯判别分析算法及其python实现   http://m.blog.csdn.net/blog/u012300569/49560525 2015-6-8阅读260 评论0 高斯判别分析...
  • u012300569
  • u012300569
  • 2015年11月01日 21:22
  • 1385

斯坦福大学机器学习——EM算法求解高斯混合模型

EM算法(Expection-Maximizationalgorithm,EM)是一种迭代算法,通过E步和M步两大迭代步骤,每次迭代都使极大似然函数增加。但是,由于初始值的不同,可能会使似然函数陷入局...
  • linkin1005
  • linkin1005
  • 2014年11月17日 16:57
  • 23884

【cs229-Lecture5】生成学习算法:1)高斯判别分析(GDA);2)朴素贝叶斯(NB)

参考: cs229讲义 机器学习(一):生成学习算法Generative Learning algorithms:http://www.cnblogs.com/zjgtan/archive/20...
  • GaoShan1011
  • GaoShan1011
  • 2016年12月11日 11:32
  • 271

ESL-chapter8-EM算法介绍1-混合高斯的例子

EM算法是一种迭代算法,用于含有隐变量的概率模型的
  • u010198460
  • u010198460
  • 2014年07月25日 17:03
  • 505

斯坦福机器学习笔记1:GDA高斯判别分析算法的原理及matlab程序实现

用matlab实现matlab原理编程
  • Bazinga521
  • Bazinga521
  • 2017年07月28日 17:47
  • 457

高斯算法c语言

  • 2014年03月28日 17:36
  • 158KB
  • 下载

高斯-赛德尔算法

  • 2012年11月25日 12:00
  • 591B
  • 下载

高斯积分算法源代码

  • 2012年12月28日 00:24
  • 522B
  • 下载

MIT混合高斯模型EM算法

  • 2017年04月05日 17:45
  • 365KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【算法】高斯算法(1)
举报原因:
原因补充:

(最多只允许输入30个字)