Я пытаюсь привязать круг к некоторым данным. Это требует численного решения набора трех нелинейных уравнений (см. Метод полных наименьших квадратов this document).Как решить неспецифические нелинейные уравнения?
Мне кажется, что функция NEWTON
, предоставляемая IDL, подходит для решения этой проблемы. NEWTON
требует имя функции, которая будет вычислять значения системы уравнений для конкретных значений независимых переменных:
FUNCTION newtfunction,X
RETURN, [Some function of X, Some other function of X]
END
Хотя это прекрасно работает, он требует, чтобы все параметры системы уравнений (в данном случае набор точек данных) жестко закодирован в newtfunction
. Это нормально, если для решения есть только один набор данных, однако у меня много тысяч наборов данных, а определение новой функции для каждого вручную - это не вариант.
Есть ли способ обойти это? Можно ли программно программировать функции в IDL или даже просто передавать в наборе данных каким-либо другим способом?
Обычно в этих случаях вы определяете функцию модели, которая принимает набор параметров и фактических точек данных. Например, предположим, что ваша функция Y = A * X + B. Тогда модельная функция (в вашем случае, newtfunction) примет массив значений X, а затем массив значений параметров, например param = [A, B] , Затем вы предоставляете подпрограмму подстановки с именем функции и начальными догадками, а затем отпустите ее. –
Вы можете взглянуть на [веб-страницу] Крейга Марквардта (http://www.physics.wisc.edu/~craigm/idl/), в которой есть несколько процедур, которые лучше, чем метод Ньютона (например, Levenberg-Marquardt алгоритм). –
Ни один из этих комментариев действительно не затрагивает мой вопрос. Функция newt по определению допускает только один параметр. Если с тех пор нашел другой способ привязать круг к данным, тем не менее это тема другого вопроса/ответа. – maxf130