24小时热门版块排行榜    

查看: 549  |  回复: 6

zouji1983

金虫 (正式写手)

[求助] 求助!!!

求助:我的fortran程序在run 800次之后,出现错误,一个变量的值出现负值。怎么阻止他出现负值呢或者说怎么设定一下当出现负值是忽略它呢?谢谢!
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖


感谢参与,应助指数 +1
xzhdty: 金币+1, 专家考核, 谢谢骠骑将军 2012-09-25 23:58:21
使用前判断一下正负号就行了
CODE:
IF (x<0) THEN
    x = -x;
END

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
2楼2012-09-25 18:05:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zouji1983

金虫 (正式写手)

引用回帖:
2楼: Originally posted by libralibra at 2012-09-25 18:05:01
使用前判断一下正负号就行了
IF (x<0) THEN
    x = -x;
END

谢谢!
3楼2012-09-27 22:23:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zouji1983

金虫 (正式写手)

引用回帖:
2楼: Originally posted by libralibra at 2012-09-25 18:05:01
使用前判断一下正负号就行了
IF (x<0) THEN
    x = -x;
END

你好,我还想问一下,如果一个变量的取值范围是0~1,算出来的值大于1,这时应该怎么处理呢?
4楼2012-09-28 16:17:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

引用回帖:
4楼: Originally posted by zouji1983 at 2012-09-28 16:17:31
你好,我还想问一下,如果一个变量的取值范围是0~1,算出来的值大于1,这时应该怎么处理呢?...

具体怎么处理,要看你的计算方法是如何定义异常值的,如果你的计算方法没有定义这个行为,说明算法有漏洞,需要完善,例如你可以让大于1的强制等于1
IF (x>1) THEN
   x = 1;
END
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
5楼2012-09-28 17:29:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zouji1983

金虫 (正式写手)

引用回帖:
5楼: Originally posted by libralibra at 2012-09-28 17:29:59
具体怎么处理,要看你的计算方法是如何定义异常值的,如果你的计算方法没有定义这个行为,说明算法有漏洞,需要完善,例如你可以让大于1的强制等于1
IF (x>1) THEN
   x = 1;
END...

非常感谢您的回复!
6楼2012-10-02 18:35:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zouji1983

金虫 (正式写手)

我的程序是这样的:
subroutine convert_composition(ix,iy)
                integer :: ix, iy, i
                real(8) :: r
                real(8), dimension(1:np*(nc-1)) :: sol, RT
                real(8), dimension(1:np*(nc-1),1:np*(nc-1)) :: coeff
                integer, dimension(1:np*(nc-1)) :: IPIV
               
                coeff = 0.d0
       
                coeff(1,1) = dmudx(1,1,1,ix,iy)
                coeff(1,2) = -dmudx(1,1,2,ix,iy)
                coeff(1,3) = dmudx(1,2,1,ix,iy)
                coeff(2,1) = dmudx(1,2,1,ix,iy)
                coeff(2,3) = dmudx(2,2,1,ix,iy)
                coeff(2,4) = -dmudx(2,2,2,ix,iy)
                coeff(3,1) = phi(1,ix,iy)
                coeff(3,2) = phi(2,ix,iy)
                coeff(4,3) = phi(1,ix,iy)
                coeff(4,4) = phi(2,ix,iy)

                RT(1) = dmudx(1,1,1,ix,iy)*xp(1,1,ix,iy) + dmudx(1,2,1,ix,iy)*xp(2,1,ix,iy) - mu(1,1,ix,iy) - dmudx(1,1,2,ix,iy)*xp(1,2,ix,iy) - dmudx(1,2,2,ix,iy)*xp(2,2,ix,iy) + mu(1,2,ix,iy)
                RT(2) = dmudx(2,2,1,ix,iy)*xp(2,1,ix,iy) + dmudx(1,2,1,ix,iy)*xp(1,1,ix,iy) - mu(2,1,ix,iy) - dmudx(2,2,2,ix,iy)*xp(2,2,ix,iy) - dmudx(1,2,2,ix,iy)*xp(1,2,ix,iy) + mu(2,2,ix,iy)
                RT(3) = x(1,ix,iy,old)
                RT(4) = x(2,ix,iy,old)

                sol = RT(

                call ludcmp(coeff,np*(nc-1),np*(nc-1),IPIV,r)
                call lubksb(coeff,np*(nc-1),np*(nc-1),IPIV,sol)

                xp(1,1:2,ix,iy) = sol(1:2)
                xp(2,1:2,ix,iy) = sol(3:4)

        end subroutine convert_composition
其中:dmudx是系数,从别的数据中得到的;mu和x也是已知的。我用这个程序解出来的Xp有小于0或者大于1的情况,理论上应该在0~1之间。如果不考虑系数问题,我应该怎么改善算法呢?我是菜鸟一枚,用的别人的程序。谢谢您的帮忙。
7楼2012-10-02 20:57:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 zouji1983 的主题更新
信息提示
请填处理意见