Matlab: приспособить пользовательскую функцию к данным xy с данными ошибками xy

Я искал функцию Matlab, которая может выполнять нелинейное полное наименьшее квадратное соответствие, в основном подгонять пользовательскую функцию к данным, которые имеют ошибки во всех измерениях. Самым простым случаем являются точки данных x и y с различными заданными стандартными отклонениями по x и y для каждой отдельной точки. Это очень распространенный сценарий во всех естественных науках, и тот факт, что большинство людей знают только то, как выровнять наименьших квадратов с ошибками по y, не означает, что это будет крайне полезно. Я знаю, что проблема гораздо сложнее, чем простая y-ошибка, возможно, поэтому большинство (даже не такие как я физики) научились правильно делать это с многомерными ошибками.

Я ожидал бы, что такое программное обеспечение, как matlab, сможет это сделать, но если я плохо читаю наиболее полезные в других случаях страницы справки, я думаю, что даже "полная" лицензия Matlab не обеспечивает такой подходящей функциональности. Другие инструменты, такие как Origin, Igor, Scipy, например, используют свободно доступный пакет Fortran "ODRPACK95". В обмене файлами есть несколько вкладов, касающихся общих наименьших квадратов или подгонок Деминга, но они предназначены только для линейных подгонок, что для меня бесполезно.

Я был бы рад любой подсказке, которая может мне помочь

С уважением

1 ответ

Во-первых, я должен отметить, что я не практиковал MATLAB с тех пор, как закончил в прошлом году (также как физик). Это, как говорится, я помню, используя

    lsqcurvefit()

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

    y = A*sin(x)+B
    y = A*e^(B*x) + C

Крайне сложно выполнить подгонку, не зная форму, например, как указано выше. В конечном итоге все математические функции могут быть аппроксимированы полиномами для достаточно малых интервалов. Это то, что вы, возможно, захотите рассмотреть, поскольку в MATLAB есть много инструментов для выполнения полиномиальной регрессии.

В конце я бы настоятельно рекомендовал вам написать свою собственную функцию соответствия. Есть множество примеров для этого онлайн. Идея состоит в том, чтобы узнать форму истинного решения, как указано выше, и угадать параметры A, B, C.... Создайте функцию ошибок (или затрат), которая дает количественную ошибку (отклонение) между вашими данными и предполагаемым решением. Затем проблема сводится к минимизации ошибки, для которой MATLAB обладает множеством встроенных функций.

Другие вопросы по тегам