试编写求概率密度或分布律的通用函数

作者在 2006-12-20 19:59:00 发布以下内容

/*1. 试编写求概率密度或分布律的通用函数,调用格式为
Y=pdf(name,X,A)
Y=pdf(name,X,A,B)
Y=pdf(name,X,A,B,C)
返回参数为A,B,C的以name为分布的概率密度或分布律在X处的取值,name的值可为
bino——二项分布         poiss——泊松分布
unif——均匀分布         exp——指数分布
norm——正态分布
调用例:
 pdf(‘norm’,0.7733,0,1)
结果:0.2958
注:即求标准正态分布密度函数在0.7733的值.
*/
#include<stdio.h>
#include<stdlib.h>

float chengfang(float a,int x)    //求a的x次方的值
{
 int i;
 float u=1;
 for(i=1;i<=x;i++)
 u=u*a;
 return u;
}

float jiecheng(float a)       //求a的阶乘的值
{ float u=1;
 while(a>=1)
 {
  u=u*a;
  a--;
 }
return u;
}


float bino(int k,int n,float p)    //二项分布,参数n,p,在k处取值
{float result;
 result=jiecheng(k)/(jiecheng(n)*jiecheng(n-k))*chengfang(p,k)*chengfang(1-p,n-k);
 return result;
}

float poiss(int k,int v)                   //泊松分布,参数v
{int result;
float e=2.718;//欧拉常量
 result=chengfang(v,k)*chengfang(e,-v)/jiecheng(k);
 return result;
}

float unif(float x,float a,float b)               //均匀分布,参数a,b
{float result;
if(x>a&&x<b)
 result=1/(b-a);
else
 result=0;
return result;
}

float exp(float x,float o)   //指数分布
{float result;
  float e=2.718;//欧拉常量
  if(x>0)
  result=chengfang(e,-x/o)/o;
  else
   result=0;
  return result;
}

float norm(float x,float u,float o)    //正态分布
{float result;
  float e=2.718;//欧拉常量
  result=chengfang(e,-chengfang(x-u,2)/2*chengfang(o,2))/(1.414*1.7724*o);
  return result;
}
void main()
{int name;
int k,n;
float x,p,v,a,b,o,u;
 printf("请输入你要查询的分布类型代号\n(1——二项分布;2——泊松分布;3——均匀分布;4——指数分布;5——正态分布):\n");
 scanf("%d",&name);
 printf("\n");
 switch(name)
 {
 case(1):printf("请输入二项分布的参数n和p:");
    scanf("%f%f",&n,&p);
    printf("\n");
    printf("请输入在何处取值,即k值:");
    scanf("%d",&k);
    printf("\n结果是:%f\n",bino(k,n,p));
  
    break;
 case(2):printf("请输入泊松分布的参数v:");
    scanf("%f",&v);
    printf("请输入在何处取值,即k值:");
    scanf("%d",&k);
 printf("\n结果是:%f\n",poiss(k,v));
    break;

 case(3):printf("请输入均匀分布的参数a和b:");
    scanf("%f%f",&a,&b);
    printf("请输入在何处取值,即k值:");
    scanf("%f",&x);
 printf("\n结果是:%f\n",unif(x,a,b));
   
    break;
 case(4):printf("请输入指数分布的参数o:");
    scanf("%f",&o);
    printf("请输入在何处取值,即k值:");
    scanf("%f",&x);
 printf("\n结果是:%f\n",poiss(x,o));
    
    break;
 case(5):printf("请输入正态分布的参数u和o:");
    scanf("%f%f",&u,&o);
    printf("请输入在何处取值,即k值:");
    scanf("%f",&x);
 printf("\n结果是:%f\n",norm(x,u,o));
   
    break;
 default:printf("你输入错误!");
 }  
}

学习生活 | 阅读 2542 次
文章评论,共0条
游客请输入验证码