我有一个简单的问题要问你。我想构建一个在Fortran中计算F矩阵的子程序。你能救我吗?
F =( - (W ^ 2)*(M + A))+(虚部(I)* W * B)+ C
w,M,A,B,C都是已知的。 w是实数。 M,A,B,C是大小为m * m的矩阵。我想将所有B矩阵元素转换为虚数。例如,其元素453将变为453i(复数)。 M,A,C没什么特别的。所以我希望你能帮助我找到这个F矩阵。亲切的问候。 SalimTamer
! w is frequency
! M is mass matrix, size(m,n)
! a is added-mass matrix, size(m,n)
! b is damping matrix, size(m,n)
! c is restoring matrix, size(m,n)
! X is excitation force divided by wave length, size(m,1)
! m=n =) (or not invertible)
implicit none
integer :: m,n,i,j
real :: w
real(8) :: M(m,n), a(m,n), , c(m,n), X(m),
complex(8) ::b(m,n)
do i=1,m
do j=1,n
C(i,j)=-(w^2)*(M(i,j)+a(i,j))(imaginariy*b(i,j)*w)+c(i,j)+c(i,j)
enddo
enddo
答案 0 :(得分:1)
Fortran没有特定的虚构类型,但 i 可以表示为(0._kind, 1._kind)
。
您的代码b
虽然复杂,但我认为是真的。有两种可能性
C(i,j)=-(w**22)*(M(i,j)+a(i,j)) + CMPLX(0._8, b(i,j))*w +c(i,j)+c(i,j)
! ^^^^^^^^^^^^^^^^^^^
和
C(i,j)=-(w**22)*(M(i,j)+a(i,j)) + (0._8, 1._8)*b(i,j))*w +c(i,j)+c(i,j)
! ^^^^^^^^^^^^^
我已经使用8
作为类型,遵循您的代码,但通常您会想要便携式的东西。同样,如果我的真实假设是正确的,你就会知道F的实部和虚部,这样你就可以整理。
但是,您似乎没有计算F
,而C
本身正在更新,但希望您有这个想法。