简单的复数输入程序的错误(fortran)
小程序为:-----------------------------
program main
implicit none
real :: i,j
complex :: m
i=2.0
j=1.0
write(*,*)'j=', j
write(*,*)'i=', i
m=(i,j)
write(*,*)'m=',m
end
-----------------
调试的报错信息为
Error: A symbol must be a defined parameter in this context.
m=(i,j)
---^
Error executing df.exe.
这个错误具体的指什么?怎样修改可以实现先通过对i、j赋值,然后对复数m进行赋值?
回复:(xinshao)简单的复数输入程序的错误(fortran...
似乎complex类型的变量没法在(,),赋值号中使用表达式,但却可以仅对实部进行表达式赋值。
因为很少用complex type,没遇到过这种问题,
找了不少书,均没说明。
再研究研究^_^
下面的程序可以运行,
program main
implicit none
real(kind=8),parameter::w=1.0,v=8.0
real(kind=8)::r,t
complex(kind=8)::m
r=sqrt(2.0)
t=sqrt(3.0)
write(*,*)'w=', w
write(*,*)'v=', v
m=(w,v)
print *,m
m=r+t
write(*,*)m
end program main
implicit none
real(kind=8),parameter::w=1.0,v=8.0
real(kind=8)::r,t
complex(kind=8)::m
r=sqrt(2.0)
t=sqrt(3.0)
write(*,*)'w=', w
write(*,*)'v=', v
m=(w,v) !改成m=(w+v,v-w),即含表达式,就不行
!如果w,v不声明成parameter,那么m=(w,v)也没法运行。
print *,m
m=r+t !r,t均为实数,这种赋值又可行。
write(*,*)m
end
ps:在compaq visual fortran 6.6C上是这些情况,别的compiler不清楚。
回复:(linqus)program mainimplicit nonereal(ki...
辛苦了,谢谢!几次碰到复数的问题,都出问题,晕 在别的论坛得到解答了,如下:
(1) 仅对确定的数(prameter 类型在编译阶段已经用确定的数代替)可以不用 cmplx;
(2) 对变量,用 cmplx 作构造函数, z = x + i y ==> z = cmplx(x, y)
program main
implicit none
real(kind=8),parameter::w=1.0,v=8.0
real(kind=8)::r,t
complex(kind=8)::m
r=sqrt(2.0)
t=sqrt(3.0)
write(*,*)'w=', w
write(*,*)'v=', v
m=(w,v)
print *,m
m=cmplx(r+t,r-t) !可行了
write(*,*)m
end
求助
program ex0001integer n
real x1,x2,x,f1,f2,fx,eps
real,allocatable::d(,e(
write(*,*) "lease enter n:"
read(*,*) n
allocate(d(n),e(n-1)) ! d是对角元素,e是非对角元素
eps=1.0E-6
fx=1.0
do j=1,n
d(j)=-2
end do
do j=1,n-1
e(j)=1
end do
!write(*,*) "lease enter array d and e:"
!read(*,*) d,e
a1=d(1)-e(1)
a2=d(1)-2*e(1)
a3=d(1)+e(1)
a4=d(1)+2*e(2)
y1=min(a1,a2)
y2=max(a4,a3)
y=(y2-y1)/n
x1=y1
x2=y1+y
write(*,*)"矩阵的特征值为:"
do m=1,n
temp=x2
10 if(abs(fx)>eps) then
x=(x1+x2)/2
f1=MValue(x1,n,d,e)
f2=MValue(x2,n,d,e)
fx=MValue(x,n,d,e)
if (fx*f1>0)then
x1=x
else
x2=x
end if
go to 10
end if
print*,"--------------------"
write(*,*) x
x1=temp
x2=temp+y
z=(x1+x2)/2
fx=MValue(z,n,d,e)
end do
print*,"--------------------"
contains
real function mValue(x,n,d,e) !对称三对角矩阵多项式展开
Integern,i
real x
real d(n),e(n-1),s(n)
S(1)=x-d(1)
S(2)=(x-d(1))*(x-d(2))-e(1)**2
Do i=3,n
S(i)=(x-d(i))*s(i-1)-e(i-1)**2*s(i-2)
End do
mValue=s(n)
return
End function mValue
end
帮我 解释下 这个程序吧,麻烦各位了 收益良多..
页:
[1]