在Matlab中使用5个参数进行曲线拟合

时间:2014-12-06 11:37:23

标签: matlab optimization neural-network genetic-algorithm fuzzy-logic

我正在使用表单

的输入函数处理曲线拟合问题
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)

情节看起来像这样 enter image description here

此处蓝点表示观察值,红线是从输入函数获得的理论曲线。

通过手动改变参数并使用命中和试验匹配曲线来完成该拟合过程。 这可以使用Matlab中的任何优化技术来完成。如果是这样的话?

1 个答案:

答案 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);