大佬们帮看看matmul函数的问题
program mainimplicit none
integer,parameter::NP = SELECTED_REAL_KIND(8)
real(Kind = NP)::emod,nu
real(Kind = NP),dimension(6)::destrain,dstress
real(Kind = NP),dimension(6,6)::dompl
!=====================================================
emod=70000.0
nu=0.15
dompl=0.0
dompl(1,1)=(emod*(1.0-nu))/((1+nu)*(1.0-2.0*nu))
dompl(2,2)=(emod*(1.0-nu))/((1+nu)*(1.0-2.0*nu))
dompl(3,3)=(emod*(1.0-nu))/((1+nu)*(1.0-2.0*nu))
dompl(1,2)=(emod*nu)/((1.0+nu)*(1.0-2.0*nu))
dompl(2,1)=(emod*nu)/((1.0+nu)*(1.0-2.0*nu))
dompl(2,3)=(emod*nu)/((1.0+nu)*(1.0-2.0*nu))
dompl(3,2)=(emod*nu)/((1.0+nu)*(1.0-2.0*nu))
dompl(1,3)=(emod*nu)/((1.0+nu)*(1.0-2.0*nu))
dompl(3,1)=(emod*nu)/((1.0+nu)*(1.0-2.0*nu))
dompl(4,4)=emod/(1.0+nu)
dompl(5,5)=emod/(1.0+nu)
dompl(6,6)=emod/(1.0+nu)
destrain(1)=-0.000005
destrain(2)=-nu*destrain(1)
destrain(3)=-nu*destrain(1)
destrain(4)=0.0
destrain(5)=0.0
destrain(6)=0.0
dstress=matmul(dompl,destrain)
write(*,*) dstress
end program
为什么用matmul函数运算6×6的矩阵乘以6×1的矩阵得到的结果好像不对,结果的第二和第三个参数不应该是一样的吗?
本帖最后由 风平老涡 于 2021-5-22 11:21 编辑
因为在你的计算中有两个相近数值大小的数相减,产生的计算误差。
以下是6×6的矩阵乘以6×1的矩阵求和之前各个元素的乘积,红字体的数值相减会产生误差。后面一组蓝字体的数值产生同样结果。从所用的精度考虑,可以认为-5.2041704279304213E-018和 -6.9388939039072284E-018等同于0。
-0.36956520984199237 9.7826093418680333E-003 9.7826093418680333E-003 0.0000000000000000 0.0000000000000000 0.0000000000000000
总和= -0.34999999115825631
-6.5217393020947201E-002 5.5434783679079162E-002 9.7826093418680333E-003 0.0000000000000000 0.0000000000000000 0.0000000000000000
总和=-5.2041704279304213E-018; 前两项之和= - 9.782609341868039e-3
-6.5217393020947201E-002 9.7826093418680333E-003 5.5434783679079162E-002 0.0000000000000000 0.0000000000000000 0.0000000000000000
总和=-6.9388939039072284E-018;前两项之和= - 5.54347836790791677e-2
-0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
总和= 0.0000000000000000
-0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
总和= 0.0000000000000000
-0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000
总和= 0.0000000000000000
风平老涡 发表于 2021-5-22 00:37
因为在你的计算中有两个相近数值大小的数相减,产生的计算误差。
以下是6×6的矩阵乘以6×1的矩阵求和之前 ...
明白了谢谢大佬
页:
[1]