首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >双参数方程的曲线拟合

双参数方程的曲线拟合
EN

Stack Overflow用户
提问于 2015-01-29 18:19:57
回答 1查看 1.2K关注 0票数 0

我有两个数组:

代码语言:javascript
运行
复制
E= [6656400;
    13322500;
    19980900;
    26625600;
    33292900;
    39942400;
    46648900;
    53290000]

代码语言:javascript
运行
复制
J=[0.0000000021;
    0.0000000047;
    0.0000000128;
    0.0000000201;
    0.0000000659;
    0.0000000748;
    0.0000001143;
    0.0000001397]

我想通过应用这个方程,为上述数据找到合适的曲线拟合:

代码语言:javascript
运行
复制
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的随机值,得到了较好的结果。但我希望通过使用代码(而不是曲线拟合应用程序)来找到正确的值。

你能帮帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-29 19:15:07

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

定义一个相关函数,该函数以fit参数作为参数:

代码语言:javascript
运行
复制
% 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,所以我们将最小化数据与相关性之间差异的平方和:

代码语言:javascript
运行
复制
Objective = @(x) sum((Jfunc(x) - J).^2);

然后尝试使用fminsearch将目标最小化。

代码语言:javascript
运行
复制
x0  = [1.2E9;2.243E-19];
sol = fminsearch(Objective,x0);

我用了你的猜测。对于非线性解,良好的第一猜测往往对收敛性很重要。

如果您有优化工具箱,也可以尝试lsqcurvefitlsqnonlin (fminsearch是普通的MATLAB)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28221803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档