Fortran输出是0怎么解决?
PROGRAMgongshiusemsimslreal*8x,ydoubleprecisionw0x,woy,fei,z,kreal*8x0,x1,x2,x3,x4,x5...
PROGRAM gongshi
use msimsl
real*8 x,y
double precision w0x,woy,fei,z,k
real*8 x0,x1,x2,x3,x4,x5,x6,x7
complex c,x8
parameter (c=(0.,1.))
k=0.1
z=0.1
w0x=0.5
w0y=0.5
open(10,file="A.txt")
write(10,*)" x"," y"," A"
do x=-100,100
do y=-100,100
x0=2*z
x1=(k*w0x*w0x)-c
x2=x1/x0
x3=(k*w0y*w0y)-c
x4=x3/x0
x5=x2*x4
x5=SQRT(x5)
x6=(c*x2*x*x)/(w0x*w0x)
x7=(c*x3*y*y)/(w0y*w0y)
x8=cmplx(0,sin(x6+x7))
fei=c*x5*x8
fei=-fei
write(10,200)x,y,fei
end do
end do
200 format(1x,f13.5,5x,f13.5,5x,e13.6)
close (10)
end 展开
use msimsl
real*8 x,y
double precision w0x,woy,fei,z,k
real*8 x0,x1,x2,x3,x4,x5,x6,x7
complex c,x8
parameter (c=(0.,1.))
k=0.1
z=0.1
w0x=0.5
w0y=0.5
open(10,file="A.txt")
write(10,*)" x"," y"," A"
do x=-100,100
do y=-100,100
x0=2*z
x1=(k*w0x*w0x)-c
x2=x1/x0
x3=(k*w0y*w0y)-c
x4=x3/x0
x5=x2*x4
x5=SQRT(x5)
x6=(c*x2*x*x)/(w0x*w0x)
x7=(c*x3*y*y)/(w0y*w0y)
x8=cmplx(0,sin(x6+x7))
fei=c*x5*x8
fei=-fei
write(10,200)x,y,fei
end do
end do
200 format(1x,f13.5,5x,f13.5,5x,e13.6)
close (10)
end 展开
1个回答
展开全部
因为,变量 fei是双精度实数,而c是复数,且c的实部为0,虚部为i。
所以:
fei=c*x5*x8的结果总是等于c的实部,也就是等于0;
fei=-fei 的结果仍然是0。
因此,最终输出 fei 的数值一定为 0。
如果要求结果为复数,则 fei 必须定义为复数。
如果结果可以是实数,则要看程序代码的计算目的,在考虑如何修改。建议重新审核一下计算公式,对计算步骤进行检查,并代入特征数值进行试算。
~~
再从复数的乘法规则分析一下,为什么输出都是0。
设z1=a+bi,z2=e+fi ,a、b、e、f 为任意实数。z1和z2 为任意两个复数,那么它们的积为:(a+bi)(e+fi)=(ae-bf)+(be+af)i。
本题程序中的 c=z1=0+i,而 fei=c*x5*x8 中,x5和x8均为实数,它们的虚部都是0,即z2=e+0i,则:z1*z2 = (0+i)(e+0i) = 0+0i。
因此,fei 复数的结果也是 0+0i,也就是输出 (0,0)。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询