24小时热门版块排行榜    

查看: 627  |  回复: 9
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

zouji1983

金虫 (正式写手)

[求助] 求助一个小程序!

我是fortran的初学者,现在用别人的程序。但我现在需要用newton-raphson解一个非线性方程,例如:lnx+x^3+A=0, 这里我要解的未知数x和常量A都是一个数组,像x是这样一个数组:(1,1,100,100), A是(1,100,100). 我只能从网上找到关于解x不是数组的code,如下:
subroutine calculation (x,A)
        integer ::k  
        real(8) :: x,x0,A
        real(8):: tol

        f(x)=lnx+x**3+A
        df(x)=1/x+3*x**2
        tol=1e-6
        x0=0.2d0
        k=0
        10 k=k+1
        x=x0-f(x0)/df(x0)
        if(abs(x-x0).lt.tol)goto 20
            x0= x
        goto 10
        20 write(*,*) x
                  end do
                end do
                        
end subroutine calculation

但是对于数组来说应该怎么改呢?我想把这个作为一个subroutine。非常感谢各位的帮组!
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

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

zouji1983

金虫 (正式写手)

引用回帖:
2楼: Originally posted by chembetsey at 2012-12-04 23:00:54
call subroutine的时候把数组元素值传进去就是了,call calculation (x(i,j,k),A(i,j,k))
或者先把数组元素值赋给一个临时变量,再传递进去

我按照你说的做了,编译都过了,但是运行的时候,显示:log domian error. 不知道怎么解决呢?谢谢!
4楼2012-12-04 23:54:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 10 个回答

chembetsey

木虫 (小有名气)

【答案】应助回帖


感谢参与,应助指数 +1
jjdg: 金币+1, 感谢说明 2012-12-05 01:49:57
call subroutine的时候把数组元素值传进去就是了,call calculation (x(i,j,k),A(i,j,k))
或者先把数组元素值赋给一个临时变量,再传递进去
2楼2012-12-04 23:00:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zouji1983

金虫 (正式写手)

引用回帖:
2楼: Originally posted by chembetsey at 2012-12-04 23:00:54
call subroutine的时候把数组元素值传进去就是了,call calculation (x(i,j,k),A(i,j,k))
或者先把数组元素值赋给一个临时变量,再传递进去

谢谢你的回复!
所以我不需要把subroutine也写成数组的形式,对吗?
3楼2012-12-04 23:49:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chembetsey

木虫 (小有名气)

【答案】应助回帖


jjdg: 金币+1, 感谢解释 2012-12-05 01:50:07
引用回帖:
4楼: Originally posted by zouji1983 at 2012-12-04 23:54:32
我按照你说的做了,编译都过了,但是运行的时候,显示:log domian error. 不知道怎么解决呢?谢谢!...

因为log(x)中x的值必须大于零,迭代的时候x若小于零,就会出错
5楼2012-12-05 01:47:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见