Matlab 使用lsqcurvefit,如何改进拟合

Matlab 使用lsqcurvefit,如何改进拟合,matlab,curve-fitting,linear-regression,nonlinear-optimization,Matlab,Curve Fitting,Linear Regression,Nonlinear Optimization,我需要将Runreg.m中给出的数据拟合到CalculateTime.m中给出的方程中,但是resnorm的值非常高,我无法得到很好的拟合 根据得到的A和sigma值,如果我计算时间,它与实际时间非常不同 计算时间 function [ Ta] = CalculateTime(par_fit,n) T1=484.437812; sigma = par_fit(1); A= par_fit(2); const1= sigma*(T1-T1/(2*A)); const2= T1/

我需要将Runreg.m中给出的数据拟合到CalculateTime.m中给出的方程中,但是resnorm的值非常高,我无法得到很好的拟合

根据得到的A和sigma值,如果我计算时间,它与实际时间非常不同

计算时间

function [ Ta] = CalculateTime(par_fit,n)
  T1=484.437812;
  sigma = par_fit(1);
  A= par_fit(2);
  const1= sigma*(T1-T1/(2*A));
  const2= T1/A -T1*sigma/(2*A);
  Ta = n.^(-1)*const1 + const2;
end
Runreg.m

n=[1.0000      1.5000    2.0000    2.5000    3.0000    4.0000];
Ta=[484.437812 424.2085  382.3534  352.1422  311.6865  253.5879];
plot(n,Ta,'o')
par_fit=[0.8,2];
options = optimset('Display','iter','TolX', 1e-10, 'TolFun', 1e-10, 'MaxFunEvals', 4000, 'MaxIter', 4000);
[x,resnorm,residual]=lsqcurvefit(@CalculateTime,par_fit,n,Ta,[0 1],[1 Inf],options);
hold on
plot(n,CalculateTime(x,n))
hold off

您可能首先应该做的是将
TolX
TolFun
更改为一些更合理的值。将它们设置为
1e-100
这不会改善结果,只会导致更多的迭代。我已经为两个公差附上了使用
1e-10
的拟合结果图。我得到的参数是
sigma=0.9881
A=1.0000
,拟合度看起来可以接受
resnorm
483.2636
,看起来可能很高,但请记住它是残差平方的总和,因此平均残差约为
13
,这似乎是可以接受的

我认为你必须问自己的是,
sigma
A
是否在你试图拟合的参数的合理范围内,并对你试图解决的问题多想想。也许更多的数据点有助于获得更好的拟合?也许可以调整初始值或参数的边界?在我看来,lsqcurvefit只是在做它应该做的事情,而你的实际问题是别的


@HighPerformanceMark:刚刚更新了问题。我添加了更多数据。拟合适用于较小的n值,但其思想是将此模型用于较大的n值,但它肯定会失败。正如你提到的“也许你的初始值或参数的边界可以调整”你能解释一下吗?我已经用更多的数据点尝试过了,似乎你试图适应数据的函数可能无法准确描述它。你能告诉我们更多关于你测量的过程和你使用的方程吗?我对初始值/边界的评论意味着,当解算器陷入局部最小值时,拟合的结果有时可能取决于初始参数,但这里可能不是这种情况。这是一个预测任意数量节点上执行时间的模型<代码>tn=σ(T1−T1/2A)/n+T1/A−T1σ/2A;A其中T1是一个节点上的执行时间。@Harshit:我认为您的模型可能会遗漏一些细节。如果我理解正确,A是程序并行性的度量。您可能还必须包括
n2A-1
的情况。由于您目前已经实现了它,您正在测量的应用程序很可能在您没有考虑的范围内有一个
A
som。是的,您是正确的,该模型有这些时间间隔的方程式<代码>tn=(T1−T1σ/2A)/n+T1σ/2A,1≤ N≤ A和
tn=T1/A,n>2A-1
我尝试了这两个等式,但结果保持不变。关于
n>2A-1
这里不可能是这种情况,因为应用程序会随着节点数量的增加而扩展。我们使用此模型预测了其他三个应用程序的执行时间,这些应用程序运行良好。有没有其他方法可以让你更健康。我还尝试了
fmincon
,结果看起来也一样。