我有2个变量x1,x2
f = 3*x1^2 + 4*x2^2 + 5*x1 + 6*x2 + 10
考虑x
是一个行向量,x = [x5,x6]
,其中x5,x6
是向量的组成部分。如果符号令人困惑,我们可以考虑x = [x1,x1]
,但x1,x2
可以是任意组件。同样的论点适用于y
。
然后我想从a
中找到(x + ay)
,以便最小化f
。 a
是实常数,x
和y
是向量。这在上面已经解释过了。
如果这没有意义,那么让我们将x,y
视为具有2个位置的1维数组。因此,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
............(eq.1)
然后,函数f1
在一个变量a
中变得未知,并且可以使用一维最小化算法(例如golden段搜索)最小化,给定间隔[x_lower,x_upper]
。< / p>
我的问题是:
给出不同的x
,y
,
(x+ay)
并将其传递(或替换?)到函数f (eq1)
?f1
,如公式1所示。 1,将它传递给1D最小化算法?通过动态,我的意思是函数f1
每次都会更改x
,y
。我感兴趣的是这个问题的低级实现(尽可能地坚持语言的基本功能,而不使用语言特定功能或面向对象的功能),python,MATLAB,C或任何其他语言,但又处于低水平。&#39;你能提出一些建议吗?
更新:我不想使用python,MATLAB或任何其他语言的符号。
答案 0 :(得分:1)
我用自己的话来改写你的问题,因为目前形式的问题令人困惑:
您有一个功能f(x1,x2) = 3*x1^2 + 4*x2^2 + 5*x1 + 6*x2 + 10
。 x1
和x2
是从x
求和a
和y
的乘积得到的2D向量的组成部分,其中x
和{ {1}}被赋予向量,y
是标量。您希望获得将此关系替换为a
。
请注意,符号有点令人困惑,所以我将使用f
,其中z(替换你使用的x)和y是给定的向量。
让我们将x = z+a*y
定义为Matlab中的匿名函数(您也可以轻松使用函数文件):
f
请注意,我的写法与您的不同,即f = @(x) 3*x(1)^2 + 4*x(2)^2 + 5*x(1) + 6*x(2) + 10;
和x(1)
而不是x(2)
和x1
。这意味着我使用向量的组件而不是两个不相关的变量。
然后,让我们编写一个涉及x2
的等式作为函数:
a
函数g(a)返回每个值g = @(a) z + a*y;
的向量,服从a
。
现在你可以进行替换:
g(a) = z+a*y
h = @(a) f(g(a))
是所需的函数,它接受输入并返回从h
获得的向量处应用的a
值。
答案 1 :(得分:-1)
你可以使用eval convert string来实现
f = 'x+a*y'
x = 4
y = 3
for a in xrange(3):
print eval(f)
output:
4
7
10