Fortran编程时出现error LNK2001: unresolved external symbol _SIAMA@4问题,该怎么解决啊,求大神帮助
errorLNK2001:unresolvedexternalsymbol_SIAMA@4和Debug/abcde.exe:fatalerrorLNK1120:1unre...
error LNK2001: unresolved external symbol _SIAMA@4和Debug/abcde.exe : fatal error LNK1120: 1 unresolved externals两个错误,好着急啊,马上要向导师汇报了,代码如下:
Program Main
real*8 :: lamda,ep,Q(1),B
integer iloop
real*8::c(4),s(4),sigma(4),miu(4),m(4),d(4),p(4)
B=8000
C(1)=35.1
C(2)=25
C(3)=28
C(4)=4.8
p(1)=50.3
p(2)=40
p(3)=32
p(4)=6.1
s(1)=25
s(2)=12.5
s(3)=15.1
s(4)=2
miu(1)=900
miu(2)=800
miu(3)=1200
miu(4)=2300
sigma(1)=122
sigma(2)=200
sigma(3)=170
sigma(4)=200
m(1)=0.433
m(2)=0.6
m(3)=0.143
m(4)=0.27
d(1)=0.288
d(2)=0.5
d(3)=0.461
d(4)=0.583
!body of abcde
lamda=0
ep=0.001
Q(1)=miu(1)+siama(1)*(sqrt((m(1)-lamda)/(d(1)+lamda))-sqrt((d(1)+lamda)/(m(1)-lamda)))
if(((c(1)*Q(1)).gt.(B-ep)).and.((c(1)*Q(1)).gt.(B+ep))) then
print*,Q(1)
end if
lamda=0.506
if((m(1)-lamda)/(d(1)+lamda) .lt. (sigma(1)/miu(1))*(sigma(1)/miu(1))) then
Q(1)=0
Q(2)=0
Q(3)=0
Q(4)=0
end if
!循环语句
iloop=1
lamda1=0.506
lamda2=0.121
lamda=(lamda1+lamda2)/2
do while(iloop)
if((c(1)*Q(1)) .lt. (B-ep)) then
lamda=(lamda1+lamda2)/2
Q(1)=miu(1)+siama(1)*(sqrt((m(1)-lamda)/(d(1)+lamda))-sqrt((d(1)+lamda)/(m(1)-lamda)))
lamda1=lamda
if((c(1)*Q(1)) .gt. (B+ep))then
lamda=(lamda1+lamda2)/2
Q(1)=miu(1)+siama(1)*(sqrt((m(1)-lamda)/(d(1)+lamda))-sqrt((d(1)+lamda)/(m(1)-lamda)))
lamda2=lamda
end if
end if
print*,Q(1),lamda
iloop=0
end do
write (*,*)Q(1),lamda
End Program Main 展开
Program Main
real*8 :: lamda,ep,Q(1),B
integer iloop
real*8::c(4),s(4),sigma(4),miu(4),m(4),d(4),p(4)
B=8000
C(1)=35.1
C(2)=25
C(3)=28
C(4)=4.8
p(1)=50.3
p(2)=40
p(3)=32
p(4)=6.1
s(1)=25
s(2)=12.5
s(3)=15.1
s(4)=2
miu(1)=900
miu(2)=800
miu(3)=1200
miu(4)=2300
sigma(1)=122
sigma(2)=200
sigma(3)=170
sigma(4)=200
m(1)=0.433
m(2)=0.6
m(3)=0.143
m(4)=0.27
d(1)=0.288
d(2)=0.5
d(3)=0.461
d(4)=0.583
!body of abcde
lamda=0
ep=0.001
Q(1)=miu(1)+siama(1)*(sqrt((m(1)-lamda)/(d(1)+lamda))-sqrt((d(1)+lamda)/(m(1)-lamda)))
if(((c(1)*Q(1)).gt.(B-ep)).and.((c(1)*Q(1)).gt.(B+ep))) then
print*,Q(1)
end if
lamda=0.506
if((m(1)-lamda)/(d(1)+lamda) .lt. (sigma(1)/miu(1))*(sigma(1)/miu(1))) then
Q(1)=0
Q(2)=0
Q(3)=0
Q(4)=0
end if
!循环语句
iloop=1
lamda1=0.506
lamda2=0.121
lamda=(lamda1+lamda2)/2
do while(iloop)
if((c(1)*Q(1)) .lt. (B-ep)) then
lamda=(lamda1+lamda2)/2
Q(1)=miu(1)+siama(1)*(sqrt((m(1)-lamda)/(d(1)+lamda))-sqrt((d(1)+lamda)/(m(1)-lamda)))
lamda1=lamda
if((c(1)*Q(1)) .gt. (B+ep))then
lamda=(lamda1+lamda2)/2
Q(1)=miu(1)+siama(1)*(sqrt((m(1)-lamda)/(d(1)+lamda))-sqrt((d(1)+lamda)/(m(1)-lamda)))
lamda2=lamda
end if
end if
print*,Q(1),lamda
iloop=0
end do
write (*,*)Q(1),lamda
End Program Main 展开
展开全部
siama 如果是数组的话,请定义。
如果是函数的话,请给出函数实现。
如果是函数的话,请给出函数实现。
追问
好的,我回去试一下,谢谢啦。其实if语句后面的C,Q等都是行向量,只是在fortran中我不会向量相乘的写法,所以用标量c(1)替代向量c,求出来的也只是Q(1),但是我最终想得到的是Q,四维的行向量。最后也不会输出向量的值,能不能麻烦您教我一下如何写。
追答
sigma 拼错了,拼成了 siama,建议用 implicit none
C(1)=35.1
C(2)=25
C(3)=28
C(4)=4.8
可以简写为 C(1:4) = [35.1,25.0,28.0,4.8] 或 C(1:4) = (/35.1,25.0,28.0,4.8/)
向量相乘用 D = dot_product( C , Q )
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询