问题标签 [nonlinear-optimization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
271 浏览

matlab - 非线性无约束优化函数

我有这个非线性无约束优化问题: f=2*pi*(x^2)+2*pi x y

我必须在 MatLab 中使用两种方法来解决它,牛顿法和梯度法。我编写了代码,但是我遇到了一些我无法修复的错误,所以我真的需要一些帮助,因为我必须用这些方法的结果制作一个图表,然后将它们进行比较。

梯度方法的代码:

这是问题给出的函数:

这是给定点的函数评估:

这是该给定点的函数梯度:

我必须在问题的每次迭代中检查理想的步骤,所以我需要另一个函数来返回函数 f(x + alpha*d) 的值

渐变方法的代码将是:

一旦我设法解决这个问题,我将使用牛顿方法更新帖子。那么有人知道为什么我会出错吗?为了找到理想的步长,x0应该是一个初始值,eps应该是容差。(如果梯度的范数大于算法应该停止的容差)。

0 投票
0 回答
266 浏览

python - 使用 Python 求解非线性联立方程 - 输入和参数语法

我想用 Python 求解 3 个非线性联立方程。我是初学者,互联网上的研究帮助我了解应该做什么,但是我的脚本仍然无法正常工作,我认为这是由于与参数和输入相关的语法错误。

我的函数有 9 个参数(3 个变量和 6 个已知参数) 首先我发现我可以这样写问题:(函数 f 是示例,它们要复杂得多且大得多)

你能给我一些帮助或解决方案的链接吗?

我认为在第二种情况下我想定义 x 但我不知道它应该是什么。我尝试了第二种语法,只有一个带有一个变量和相同参数的方程,它正在工作,所以我认为这是参数或变量写入的语法问题。

!!!!固定的!!!!!上面的代码形状现在正在解决我的具体问题,但我遇到了语法错误。感谢您的帮助和耐心!

0 投票
1 回答
1420 浏览

matlab - 在一个圆圈内包装圆圈

给定单位圆,以及一组 M 个半径为 r 的小圆。找到较小圆的最大半径,使它们都适合在单位圆内而不重叠。

我有以下圆圈包装在多边形示例 链接中

我想更改说所有圆都在多边形内的方程式

对于说所有圆圈都在圆圈内的方程式,但我不知道如何。有人可以帮助我吗?

亲切的问候。

0 投票
2 回答
921 浏览

matlab - 用指数变量求解非线性整数规划

每个人。我为我的研究制定了一些公式。我想问有没有什么工具可以解决这个问题。我调查了一些工具,例如 GLPK、一些 MATLAB 工具箱……但我的公式似乎是非线性的。我在网上找到了一些资料,它是整数规划的一种特殊情况,称为 0-1 整数规划。

我的疑问是:我可以像下面的公式那样将二进制变量放在指数中吗?解决这个问题时是否可以使用“product(pi)”?我调查了一些例子,但我没有发现这两种用法。

变量是 Xc,n,m,s,i。并且,Lc,n, Tmax, Tm, Pm,s,i, Dc,n,k, Bm 都是已知数。

谁能给我一些关于这个问题的建议?谢谢阅读!

我更新了图片,并尝试将 AMPL 语言用于我的公式。

在此处输入图像描述

使用逻辑约束进行修改以从指数中删除变量 X:

0 投票
0 回答
310 浏览

java - BobyQA 更改起点并计算次优结果?

我正在尝试使用 Apache Commons Math 的 BobyQA 算法进行有界非线性优化。

我知道最佳值(使用matlab的信任范围反射算法找到它)并且我对以下内容感到困惑:

我将 BobyQA 的起点设置为最佳,它评估的第一个点不是我指定的起点,而是更改的次优起点(它更改了第一个参数)。而且,更进一步,它没有找到最小值。

示例(最优的最小二乘 - 起点):

lsq(optimal) = 5.526374615719567E9 for [1.0141E-7, 81.15, 119.03, 32.0, 0.36652, 4.317, 8.5167, 17.3, 16.470001, 100.13, 11.242, 29.042, 18.871, 29.92, 36.147, 87.826, 21.287]

然后我以该起点运行 BobyQA,并在第一次迭代中修改第一个参数(从 1.0141E-7 到 0.026117):

lsq(1) = 1.7374657025186486E19 for [0.02611793333333286, 81.15, 119.03, 32.0, 0.36652, 4.317, 8.5167, 17.3, 16.496117933333334, 100.13, 11.223249066666666, 29.042, 18.871, 29.92, 36.147, 87.826, 21.287]

最后它在以下位置达到次优解决方案:

lsq(274) = 5.526621213826441E9 for [1.0115737485704292E-7, 81.14883064785045, 119.02964714​​352679, 32.00103316109643, 0.36615877961432247, 4.317235538​​618653, 8.516900515414736, 17.293306813210172, 16.496079045753113, 100.12980568809833, 11.22341107874299, 29.042103684597272, 18.870381140825014, 29.919895452015545, 36.14745517499619, 87.82657624240575, 21.288471755903668]

其中 5.5266E9 大于 5.5263E9。

我究竟做错了什么?

谢谢,

伊戈尔

0 投票
1 回答
464 浏览

matlab - fmincon 不匹配非线性约束

我试图最小化关于参数 beta0 向量的函数句柄。我的函数使用内置的mvncdf函数,该函数使用正定协方差矩阵。这个矩阵是从参数向量的一部分计算出来的。还有一些参数的绝对值小于1的限制。

我以两种方式将约束设置为fmincon:所需值的上限和下限,并使用以下非线性约束:

由于所有矩阵都是方形的并且通过收缩对称,因此作为正定性的代理,我使用特征值的符号。

优化问题如下:

但是在估计期间 fmincon 中止错误

使用 mvncdf 时出错(第 193 行) SIGMA 必须是正方形、对称、正定矩阵。

在调试模式下,我可以看到,经过两次评估迭代后,Matlab 尝试估计不满足我的非线性约束的 beta0,

并且约束 c < 0 不满足:

我不明白为什么这个优化工具试图在禁止区域找到解决方案以及如何避免这个问题。或者如何以线性方式设置正定性约束。

0 投票
1 回答
3809 浏览

matlab - Matlab中三变量非线性系统的Newton-Raphson方法

我正在尝试使用 MATLAB 中的 Newton-Raphson 方法解决 3 个非线性系统的 3 个变量。以下是3个非线性方程:

我需要使用 Newton-Raphson 方法找到cs和的值。q

这是我到目前为止所拥有的:

有人可以检查我的代码,有一些错误,所以它不起作用。提前致谢。

0 投票
1 回答
661 浏览

sas - Nonlinear multiple regression in SAS

I have a data set with variables y, x1, and x2. I want to find an equation that fits the model:

y = k1*x1c1 + k2*x2c2

by finding k1, c1, k2, and c2. How do I do this in SAS? Specifically if there is an easy way in SAS Enterprise Guide, that's preferable.

0 投票
1 回答
652 浏览

matlab - 使用 ode 求解 3 个微分方程(洛伦兹方程)的非线性系统:Matlab 中的 ode23s

我正在尝试使用 ode 求解器求解 3 个不同的方程(洛伦兹方程):Matlab 中的 ode23s。这是3个洛伦兹方程:

dc/dt= alpha*I*(1-c) + c*(- k_f - k_d - k_n * s - k_p*(1-q))

ds/dt = lambda_b * c* P_C *(1-s)- lambda_r *(1-q)*s

dq/dt = (1-q)* k_p * c *(P_C / P_Q)- gamma * q

我使用了 ode 求解器并创建了两个 M 文件 ode.m 和 lorenz.m

=> 这是我的两个 Matlab M 文件。这是我的第一个 M 文件:ode.m,我运行它来绘制图形。

这是我的第二个 M 文件,即 lorenz.m

请帮帮我,两个 M 文件代码都在工作,但我想在 lorenz.m 文件中使用函数句柄 (@lorenz),因为 Lorenz 对这个问题的描述不是很好。而且,当我运行 ode.m 文件时,plot 的值非常小,但是当我运行 lorenz.m 文件时,c、s、q 的值非常大。我想在某个地方获取 s 和 q 的值在 0 到 1 之间。并且 c 的值应该是非常大的数字,大约 3.5 X10^11。我不知道这是怎么回事?

0 投票
1 回答
1392 浏览

matlab - 如何在 Matlab 中使用非线性最小二乘法求解超定方程组

我有一组九个方程,只有三个未知数。未知数是 x、y 和 z。我知道 A11、A12、A13 .... A33 的值。但是这些值可能有一些噪音,因此我将不得不使用一些优化算法来找到 x、y 和 z 的最佳拟合值。

如何在 Matlab 中求解上述超定方程组?

我一直在网上搜索,我遇到了一些功能,最值得注意的是这个

但是我很困惑解决这个问题的最佳方法是什么。需要一点方向......