试编写求分布函数的通用函数

作者在 2006-12-29 02:36:00 发布以下内容

/*1. 试编写求分布函数的通用函数,调用格式为
Y=cdf(name,X,A)
Y=cdf(name,X,A,B)
Y=cdf(name,X,A,B,C)
返回参数为A,B,C的以name为分布的分布函数在X处的取值,name的值可为
bino--二项分布         poiss--泊松分布
unif--均匀分布         exp--指数分布
norm--正态分布
调用例:
 cdf('norm',2,3,2)
结果:0.3085
注:设X~N(3,22),求P{X不超过2}

*/
#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)
 result=0;
else if(x>=a&&x<b)
 result=(x-a)/(b-a);
else
 result=1;
return result;
}

float exp(float x,float o)   //指数分布
{float result;
  float e=2.718;//欧拉常量
  if(x>0)
  result=1-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=(/*从负无穷到x积分*/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:pri

作业草稿 | 阅读 996 次
文章评论,共0条
游客请输入验证码