0

我有两个数组:

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))

我想从 1e-19 中选择 W 的起始值

我已经尝试过曲线拟合工具,但它并没有帮助我解决它!

然后,我选择了一些 A0=1.2e9 和 W=2.243e-19 的随机值,它给了我更好的结果。但我想通过使用代码(不是曲线拟合应用程序)找到正确的值

你能帮我吗?

4

1 回答 1

1

一种快速(并且可能很容易)的解决方法是将曲线拟合作为最小化问题。

定义一个以拟合参数为参数的相关函数:

% 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));

然后是最小化的目标函数。由于您有数据J,我们将最小化数据和相关性之间差异的平方和:

Objective = @(x) sum((Jfunc(x) - J).^2);

然后尝试使用以下方法最小化目标fminsearch

x0  = [1.2E9;2.243E-19];
sol = fminsearch(Objective,x0);

我使用了你给出的猜测。对于非线性解,良好的初步猜测通常对收敛很重要。

如果您有优化工具箱,您也可以尝试lsqcurvefitlsqnonlinfminsearch是 vanilla MATLAB)。

于 2015-01-29T19:15:07.553 回答