我需要转换一组定义\vec(a) = (a,b,c)
和\vec(x) = (x,y)
之间关系的符号方程式,例如
a = 1./2 * x
b = -1./2 * x
c = 1./2 * y
成矩阵形式,这样当我写\vec(a) = A * \vec(x)
时,我得到矩阵A:
/ a \ / 1./2 0 \ / x \
| b | = | -1./2 0 | * \ y /
\ c / \ 0 1./2 /
现在的问题是,整个事情需要在Fortran中:阅读方程并将它们转换为矩阵A.
我找到了模块 fparser (https://www.sourceforge.net/projects/fparser/)来评估符号数学表达式,但我可能需要一些帮助来弄清楚如何最有效地构建这些矩阵而不需要做太多的字符串解析...
答案 0 :(得分:0)
100%纯Fortran的方法(解决方法?)可能是......
! calc.f90
program main
implicit none
real avec( 3 ), xvec( 2 ), A( 3, 2 )
integer i
do i = 1, size(xvec)
xvec = 0 ; xvec(i) = 1.0
call calc()
A(:,i) = avec
enddo
do i = 1, size(avec)
print *, A(i,:)
enddo
contains
subroutine calc()
real a,b,c, x,y
x = xvec(1)
y = xvec(2)
include 'eq.inc'
avec = [a,b,c]
end subroutine
end
eq.inc:
a = 1./2 * x
b = -1./2 * x
c = 1./2 * y
$ gfortran calc.f90&& ./a.out
0.500000000 0.00000000
-0.500000000 -0.00000000
0.00000000 0.500000000
答案 1 :(得分:0)
尽管已经很久了,但我想发布有助于解决问题的内容:
我使用了fparser
(http://fparser.sourceforge.net/)。