适合lsqcurvefit不起作用可能功能maldefined

时间:2013-10-23 10:30:59

标签: matlab function definition

我正在尝试将函数F与实验数据相匹配。 x_tem和yd都是大小为(12,1)的向量。该功能应该找到最好的 将函数的拟合值y_tau拟合到实验数据。 我只是找不到错误 - matlab向我显示错误:

Error in lsqcurvefit (line 199)
initVals.F = feval(funfcn_x_xdata{3},xCurrent,XDATA,varargin{:});

引起:     初始用户提供的目标函数评估失败。 LSQCURVEFIT无法继续。

代码是:

x_tem=Temp_aero_korrektur(:,1);
yd=Temp_aero_korrektur(:,2);

F = @(y_tau,x_tem)((-1)*((273.15-x_tem)*(273.15-y_tau(1))*8.314*    (((17.62*x_tem)/(243.12+x_tem))-((17.62*y_tau(1))/(243.12+y_tau(1)))))/(40714.53)); 

yd_tau = lsqcurvefit(F,-40,x_tem,yd);

1 个答案:

答案 0 :(得分:1)

这里有两种可能性。一个是你确实想在目标函数中使用矩阵运算(例如,x_tem/x_tem使用mrdivide给出单个标量值。如果是这种情况,那么你应该使用x_tem的转置

来调用lsqcurvefit
yd_tau = lsqcurvefit(F,-40,x_tem',yd);

另一个选项是你实际上是想在x_tem的每个值上计算你的目标函数(例如,使用x_tem./x_tem给出一个与x_tem相同长度的向量)。如果是这种情况,那么你的目标函数应该是

F = @(y_tau,x_tem)((-1)*((273.15-x_tem).*(273.15-y_tau(1)).*8.314.*    (((17.62*x_tem)./(243.12+x_tem))-((17.62*y_tau(1))/(243.12+y_tau(1)))))/(40714.53))

(请参阅timesrdivide的文档以了解元素操作)