【发布时间】:2016-05-21 09:47:30
【问题描述】:
我希望能够允许我的包的用户以更数学的方式定义函数,我认为宏是正确的方向。问题如下。该代码允许用户定义函数,然后在专门的求解器中使用这些函数来求解 PDE。但是,为了使求解器更容易,一些输入是以您通常不会认为的方式的“矩阵”。例如,求解器可以接收函数 f(x,t),但 x[:,1] 是您认为的 x 和 x[:,2] 是您认为的 y(有时是 3D) .
更大的问题是,当 PDE 是非线性的时,我将所有内容都放在一个 u 向量中,而在许多情况下(例如反应扩散方程)这些东西都被命名了。所以在这种一般情况下,我希望能够写
@mathdefine f(RA,RABP,RAR,x,y,t) = RA*RABP + RA*x + RAR*t
然后翻译成
f(u,x,t) = u[:,1].*u[:,2] + u[:,1].*x[:,1] + u[:,3]*t
我无法对我的宏 foo 嗤之以鼻,所以我希望有人能让我开始(或者如果宏不是解决这个问题的正确方法,请解释原因)。
如果用户必须将要翻译的内容提供给什么,这并不太难,但我希望它尽可能干净易用,所以不知何故知道它是空间变量,所以之前的一切都是u 的一部分,但之后是 x 的一部分。
【问题讨论】:
标签: macros metaprogramming julia