fortran 中 矩阵与向量计算问题
implicit noneinteger::a(3,1)
a(1,1)=1
a(2,1)=2
a(3,1)=3
假如有一列向量a,应该如何计算a向量的转置乘a。我想用matmul(transpose(a),a)但不可以,请问该如何做呢?
integer::a(1,3)
a(1,:)=
write(*,*) matmul(transpose(a),a) fcode 发表于 2019-6-23 16:06
integer::a(1,3)
a(1,:)=
write(*,*) matmul(transpose(a),a)
您好!您这个是用列*行得到一个3*3的数组,好像计算没问题。但如果调换顺序,计算行*列的时候,结果是14,直接write是可以的,但用变量表示就不行。请问是什么原因呢?
integer::k
k=matmul(a,transpose(a))
write(*,*) k
提示错误The shapes of the array expressions do not conform.
妙木山养娃人 发表于 2019-6-23 17:04
您好!您这个是用列*行得到一个3*3的数组,好像计算没问题。但如果调换顺序,计算行*列的时候,结果是14 ...
这就是Fortran这类强类型语言的一个大坑在此
1*3的矩阵和3*1的矩阵得到的东西,程序认为是一个1*1的矩阵而不是一个数
程序并不认为1*1的矩阵和一个数是一回事
对此,你可以设一个1*1的矩阵变量接收矩阵乘法的结果,然后再取这个矩阵第一行第一列的元素即可 liudy02 发表于 2019-6-23 17:37
这就是Fortran这类强类型语言的一个大坑在此
1*3的矩阵和3*1的矩阵得到的东西,程序认为是一个1*1的矩阵 ...
这个坑其实还不算常见,更常见的坑是n*1的或者1*n的矩阵和n个元素的向量不是一回事
初学者在这个地方被坑的更多些…… 可以用
k=sum(matmul(a,transpose(a))) 呀 fcode 发表于 2019-6-23 17:42
可以用
k=sum(matmul(a,transpose(a))) 呀
好的,十分感谢{:4_103:} liudy02 发表于 2019-6-23 17:38
这个坑其实还不算常见,更常见的坑是n*1的或者1*n的矩阵和n个元素的向量不是一回事
初学者在这个地方被坑 ...
谢谢{:4_103:} 很惭愧,以前学程序很马虎,也不常用,现在需要自己编程的时候才发觉捉襟见肘{:4_117:} fcode 发表于 2019-6-23 17:42
可以用
k=sum(matmul(a,transpose(a))) 呀
唔,还是你这个办法简洁,我咋就没想到呢……
页:
[1]