是否可以将具有多个固定参数的函数传递给Tcl中的::math::optimize::min_bound_1d

是否可以将具有多个固定参数的函数传递给Tcl中的::math::optimize::min_bound_1d,tcl,Tcl,我是Tcl的新手,我被一项必须完成的任务/项目困住了 所以我有一个函数F(x,A1,A2,)=y。x是一个自由变量,A1、A2等是一些事先已知的常数。当y是A1,A2等的多个值的最小值时,我必须找到x 我遇到了函数::math::optimize::min_bound_1d,它看起来与我需要的完全一样(函数上有一些约束)。问题是这个优化函数似乎只接受带有1个参数的函数 因此,在我下面的sudo代码中,我有如下内容: proc F {x arg1 arg1} { # Crunch numb

我是Tcl的新手,我被一项必须完成的任务/项目困住了

所以我有一个函数F(x,A1,A2,)=y。x是一个自由变量,A1、A2等是一些事先已知的常数。当y是A1,A2等的多个值的最小值时,我必须找到x

我遇到了函数::math::optimize::min_bound_1d,它看起来与我需要的完全一样(函数上有一些约束)。问题是这个优化函数似乎只接受带有1个参数的函数

因此,在我下面的sudo代码中,我有如下内容:

proc F {x arg1 arg1} {
    # Crunch numbers
    return $result
}

foreach arg1 $list_of_first_args {
    foreach arg2 $list_of_second_args {
        # Is it possible to pass $arg1 and $arg2 to the function below?
        puts [::math_optimize_min_bound_1d F $lower_limit $upper_limit]
    }
}
在Tcl中,是否可以将$arg1和$arg2传递/绑定到上面示例中的函数F,以便在y是argN的每个排列的最小值时获得x?我可以把所有的参数放在一个列表中并传递给你吗


谢谢

假设所讨论的代码没有尝试进行诸如解析函数源代码以进行优化之类的古怪操作,最简单的方法是生成一个代理函数:

proc proxy {value} {
    global A1 A2
    F $value $A1 $A2
}
然后优化代理



尽管您必须处理这样一个事实,即在更高维度中进行优化要比在一维情况下复杂得多。

是的,前提是您稍微重新安排一下

F
需要如下所示,将
x
变量放在最后:

proc F {arg1 arg2 x} {
    # Crunch numbers
    return $result
}
(也可以使用代理命令重新排列参数顺序:)

然后,在
foreach
结构中:

puts [::math::optimize::min_bound_1d [list F $arg1 $arg2] $lower_limit $upper_limit]
[listf$arg1$arg2]
东西是一种穷人的lambda,Tcl中的许多高阶函数命令都接受它。如果在计算时,
$arg1
为1,
$arg2
为12,则“函数”
{f1 12}
被传递到
::数学::优化::最小约束1d
并作为
[concat{f1 12}$x]进行计算

“真正的”lambda可能是这样的:

[list x [concat F \$x $arg1 $arg2]]
但只有在高阶函数命令准备使用
apply$func$x
对其求值时,才能使用此构造


文档:、包、、

谢谢!这正是我所需要的:-)
[list x [concat F \$x $arg1 $arg2]]