【发布时间】:2020-03-12 20:15:31
【问题描述】:
我需要转换一组定义\vec(a) = (a,b,c) 和\vec(x) = (x,y) 之间关系的符号方程,例如
a = 1./2 * x
b = -1./2 * x
c = 1./2 * y
变成矩阵形式这样我就得到了矩阵A,当我写\vec(a) = A * \vec(x):
/ a \ / 1./2 0 \ / x \
| b | = | -1./2 0 | * \ y /
\ c / \ 0 1./2 /
现在的问题是,整个事情都需要在 Fortran 中:读取方程并将它们转换为矩阵 A。
我找到了模块 fparser (https://www.sourceforge.net/projects/fparser/) 来评估符号数学表达式,但我可能需要一些帮助来弄清楚如何最有效地构建这些矩阵而无需进行过多的字符串解析。 .
【问题讨论】:
-
你能发布到目前为止你尝试了什么吗?
-
不是真的,因为我什至不知道如何开始。如果我只是将表达式作为字符串,那么我必须单独处理所有可能出现的括号,'/','*','+','-',这就像编写一个实际的符号数学解析器......使用现有的符号数学库,我需要另一个库来分析构建导数。然后我可以说
A(1,1) = da/dx等等我猜...... -
看来你需要一个文本到表达式解析器和一个可以处理导数的 CAS(计算机代数系统)......如果是这样,这是一个太宽泛的问题
-
这不是人们通常会使用 Fortran 的那种事情。使用 CAS(即 sympy)解析表达式、计算导数并将输出写入 .f90 文件或 fortran
read语句可以处理的某个 txt 文件会容易得多。 -
我以为有人可以提示我一个可以做到这一点的库, 库推荐在 Stack Overflow 上是题外话。
标签: parsing fortran symbolic-math