带动态约束的MatLab曲线拟合

带动态约束的MatLab曲线拟合,matlab,curve-fitting,Matlab,Curve Fitting,我想使用lsqcurvefit函数拟合曲线。这有点像这样的问题: y = a1 * x + a2 * z s.t a1 > 0 a2 > 0 a1 + a2 <= some number y=a1*x+a2*z s、 t a1>0 a2>0 a1+a2可能就是你想要的。约束是一个单独的函数,因此只要可以将它们表示为方程,就可以在其中填充任何内容,任意数量的约束。lsqlin是解决问题的工具,只要约束是线性等式或不等式。您已经描述了线性情况,因此这是正确的解决方案 如果您展示了

我想使用lsqcurvefit函数拟合曲线。这有点像这样的问题:

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

a1+a2可能就是你想要的。约束是一个单独的函数,因此只要可以将它们表示为方程,就可以在其中填充任何内容,任意数量的约束。

lsqlin是解决问题的工具,只要约束是线性等式或不等式。您已经描述了线性情况,因此这是正确的解决方案

如果您展示了一个具有非线性约束的示例,那么您将被迫使用fmincon(正如Marcin所建议的那样),但这对于一个完全线性的问题来说是过分的。当然,fmincon的效率也会大大降低,因为fmincon不知道你的目标是约束条件下的线性最小二乘法


最后,为了使用fmincon,您需要将目标定义为残差的平方和。对于lsqlin,后一步是不必要的,因为lsqlin是专门为解决您的问题而设计的。

正如我在回答中指出的,只有在约束是非线性的情况下,fmincon才是合适的。否则,lsqlin是最好的。是对的,我只是想告诉你,如果你有一些非常奇怪的约束,你可以用fmincon,以非完美方法为代价。