代码之家  ›  专栏  ›  技术社区  ›  quarky

fortran:符号函数矩阵

  •  0
  • quarky  · 技术社区  · 7 年前

    我需要转换一组符号方程来定义 \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 \   /  1./2   0   \    / x \
    | b | = | -1./2   0   |  * \ y /
    \ c /   \   0    1./2 /    
    

    现在的问题是,所有的事情都需要用fortran语言:读取方程并将它们转换成矩阵a。

    我找到了模块 FPARSER ( https://www.sourceforge.net/projects/fparser/ )要计算符号数学表达式,但我可能需要一些帮助,找出如何最有效地构建这些矩阵,而不做太多的字符串解析…

    1 回复  |  直到 7 年前
        1
  •  0
  •   roygvib    7 年前

    解决办法?在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
    

    咨询公司:

    a = 1./2 * x
    b = -1./2 * x
    c = 1./2 * y
    

    $Gfortran Calc.f90&/a输出

      0.500000000       0.00000000    
     -0.500000000      -0.00000000    
       0.00000000      0.500000000  
    
    推荐文章