1

я работаю на фитинга проблемы кривой с функцией ввода формыКривая фитинг с 5 параметров в Matlab

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 

Здесь ха, а, тета, ч и к являются параметры, и мы должны вычислить v (хi)

участок выглядит следующим образом enter image description here

Здесь синие точки представляют собой значения, и наблюдается красная линия представляет собой теоретическую кривую, полученную от функции входа.

Этот процесс подгонки был выполнен путем изменения параметров вручную и соответствия кривых с использованием хита и испытания. Может ли это быть выполнено с использованием любой методики оптимизации в Matlab. если да, то как?

ответ

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