拟合返回非实数错误(Mathematica)

拟合返回非实数错误(Mathematica),math,wolfram-mathematica,physics,curve-fitting,data-fitting,Math,Wolfram Mathematica,Physics,Curve Fitting,Data Fitting,我正在尝试使用一个包含3个参数(T,p,alpha)的函数来拟合2个参数(p,alpha)。该函数依赖于一系列其他函数(导数、积分、对数等)。我得到这个错误:不是一个在{a,b}={1,1.}处维数为{111}的实数列表 代码如下: deltaData = {{1.00, 0}, {0.96, 0.3416}, {0.92, 0.4749}, {0.88, 0.5715}, {0.84, 0.648}, {0.80, 0.711}, {0.76, 0.764}, {0.72, 0.8089},

我正在尝试使用一个包含3个参数(
T
p
alpha
)的函数来拟合2个参数(
p
alpha
)。该函数依赖于一系列其他函数(导数、积分、对数等)。我得到这个错误:
不是一个在{a,b}={1,1.}处维数为{111}的实数列表

代码如下:

deltaData = {{1.00, 0}, {0.96, 0.3416}, {0.92, 0.4749}, {0.88, 0.5715}, {0.84, 0.648}, {0.80, 0.711}, {0.76, 0.764}, {0.72, 0.8089}, {0.66, 0.864}, {0.62, 0.8939}, {0.58, 0.919}, {0.54, 0.9399}, {0.50, 0.9569}, {0.46, 0.9704}, {0.42, 0.9809}, {0.38, 0.9885}, {0.34, 0.9938}, {0.30, 0.9971}, {0.26, 0.9989}, {0.22, 0.9997}, {0.16, 1}, {0.14, 1}};

deltaFit = NonlinearModelFit[deltaData, (1 + a*T + c*T^2 + e*T^3 + g*T^4 + i*T^5 + k*T^6)/(1 + b*T + d*T^2 + f*T^3 + h*T^4 + j*T^5 + l*T^6), {a, b, c, d, e, f, g, h, i, j, k, l}, T];

data = {{0.203, 0.031}, {0.203, 0.030}, {0.246, 0.055}, {0.267, 0.072}, {0.300, 0.105}, {0.300, 0.105}, {0.330, 0.147}, {0.373, 0.214}, {0.397, 0.255}, {0.415, 0.293}, {0.445, 0.351}, {0.477, 0.430}, {0.493, 0.463}, {0.520, 0.538}, {0.541, 0.590}, {0.582, 0.717}, {0.589, 0.733}, {0.625, 0.847}, {0.645, 0.911}, {0.685, 1.029}, {0.688, 1.043}, {0.730, 1.181}, {0.751, 1.247}, {0.782, 1.338}, {0.793, 1.375}, {0.830, 1.472}, {0.856, 1.531}, {0.878, 1.585}};
AlphaBCS = 1.746;

(* Functions to obtain fit function *)
delta[T_, p_, alpha_] := p*deltaFit[T] + (1 - p)*deltaFit[T]/alpha;
fx[T_, x_, p_, alpha_] := (Exp[AlphaBCS/T*(x^2 + delta[T, p, alpha]^2)^(1/2)] + 1)^(-1);
Ses[T_, p_, alpha_] := -6*AlphaBCS/Pi^2*NIntegrate[fx[T, x, p, alpha]*Log[fx[T, x, p, alpha]] + (1 - fx[T, x, p, alpha])*Log[1 - fx[T, x, p, alpha]], {x, 0, 100}];
dSes[T_, p_, alpha_] = D[Ses[T, p, alpha], T];
Ces[T_, p_, alpha_] := T*dSes[T, p, alpha];

(* Test Plot *)
Show[ListPlot[data], Plot[Ces[T, 0.5, 1.746], {T, 0.015, .95}], Frame -> True]

(* Fit *)
nlm = NonlinearModelFit[data, Ces[T, p, alpha], {{p, 0.5}, {alpha, 0.5}}, T];
Normal[nlm]
nlm["ParameterTable"]

Show[ListPlot[data], Plot[nlm[T], {T, 0.015, .95}], Frame -> True]

有人知道我如何使拟合工作(为
p
alpha
获得正确的值)吗?

对于expHCap感到抱歉-您可以使用数据代替!关于ListPlot:如果我不使用:=for DSE[],则列表图有效。但是,如果我使用:=它不起作用。你认为这个问题怎么解决?谢谢你的回答。您认为更改D或N积分会有所不同吗?从您的
非线性模型来看,
T
似乎是一个变量,没有赋值。因此
delta
fx
具有变量
T
。如果
fx
足够简单,那么
Integrate
将处理表达式中的变量。结果中仍然包含变量
T
。然后你就可以区分
T
,只要它从未被赋值。然后你可以
T
范围绘制
曲线。然后对数据进行
非线性模型拟合。一切都很好,但是被积函数太复杂了,
Integrate
无法找到闭式解。另一方面,
NIntegrate
可以找到没有简单闭式符号解的近似值。但是要使用
NIntegrate[stuff,{x,0100}]
除了
x
之外,stuff中的所有内容,包括
T
,都必须事先指定恒定的数值。这似乎打破了你的分化步骤。我还没有找到一种方法来重新表述你的问题,从而从两个方向上解决这个问题。这一切有意义吗?你能想办法重写这个问题来克服这个问题吗?