使用元编程的方程组

System of equations using metaprogramming

我正在尝试创建一个使用元编程计算方程组残差的函数。

这是我迄今为止尝试过的方法(玩具示例):

function syst!(x::Vector, ou::Vector)
    for i in 1:length(x)
        eval(parse("ou[$i] = x[$i]^2 + x[$i]"))
    end
    return ou
end

但是,当我尝试计算函数时,Julia 说变量 x 未定义。但是,如果我包含一个 println(parse("ou[$i] = x[$i]^2 + x[$i]")),我会在函数体中得到 "typed" 的代码(抱歉,如果我没有使用正确的技术 CS 术语,我来自 "scientific culture").

无论如何,parseed x 似乎生活在另一个范围内。我怎样才能将解析的 x 带到函数的范围内,以便它代表 syst! 的参数中的 x?

奖励:我有一个包含 700 个方程的系统,它们可以 "typed" 使用元编程,创建计算系统残差的函数的最佳 way/technique 是什么?我在正确的轨道上吗?

Stefan 的评论是正确的;在此特定示例中,不需要元编程。但是,如果您想生成许多类似于 ou[i] = x[i]^2 + x[i] 但在复杂方式上有所不同的行,则可以使用宏来生成它们。参见 http://docs.julialang.org/en/release-0.4/manual/metaprogramming/。宏扩展为生成的代码 "in place" 就好像您自己输入代码一样,因此变量可以引用周围的范围。