- UID
- 201
- 性别
- 男

小菜鸟
- 积分
- 413
F 币- 270 元
- 最后登录
- 2019-3-28
贡献- 131 点
- 注册时间
- 2014-3-19
权杖- 0 枚
惯用编译器:Intel Visual Fortran for Windows

熟手
小菜鸟
F 币- 270 元
贡献- 131 点

|
终于成功了!谢谢@chuxf,帮我解决了很多问题。第二次编程终于完成了高斯勒让德积分法。一下是最后的完整代码,欢迎大家批评指正。
原理:高斯积分法 http://zh.wikipedia.org/wiki/高斯求积
实例:这里求sinx在(0,π/2)内的积分,结果应为1
程序如下:
[Fortran] 纯文本查看 复制代码 004 | real , parameter :: zero = 1 E -15 |
005 | integer , parameter :: n = 7 |
007 | real * 8 function bisect ( a , b ) |
009 | real * 8 :: a , b , c , fa , fb , fc |
026 | real * 8 function func ( x ) |
034 | fun ( i ) = ( ( 2 * i -1 ) * x * fun ( i -1 ) - ( i -1 ) * fun ( i -2 ) ) / i |
040 | real * 8 function func 1 ( x ) |
048 | fun ( i ) = ( ( 2 * i -1 ) * x * fun ( i -1 ) - ( i -1 ) * fun ( i -2 ) ) / i |
054 | real * 8 function fx ( x ) |
059 | y = ( a + b ) / 2 + ( ( b - a ) / 2 ) * x |
072 | real * 8 , allocatable :: k ( : ) |
076 | allocate ( k ( size ( fn ) ) ) |
082 | write ( * , * ) 'j=' , j , 'm=' , m |
089 | fn ( i ) = bisect ( k ( i ) , k ( i ) +0.001 _ 8 ) |
102 | real * 8 :: pnn ( n ) , ak ( n ) , fn ( n +1 ) |
106 | pnn ( i ) = ( n * ( func 1 ( fn ( i ) ) - fn ( i ) * func ( fn ( i ) ) ) ) / ( 1 - fn ( i ) * * 2 d 0 ) |
107 | ak ( i ) = 2.0 / n / func 1 ( fn ( i ) ) / pnn ( i ) |
108 | answer = answer + ak ( i ) * fx ( fn ( i ) ) |
109 | write ( * , * ) i , fn ( i ) , ak ( i ) |
111 | write ( * , * ) 'answer=' , answer * 1.57079632 / 2 |
输出结果如图
|
|