matlab中的函数norminv可不可以用C语言实现?
对于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语言如何实现类似功能?
[解决办法]
好像没有
[解决办法]
先把思路整理清楚,再动手编程序,这样不容易乱。
[解决办法]
需要迭代,在数值上可以解决的
- C/C++ code
#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.1415926double 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");}