matlab中的函数norminv可不可以用C语言实现?

jin_orchid 2012-08-06 05:48:53
对于matlab中的函数norminv,C语言中有没有函数可以完成类似的功能?没有的话,用C语言要如何实现呢?

matlab中的函数norminv
X = NORMINV(P,MU,SIGMA),其中,P取概率。MU取均值。SIGMA取方差。然后返回值X就是指满足均值为MU,方差为SIGMA的高斯分布的累计概率密度值。即F(a)=P,返回值就是a。
至于F的含义:对连续函数,所有小于等于a的值,其出现概率的和为F(a)=P(x<a)

C语言如何实现类似功能?
...全文
516 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
楚靖靖 2014-04-02
  • 打赏
  • 举报
回复
我现在要用Java来写matlab里的gaminv函数,可否提点建议啊》?
楚靖靖 2014-04-02
  • 打赏
  • 举报
回复
LS好厉害啊!
jin_orchid 2012-08-10
  • 打赏
  • 举报
回复
哇,LS好强大,受教了,我回去慢慢研究!
jin_orchid 2012-08-07
  • 打赏
  • 举报
回复
那么要自己写的话如何下手呢?新手求指点
白雷 2012-08-07
  • 打赏
  • 举报
回复
好像没有
pois 2012-08-07
  • 打赏
  • 举报
回复
需要迭代,在数值上可以解决的

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

#define SMALL (-100)
#define LARGE (100)
#define DETA 0.00001
#define PREC 0.00001
#define E 2.718281828459
#define PI 3.1415926

double func(double x, double u, double o)
{
double temp1 = (x-u) / o;
double temp2 = -1 * temp1 * temp1 / 2;
double temp3 = pow(E, temp2) / o;
double temp4 = 1/ pow(2*PI, 0.5) * temp3;

return temp4;
}

void main()
{
double P = 0.5;
double u = 1;
double o = 1;

double const dLowLimit = SMALL;
double const dHighLimit = LARGE;
double const dDeta = DETA;

double dSum = 0;
double di = -100000000;

for(double i=dLowLimit; i+dDeta <= dHighLimit; i+=dDeta){
dSum += func(i, u, o) * dDeta;

if(fabs(dSum - P) <= PREC){
di = i;
break;
}
}

printf("%lf\n", di);
system("pause");
}
proorck6 2012-08-07
  • 打赏
  • 举报
回复
先把思路整理清楚,再动手编程序,这样不容易乱。

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧