python - 实现最小化方法

标签 python c algorithm matlab optimization

我有一个包含 2 个变量的函数 x1,x2

f = 3*x1^2 + 4*x2^2 + 5*x1 + 6*x2 + 10

考虑 x 是满足 x = [x5,x6] 的行 vector ,其中 x5,x6 是 vector 的分量。如果符号令人困惑,让我们考虑 x = [x1,x1]x1,x2 可以是任意组件。 y 也是同样的论点。

然后我想从 (x + ay) 中找到 a,这样它将最小化 fa 是实常数,xy 是 vector 。上面已经解释过了。

如果这没有意义,那么让我们将 x,y 视为具有 2 个位置的一维数组。因此,x(1),x(2),y(1),y(2) 是它们的分量。然后我想将数组 y 乘以符号变量 a

例如,x=[4,5], y=[-2,3] 那么,(x + ay) = (4, 5) + a(-2,3) = (4-2a,5+3a)a 是这里未知的符号变量。

f1 中代入(为了更清楚,f 定义中的第一个参数 x1 = 4-2a,第二个参数 x2=5+3a)

f1 = 3*(4-2a)^2 + 4*(5+3a)^2 + 5*(4-2a) + 6*(5+3a) + 10 。 ............(等式 1)

然后函数 f1 在一个变量 a 中变得未知,可以使用一维最小化算法将其最小化,例如 golden部分搜索,给定一个区间 [x_lower,x_upper]

我的问题是:

给定不同的x,y,

  • 如何计算 (x+ay) 并将其传递(或替换?)到函数 f (eq1) 中?
  • 如何创建“动态”函数 f1,如 eq. 1、传递给一维最小化算法?所谓动态,我的意思是函数 f1 每次都会为 xy 改变。

我对用 python、MATLAB、C 或任何其他语言实现这个问题的低级实现感兴趣(尽可能坚持语言的基本特性,不使用特定语言的特性或面向对象的特性),但再次处于“低水平”。你能推荐点什么吗?

更新:我不想使用来自 python、MATLAB 或任何其他语言的符号。

最佳答案

我正在用自己的话重新表述您的问题,因为当前形式的问题令人困惑:

您有一个函数 f(x1,x2) = 3*x1^2 + 4*x2^2 + 5*x1 + 6*x2 + 10x1x2 是通过将 xa 的乘积相加获得的二维 vector 的分量>y,其中 xy 是给定的 vector ,a 是标量。您想获得将此关系代入 f 所产生的函数。

请注意,该符号有点令人困惑,因此我将改用 x = z+a*y,其中 z(替换您使用的 x)和 y 是给定的 vector 。

让我们在 Matlab 中将 f 定义为匿名函数(您也可以轻松地使用函数文件):

f = @(x) 3*x(1)^2 + 4*x(2)^2 + 5*x(1) + 6*x(2) + 10;

请注意,我的写法与您的不同,即 x(1)x(2) 而不是 x1x2。这意味着我使用的是 vector 的分量而不是两个不相关的变量。

然后,让我们写出将 a 也作为函数的等式:

g = @(a) z + a*y;

函数 g(a) 为每个值 a 返回一个 vector ,遵守 g(a) = z+a*y

现在你可以做替换了:

h = @(a) f(g(a))

h 是所需的函数,它将 a 作为输入并返回应用于从 z+a*y 获得的 vector 的 a 的值>.

关于python - 实现最小化方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37633007/

相关文章:

Python NLTK 解释一个固定的句子模式并将其标记化

python - 如何使用 python poster lib 通过带有 cookie 的 HTTP 发布文件

c - 使用 DMA 生成 STM32F3 DAC 信号

将 EBCDIC 可打印文件就地转换为 ASCII 的 C 代码

python - 什么是交叉制表的良好数据模型?

python - 有效使用 numpy.random.choice 与重复数字和备选方案

python 串行 100% cpu

c - 如何在C中使用递归找到穿过迷宫的路径

algorithm - 如何排序/绘制伪 3D 建筑物,以免它们在视觉上重叠

c++ - 实时确定概率表示的 2D 网格上的最佳得分移动