Fortran Coder

查看: 9245|回复: 5
打印 上一主题 下一主题

[讨论] 计算方法的作业——请网友点评一下

[复制链接]

5

帖子

1

主题

0

精华

入门

F 币
105 元
贡献
45 点

规矩勋章

QQ
跳转到指定楼层
楼主
发表于 2017-11-5 19:12:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bugatti100P 于 2017-11-5 19:54 编辑

这是我自己练手的网站,代码也放这里,图片可能加载不出来,可以转来这里看
或者去我的github主页bugatti100Peagle

lar.f90 (919 Bytes, 下载次数: 1)
sample_unformatted_sequential.dat (272 Bytes, 下载次数: 0)
kt0301_2.f90 (1.19 KB, 下载次数: 0)



已经不指望老师了,而我又这么爱学习,所以向广大网友求助。这是我们学校《计算方法》的作业,我把题目和我写的代码放上来,请各位朋友看看有什么问题。代码格式问题,或者计算精度问题什么的都可以。欢迎来找bug.
[Fortran] 纯文本查看 复制代码
01!/*************************************************************************
02!   > File Name: kt0301_2.f90
03!   > Author: 青羽100P
04!   > Mail: [url=mailto:3443988515@qq.com]3443988515@qq.com[/url]
05!   > Created Time: 2017年10月11日 星期三 18时03分27秒
06! ************************************************************************/
07 
08      program kt0301_2
09!拉格朗日主程序代码
10         implicit none
11         integer::pa(17),pa_1(4),i,z,error
12         real::tem(17),tem_1(4),chads
13         !使用数组存放数值
14         open(10,file='sample_unformatted_sequential.dat',f&
15             &orm='unformatted',access='sequential',status='old')
16         i=1
17         do
18           read(10,iostat=error),tem(i),pa(i)
19           if(error/=0)exit
20           i=i+1
21         end do
22         close(10)
23         pa(1)=1000
24         pa_1=(/pa(1),pa(4),pa(7),pa(10)/)
25         tem_1=(/tem(1),tem(4),tem(7),tem(10)/)
26         !挑出1000,700,400,200处的数值作为已知点
27         !-------------------------
28         open(11,file="chazhishuju.txt")
29         do z=1,17
30             call lar(4,pa_1,tem_1,pa(z),chads)
31             write(11,"(i2,f10.4,i5,f10.4,f10.4)"),z,tem(z),pa(z),chads,chads-tem(z)
32         end do
33      end program
34      include 'lar.f90'

[Fortran] 纯文本查看 复制代码
01!/************************************************************************
02 !  > File Name: lar.f90
03 !  > Author: 青羽100P
04 !  > Mail: [url=mailto:3443988515@qq.com]3443988515@qq.com[/url]
05 !  > Created Time: 2017年10月10日 星期二 21时59分40秒
06 ! *************拉格朗日子程序代码***********************************************************/
07 
08      subroutine lar(n,x,y,cha,ds)
09         implicit none
10          integer::n,x(n),cha,i,j
11          !n表示数组长度,x横坐标,cha表示要差值x的位置
12          real::y(n),larlc,ds
13          ds=0
14          larlc=1
15          do j=1,n
16          larlc=1
17          !保证不受上一次运算结果影响
18              do i=1,n
19                 if(i==j)then
20                     larlc=larlc*1.0
21                 else
22                     larlc=larlc*((cha-x(i)*1.0)/(x(j)*1.0-x(i)*1.0))
23                 end if
24                 !此处if 块,实现连乘算式,当算到自己是等于1就可以了,也可以直接用cycle
25                     !每个算式后 *1.0 保证实型运算,否则会被省略,结果全为零
26              end do
27              ds=ds+larlc*y(j)
28          end do
29          print*,ds
30      end subroutine
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

5

帖子

1

主题

0

精华

入门

F 币
105 元
贡献
45 点

规矩勋章

QQ
沙发
 楼主| 发表于 2017-11-5 19:36:21 | 只看该作者
本帖最后由 bugatti100P 于 2017-11-5 19:39 编辑

03.png (932.66 KB, 下载次数: 400)

03.png

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

板凳
发表于 2017-11-7 10:57:10 | 只看该作者
弟子不必不如师,师不必贤于弟子。
lz心气颇高,可是大胆的设想往往需要小心的求证诶!
首先,题目中说用N次拉格朗日差值法差值,莫非N可以取正无穷?龙格现象就华丽丽的忽略了?随着N变化,差值误差如何变化?
其次,拉格朗日差值法就没有改进的?知网搜索过相关文献了吗?多项式差值系数为啥不能预先计算好?如何算?两分法求根?伴随矩阵求逆?矩阵求逆的数值方法(直接法、迭代法)?计算方法课那么多内容为啥不能融会贯通呢?
最后,计算方法重在方法的推导与误差分析,切忌舍本逐末侧重代码本身的奇技淫巧

5

帖子

1

主题

0

精华

入门

F 币
105 元
贡献
45 点

规矩勋章

QQ
地板
 楼主| 发表于 2017-11-12 23:35:03 来自移动端 | 只看该作者
谢谢,受教了

5

帖子

1

主题

0

精华

入门

F 币
105 元
贡献
45 点

规矩勋章

QQ
5#
 楼主| 发表于 2017-11-12 23:37:55 来自移动端 | 只看该作者
后面的那些方法我还没学,我再去看看课本,希望老师下次继续来点评。

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

6#
发表于 2017-11-13 10:01:13 | 只看该作者
bugatti100P 发表于 2017-11-12 23:37
后面的那些方法我还没学,我再去看看课本,希望老师下次继续来点评。

1、看完课本记得做习题;
2、前面已经说了,计算方法课程主要是学习推导过程与分析,编程只是辅助工具。希望点评计算方法作业,请去知乎或者stack exchange
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2025-4-29 17:37

Powered by Discuz! X3.4

© 2013-2025 Comsenz Inc.

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