本人在
matlab下做了一个简单的正态分布拟合函数,根据输入的x,y序列得到mu和sigma的估计值,以及y序列的正态分布曲线拟合序列y1,matlab程序如下:
func
tion
[muhat,sigmahat,muci,sigmaci,y1]=normal_fit(x,y)
[muhat,sigmahat,muci,sigmaci]=normfit(y);
f=fit(x.',y.','gauss1');
y1 = f(x);
% y1 = f.a1 * exp(-((x-f.b1)/f.c1).*((x-f.b1)/f.c1));
%% a1=f.a1;
%% b1=f.b1;
%% c1=f.c1;
%% y1 = a1*exp(-((x-b1)/c1).*((x-b1)/c1)); %%% y1 = feval(f,x)';
将上述函数normal_fit(x,y)编入名为NormalFitClass的类中,生成.Net的dll,NormalFitClass.dll
C#调用如下:
using NormalFitClass;
using MWArray;
....
private void do()
{
double[] x = new double[12] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
double[] y = new double[12] {2, 6, 7, 9, 18, 33, 29, 16, 8, 5, 3, 1};
NormalFitClass.NormalFitClass NFC = new NormalFitClass.NormalFitClass();
MWNumericArray mx = (MWNumericArray)x;
MWNumericArray my = (MWNumericArray)y;
MWArray[] f = nfc.normal_fit(5, (MWArray)mx, (MWArray)my);
}
问题是C#调用的最后一句normal_fit()总是报错,
对于matlab函数中的y1,提示使用cfit错误;
对于matlab函数中%注释的y1,提示使用cfit错误;
对于matlab函数中%%注释的y1,提示使用subsref错误;
对于matlab函数中%%%注释的y1,也提示错误。
我只是想通过fit(x,y,'gauss1')返回一个拟合的高斯曲线,如何可以实现?
附:如果使用muhat和sigmahat值,用1/sqrt(2*pi)/sigmahat*exp(-((x-muhat).*(x-muhat)/2/sigmahat/sigmahat))来计算,所得高斯曲线不能与原y分布一致。
一周热门 更多>