level 4
ElevenYJF
楼主
这是我用NonlinearModelFit做的拟合,跑不出结果来,代码如下:
ClearAll["Global`*"];
data = {{1.8, 8.26365}, {2, 8.26669}, {2.25, 8.2327}, {2.5,
8.17323}, {2.75, 8.07695}, {3, 7.89004}, {3.25, 7.65782}, {3.5,
7.38312}, {3.75, 6.96965}, {4, 6.47689}, {4.25, 5.85103}, {4.5,
5.22516}, {4.75, 4.49169}, {5, 3.74122}, {5.25, 3.09553}, {5.5,
2.56879}, {5.75, 2.02222}, {6, 1.61159}, {6.23057, 1.21511}, {6.5,
0.83563}, {7.1, 0}};
k = 2*0.08617;
fit = NonlinearModelFit[data,
Piecewise[{{r*(a1*Tanh[(1.82*((1.018*(7.1/x - 1))^0.51))])*
Tanh[((a1*Tanh[(1.82*((1.018*(7.1/x - 1))^0.51))])/(k*
x))/(a1*0.09*r)] + (1 - r)*(a2*
Tanh[(1.82*((1.018*(4/x - 1))^0.51))])*
Tanh[((a2*Tanh[(1.82*((1.018*(4/x - 1))^0.51))])/(k*
x))/(a2*0.09*(1 - r))],
x < 4}, {r*(a1*Tanh[(1.82*((1.018*(7.1/x - 1))^0.51))])*
Tanh[((a1*Tanh[(1.82*((1.018*(7.1/x - 1))^0.51))])/(k*
x))/(a1*0.09*r)], x >= 4}}], {{a1, 1, 1.5}, {a2, 0.4,
0.8}, {r, 0, 1}}, x];
然后我用非常笨的For循环做了一个,精度小了跑不出理想的结果来,精度要求高了,跑半天没反应,代码如下:
ClearAll["Global`*"];
k = 2*0.8617;
data = {{1.8, 8.26365}, {2, 8.26669}, {2.25, 8.2327}, {2.5,
8.17323}, {2.75, 8.07695}, {3, 7.89004}, {3.25, 7.65782}, {3.5,
7.38312}, {3.75, 6.96965}, {4, 6.47689}, {4.25, 5.85103}, {4.5,
5.22516}, {4.75, 4.49169}, {5, 3.74122}, {5.25, 3.09553}, {5.5,
2.56879}, {5.75, 2.02222}, {6, 1.61159}, {6.23057, 1.21511}, {6.5,
0.83563}, {7.1, 0}};
t = 0;
For[a1 = 1, a1 < 1.5,
a1 = a1 + 0.001, {For[a2 = 0.4, a2 < 0.8,
a2 = a2 + 0.001, {For[r = 0.1, r < 1,
r = r + 0.001, {For[i = 1, i < 21,
i++, {m = data[[i, 1]], n = data[[i, 2]],
T1 = a1*Tanh[(1.82*((1.018*(7.1/m - 1))^0.51))],
T2 = a2*Tanh[(1.82*((1.018*(4/m - 1))^0.51))],
c1 = r*T1*Tanh[(T1/(k*m))/(a1*0.09*r)],
c2 = (1 - r)*T2*Tanh[(T2/(k*m))/(a2*0.09*(1 - r))],
If[m < 4, y = c1 + c2, y = c1], t = t + (n - y)^2}],
If[t < 100,
Print["a1=", a1, " a2=", a2, " r=", r, " t=", t]]}]}]}];
还有还有,我用1stopt这个软件也跑了,但拟合的结果太差了,也贴上代码:
Title "Type your title here";
Parameters a1[1,1.5],a2[0.4,0.8],r[0.1,0.9];
Variable x,y;
Constant k = 2*0.08617;
ConstStr T1 = a1*Tanh(1.82*Power((1.018*(7.1/x-1)),0.51));
ConstStr T2 = a2*Tanh(1.82*Power((1.018*(4/x-1)),0.51));
ConstStr c1 = r*T1*Tanh(T1/(k*x))/(a1*0.09*r);
ConstStr c2 = (1-r)*T2*Tanh(T2/(k*x))/(a2*0.09*(1-r));
Function y=if(x<=4,c1+c2,c1);
data;
1.88.26365
28.26669
2.258.2327
2.58.17323
2.758.07695
37.89004
3.257.65782
3.57.38312
3.756.96965
46.47689
4.255.85103
4.55.22516
4.754.49169
53.74122
5.253.09553
5.52.56879
5.752.02222
61.61159
6.230571.21511
6.50.83563
7.10
最后的最后,用Origin也试了试,但不知道分段函数应该怎么来表示
2017年03月11日 11点03分
1
ClearAll["Global`*"];
data = {{1.8, 8.26365}, {2, 8.26669}, {2.25, 8.2327}, {2.5,
8.17323}, {2.75, 8.07695}, {3, 7.89004}, {3.25, 7.65782}, {3.5,
7.38312}, {3.75, 6.96965}, {4, 6.47689}, {4.25, 5.85103}, {4.5,
5.22516}, {4.75, 4.49169}, {5, 3.74122}, {5.25, 3.09553}, {5.5,
2.56879}, {5.75, 2.02222}, {6, 1.61159}, {6.23057, 1.21511}, {6.5,
0.83563}, {7.1, 0}};
k = 2*0.08617;
fit = NonlinearModelFit[data,
Piecewise[{{r*(a1*Tanh[(1.82*((1.018*(7.1/x - 1))^0.51))])*
Tanh[((a1*Tanh[(1.82*((1.018*(7.1/x - 1))^0.51))])/(k*
x))/(a1*0.09*r)] + (1 - r)*(a2*
Tanh[(1.82*((1.018*(4/x - 1))^0.51))])*
Tanh[((a2*Tanh[(1.82*((1.018*(4/x - 1))^0.51))])/(k*
x))/(a2*0.09*(1 - r))],
x < 4}, {r*(a1*Tanh[(1.82*((1.018*(7.1/x - 1))^0.51))])*
Tanh[((a1*Tanh[(1.82*((1.018*(7.1/x - 1))^0.51))])/(k*
x))/(a1*0.09*r)], x >= 4}}], {{a1, 1, 1.5}, {a2, 0.4,
0.8}, {r, 0, 1}}, x];
然后我用非常笨的For循环做了一个,精度小了跑不出理想的结果来,精度要求高了,跑半天没反应,代码如下:
ClearAll["Global`*"];
k = 2*0.8617;
data = {{1.8, 8.26365}, {2, 8.26669}, {2.25, 8.2327}, {2.5,
8.17323}, {2.75, 8.07695}, {3, 7.89004}, {3.25, 7.65782}, {3.5,
7.38312}, {3.75, 6.96965}, {4, 6.47689}, {4.25, 5.85103}, {4.5,
5.22516}, {4.75, 4.49169}, {5, 3.74122}, {5.25, 3.09553}, {5.5,
2.56879}, {5.75, 2.02222}, {6, 1.61159}, {6.23057, 1.21511}, {6.5,
0.83563}, {7.1, 0}};
t = 0;
For[a1 = 1, a1 < 1.5,
a1 = a1 + 0.001, {For[a2 = 0.4, a2 < 0.8,
a2 = a2 + 0.001, {For[r = 0.1, r < 1,
r = r + 0.001, {For[i = 1, i < 21,
i++, {m = data[[i, 1]], n = data[[i, 2]],
T1 = a1*Tanh[(1.82*((1.018*(7.1/m - 1))^0.51))],
T2 = a2*Tanh[(1.82*((1.018*(4/m - 1))^0.51))],
c1 = r*T1*Tanh[(T1/(k*m))/(a1*0.09*r)],
c2 = (1 - r)*T2*Tanh[(T2/(k*m))/(a2*0.09*(1 - r))],
If[m < 4, y = c1 + c2, y = c1], t = t + (n - y)^2}],
If[t < 100,
Print["a1=", a1, " a2=", a2, " r=", r, " t=", t]]}]}]}];
还有还有,我用1stopt这个软件也跑了,但拟合的结果太差了,也贴上代码:
Title "Type your title here";
Parameters a1[1,1.5],a2[0.4,0.8],r[0.1,0.9];
Variable x,y;
Constant k = 2*0.08617;
ConstStr T1 = a1*Tanh(1.82*Power((1.018*(7.1/x-1)),0.51));
ConstStr T2 = a2*Tanh(1.82*Power((1.018*(4/x-1)),0.51));
ConstStr c1 = r*T1*Tanh(T1/(k*x))/(a1*0.09*r);
ConstStr c2 = (1-r)*T2*Tanh(T2/(k*x))/(a2*0.09*(1-r));
Function y=if(x<=4,c1+c2,c1);
data;
1.88.26365
28.26669
2.258.2327
2.58.17323
2.758.07695
37.89004
3.257.65782
3.57.38312
3.756.96965
46.47689
4.255.85103
4.55.22516
4.754.49169
53.74122
5.253.09553
5.52.56879
5.752.02222
61.61159
6.230571.21511
6.50.83563
7.10
最后的最后,用Origin也试了试,但不知道分段函数应该怎么来表示
