Fortran Coder

查看: 5181|回复: 2
打印 上一主题 下一主题

[其他行业算法] 牛顿法——求解程序

[复制链接]

23

帖子

9

主题

0

精华

熟手

F 币
125 元
贡献
79 点
跳转到指定楼层
楼主
发表于 2015-2-4 11:43:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目的是想建立一个通用的牛顿求解算法的框架,就是说,对于不同的问题,只需要将初值A0,以及问题FX,导数DFX输入,调用牛顿算法,就可以求出结果。


我写的程序如下:有错误,请高手指点一下应该在怎样写?多谢多谢!!
[Fortran] 纯文本查看 复制代码
01subroutine module_and_algorithm
02implicit none
03double precision,external :: cubic_roots,der_cubic_roots
04integer,parameter :: length=4
05double precision Co(length)
06double precision :: x0 =1d0
07double precision y
08co=(/3d0,12d0,0d0,1d0/)
09call newton(x0,cubic_roots,der_cubic_roots,y)
10print *, "this is the roots near X0",y
11 
12end subroutine
13subroutine cubic_roots(Co,length,y)
14implicit none
15integer length,i
16double precision x
17double precision y
18double precision temp(length)
19do i=1,length
20temp(i)=co(i)*x**(i-1)
21end do
22y=sum(temp)
23return
24end subroutine
25subroutine der_cubic_roots(Co,length,y)
26implicit none
27integer length,i
28double precision x
29double precision y
30double precision temp(length-1)
31do i=2,length
32temp(i)=dble(i-1)*co(i)*x**(length-2)
33end do
34y=sum(temp)
35return
36end subroutine
37subroutine newton(a,f,df,b)
38implicit none
39double precision :: epsilon=1d-6
40double precision a,b,fb
41double precision,external :: f,df
42 
43b=a-f(a)/df(a)
44fb=f(b)
45 
46print *, "i am here (1)",fb
47do while(abs(fb)>epsilon)
48a=b
49b=a-f(a)/df(a)
50fb=f(b)
51print *, "i am here (2)", fb
52end do
53return
54end subroutine
55program main
56call module_and_algorithm
57end

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

23

帖子

9

主题

0

精华

熟手

F 币
125 元
贡献
79 点
沙发
 楼主| 发表于 2015-2-4 14:08:44 | 只看该作者
解决了  麻烦各位了 。。

838

帖子

2

主题

0

精华

大宗师

F 币
3937 元
贡献
2339 点
板凳
发表于 2015-2-4 15:52:50 | 只看该作者
本帖最后由 li913 于 2015-2-4 15:54 编辑

初值A0,函数FX,导数DFX,这三者都作为输入参数。
subroutine Newton(a0,fx,dfx,...,...)这样的好处就是代码可不经修改(或少量修改),用于其他项目。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2025-4-30 18:02

Powered by Discuz! X3.4

© 2013-2025 Comsenz Inc.

快速回复 返回顶部 返回列表