使用元编程的方程组

时间:2016-07-12 21:11:15

标签: metaprogramming julia

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

这是我到目前为止所尝试过的(玩具示例):

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]")),我会得到在函数体中“键入”的代码(对不起,如果我没有使用正确的技术CS术语,我来自“科学文化”)。

无论如何,似乎parse ed x生活在另一个范围内。如何将解析后的x带到函数的范围内,以便它代表x的参数中的syst!

额外奖励:我有700个方程式的系统,它们可以使用元编程进行“打字”,创建计算系统残差的函数的最佳方法/技术是什么?我是在正确的轨道上吗?

1 个答案:

答案 0 :(得分:2)

斯特凡的评论是正确的;在这个具体的例子中,不需要元编程。但是,如果您想要生成许多类似于ou[i] = x[i]^2 + x[i]的行,但复杂的方式不同,则可以使用宏生成它们。见http://docs.julialang.org/en/release-0.4/manual/metaprogramming/。宏扩展为“就地”生成代码,就好像您自己键入了代码一样,因此变量可以引用周围的范围。