optimization - 在多项式上拟合具有不等式约束的多变量多项式
问题描述
我在二维域 (x,y) 中有实验性分散数据(图中绿色),我想用二维多项式拟合,例如:
- f(x,y) = c0 + c1*x + c2*y + c3*x*y + c4 * x ** 2 * y ** 2
其中 c0, c1,... 是多项式的系数。最重要的是,我有平等和不平等的约束:
- f(x=0,y) = 0
- f(x,y) > 0,对于 0 < x < 90
我怎样才能做到这一点?我可以通过 c0、c1、c2、... 系数中的不等式来表达我在 f(x,y) 中的不等式吗?
我曾经最小化||Ax-B||scipy.optimize.minimize
的最小二乘。,其中Ax是在实验点评估的多项式表达式,x是要优化的系数c0,c1,c2,...的向量,B是我的实验数据。我真的需要一些关于如何应用不等式约束的指导。
到目前为止我尝试了什么:
- 我能够实现等式约束,通过替换手动简化 f(x,y) 和 f(x=0,y)=0,并重新公式化 ||Ax-B||,但我不能为不等式做到这一点约束。参见图片,其中满足 f(x=0,y) = 0,但不满足 f(x,y) > 0。
- 我尝试使用该
constraints
参数,但我只能对 c0,c1,c2,... 系数应用不等式约束,而不是对所需的 f(x,y) 应用约束。 - 我已经阅读了拉格朗日乘数和非线性规划,但我仍然迷路了。
解决方案
两种解决方案:
scipy.optimize.minimize
要最小化的函数是某种 chi^2,但另外,如果不满足您的约束,则返回,这提供了np.inf
硬边界。- 使用蒙特卡洛马尔可夫链方法。python中有很多实现。
推荐阅读
- c# - GTK Sharp 同步上下文似乎不存在,默认情况下会中断 async/await
- python - 给定一个数据集,查找它是否是批处理的
- javascript - CRUD - 我无法使用 express 和 mongodb 插入数据
- vue.js - 无法读取未定义的属性“_wrapper”-使用 vue 多选
- visualization - 来自gensim的pyLDAvis可视化未在google colab中显示结果
- delphi - 从 Delphi 10.3 中的 TWebBrowser OnNavigateError 中提取 StatusCode
- php - 从 PHP 显示 PNG 文件
- android - React Native 从您的 react-native 应用程序内部更改设备设置
- python - 具有非常量质量矩阵的非线性微分方程的解
- flutter - 当我在 Flutter 中使用提供程序包将数据从 API 加载到列表中时,它会重复调用 API,我该如何解决?