我正在使用表单
的输入函数处理曲线拟合问题n=((xi-xa)-a*cos(theta))^2+(h-a*sin(theta))^2;
d=((xi-xa)+a*cos(theta))^2+(h+a*sin(theta))^2;
v=k*log(n/d) : Input function
这里xa,a,theta,h和k是参数,我们需要计算v(xi)
情节看起来像这样
此处蓝点表示观察值,红线是从输入函数获得的理论曲线。
通过手动改变参数并使用命中和试验匹配曲线来完成该拟合过程。 这可以使用Matlab中的任何优化技术来完成。如果是这样的话?
答案 0 :(得分:0)
您可以尝试使用lsqcurvefit(http://nl.mathworks.com/help/optim/ug/lsqcurvefit.html),例如
function F = myfun(x,xdata)
%your parameters xa,a,theta,h,k
%map to parameter vector x(1),x(2),x(3),x(4),x(5)
n = ((xdata-x(1))-x(2)*cos(x(3)))^2+(x(4)-x(2)*sin(x(3)))^2;
d = ((xdata-x(1))+acos(x(3)))^2+(x(4)+asin(x(3)))^2;
F = x(5)*log(n/d);
end
和对求解器的调用
x0 = [1;1;1;1;1]; % your guess for starting values of the x vector of parameters
x = lsqcurvefit(@myfun,x0,xdata,ydata);