首次发布,在此感谢您的阅读!
问题:我有一个Vector{String}
,称之为A
,其中每个元素都是方程式的一部分,例如A
的第一个元素是"x[1] - (0.8*x[1])"
。我想编写一个宏,该宏以以下参数作为输入:i)一个字符串-称之为fn_name
- 带有函数名,ii)向量A
,并返回一个名为fn_name
的函数,其形式如下
function fn_name(f, x)
f[1] = x[1] - (0.8*x[1])
f[2] = (exp(x[4]) - 0.8*exp(x[3]))^(-1.1) - (0.99*(exp(x[4]) - 0.8*exp(x[4]))^(-1.1)*(1.0 - 0.025 + 0.30*exp(x[1])*exp(x[2])^(0.30 - 1.0)))
f[3] = exp(x[2]) - ((1.0 - 0.025)*exp(x[2]) + exp(x[1])*exp(x[2])^0.30 - exp(x[4]))
f[4] = x[3] - (x[4])
end
其中每个 rhs 都是一个元素
A = ["x[1] - (0.8*x[1])", "(exp(x[4]) - 0.8*exp(x[3]))^(-1.1) - (0.99*(exp(x[4]) - 0.8*exp(x[4]))^(-1.1)*(1.0 - 0.025 + 0.30*exp(x[1])*exp(x[2])^(0.30 - 1.0)))", "exp(x[2]) - ((1.0 - 0.025)*exp(x[2]) + exp(x[1])*exp(x[2])^0.30 - exp(x[4]))", "x[3] - (x[4])"]
我尝试过的方法:我最努力的尝试解决这个问题的方式是:
macro make_fn(fn_name, A)
esc(quote
function $(Symbol(fn_name))(f, x)
for i = 1:length($(A))
f[$i] = Meta.parse($(A)[$i])
end
end
end)
end
然而,这并不起作用:当我运行@make_fn("my_name", A)
时,我收到错误信息LoadError: UndefVarError: i not defined
。
我发现理解Julia元编程非常困难,虽然我很想避免使用它,但我认为在这个问题上是不可避免的。
请您帮助我理解我的错误出现在哪里?
谢谢