MatLab Curvefit с динамическими ограничениями - PullRequest
0 голосов
/ 20 января 2012

Я хочу подогнать кривую, используя функцию lsqcurvefit. Это что-то вроде этой проблемы:

y = a1 * x + a2 * z
s.t
a1 > 0
a2 > 0
a1 + a2 <= some number

Возможно ли иметь такие динамические ограничения в matlab или мне следует использовать какой-нибудь другой пакет?

Ответы [ 2 ]

1 голос
/ 20 января 2012

lsqlin - это инструмент для вашей задачи, если в качестве ограничений используются линейные равенства или неравенства. Вы описали линейный случай, так что это правильное решение.

Если бы вы показали пример с нелинейными ограничениями, вы бы тогда были вынуждены использовать fmincon (как предложил Марчин), но это было бы излишним для полностью линейной задачи. И, конечно, fmincon также будет значительно менее эффективен, потому что fmincon не знает, что ваша цель - это линейный метод наименьших квадратов при ограничениях.

Наконец, чтобы использовать fmincon, вам нужно определить цель как сумму квадратов невязок. Этот последний шаг не является обязательным для lsqlin, поскольку lsqlin разработан специально для решения вашего класса проблем.

1 голос
/ 20 января 2012

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

...