已知实验数据和函数原型如下:
data = {{8.5, 0.828}, {12.5, 0.78}, {16.5, 0.741}, {20.4, 0.714}, {23.1, 0.66}, {29.4, 0.558}, {39.4, 0.491}, {49.4, 0.454}};
model = Integrate[(1 - x/r)^2*Exp[-(Log[r/b*Sqrt[1 + (a*a)/(b*b)]])^2/(2 Log[1 + (a*a)/(b*b)])]/(r*Sqrt[2*Pi*Log[1 + (a*a)/(b*b)]]), {r,0, Infinity}];
这是在Mathematica中输入的格式,函数原型可以参见上传的附件。其中a, b是参数,x是自变量。用Findfit求a和b时,Mathematica给出的结果不对:
{a -> 160.339, b -> 186.173}
合理值应该在a=299, b=247左右,在用所给值验证时,所得到的函数值为虚数:
f[a_, b_, x_, r_] :=Integrate[(1 - x/r)^2*Exp[-(Log[r/b*Sqrt[1 + (a*a)/(b*b)]])^2/(2 Log[1 + (a*a)/(b*b)])]/(r*Sqrt[2*Pi*Log[1 + (a*a)/(b*b)]]), {r,0, Infinity}];
f[160.339, 186.173, 8.5, r]
输出为:0.851972 - 4.76418*10^-15 I
不知道哪里可以改进,求高人指点!
另外我尝试用1st opt,但是也不成功:
Constant h=10000;
Parameters a,b;
Variables x,y;
Function y=int(sqr(1-x/r)*exp(-sqr(ln(r*sqrt(1+(a*a)/(b*b))/b))/(2*ln(1+(a*a)/(b*b))))/(r*sqrt(2*Pi*ln(1+(a*a)/(b*b)))),r=0,h);
Data;
8.5 0.828
12.5 0.78
16.5 0.741
20.4 0.714
23.1 0.66
29.4 0.558
39.4 0.491
49.4 0.454
提示函数表达式错误!求指点!!
![如何用给定的带有参数的函数拟合已知数据?]()
函数.png |