具有两个参数的方程的曲线拟合
Curve Fitting for equation with two parameters
我有两个数组:
E= [6656400;
13322500;
19980900;
26625600;
33292900;
39942400;
46648900;
53290000]
和
J=[0.0000000021;
0.0000000047;
0.0000000128;
0.0000000201;
0.0000000659;
0.0000000748;
0.0000001143;
0.0000001397]
我想通过应用这个等式为上述数据找到合适的曲线拟合:
J=A0.*(298).^2.*exp(-(W-((((1.6e-19)^3)/(4*pi*2.3*8.854e-12))^0.5).*E.^0.5)./((1.38e-23).*298))
我想selectW的起始值从1e-19
我已经试过曲线拟合工具,但它没有帮助我解决它!
然后,我 select 编辑了一些 A0=1.2e9 和 W=2.243e-19 的随机值,它给了我更好的结果。但我想通过使用代码(不是曲线拟合应用程序)找到正确的值
你能帮帮我吗?
一种快速(并且可能很简单)的解决方法是将曲线拟合作为最小化问题。
定义一个以拟合参数为参数的相关函数:
% x(1) == A0; x(2) == W
Jfunc = @(x) x(1).*(298).^2.*exp(-(x(2)-((((1.6e-19)^3)/(4*pi*2.3*8.854e-12))^0.5).*E.^0.5)./((1.38e-23).*298));
然后一个objective函数最小化。由于您有数据 J
,我们将最小化数据与相关性之间差异的平方和:
Objective = @(x) sum((Jfunc(x) - J).^2);
然后尝试使用 fminsearch
:
最小化 objective
x0 = [1.2E9;2.243E-19];
sol = fminsearch(Objective,x0);
我使用了你给出的猜测。对于非线性解决方案,良好的初步猜测对于收敛通常很重要。
如果您有优化工具箱,您也可以尝试 lsqcurvefit
or lsqnonlin
(fminsearch
是 vanilla MATLAB)。
我有两个数组:
E= [6656400;
13322500;
19980900;
26625600;
33292900;
39942400;
46648900;
53290000]
和
J=[0.0000000021;
0.0000000047;
0.0000000128;
0.0000000201;
0.0000000659;
0.0000000748;
0.0000001143;
0.0000001397]
我想通过应用这个等式为上述数据找到合适的曲线拟合:
J=A0.*(298).^2.*exp(-(W-((((1.6e-19)^3)/(4*pi*2.3*8.854e-12))^0.5).*E.^0.5)./((1.38e-23).*298))
我想selectW的起始值从1e-19
我已经试过曲线拟合工具,但它没有帮助我解决它!
然后,我 select 编辑了一些 A0=1.2e9 和 W=2.243e-19 的随机值,它给了我更好的结果。但我想通过使用代码(不是曲线拟合应用程序)找到正确的值
你能帮帮我吗?
一种快速(并且可能很简单)的解决方法是将曲线拟合作为最小化问题。
定义一个以拟合参数为参数的相关函数:
% x(1) == A0; x(2) == W
Jfunc = @(x) x(1).*(298).^2.*exp(-(x(2)-((((1.6e-19)^3)/(4*pi*2.3*8.854e-12))^0.5).*E.^0.5)./((1.38e-23).*298));
然后一个objective函数最小化。由于您有数据 J
,我们将最小化数据与相关性之间差异的平方和:
Objective = @(x) sum((Jfunc(x) - J).^2);
然后尝试使用 fminsearch
:
x0 = [1.2E9;2.243E-19];
sol = fminsearch(Objective,x0);
我使用了你给出的猜测。对于非线性解决方案,良好的初步猜测对于收敛通常很重要。
如果您有优化工具箱,您也可以尝试 lsqcurvefit
or lsqnonlin
(fminsearch
是 vanilla MATLAB)。