




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
转载fortran 77, c, c+ 和 fortran 90 的比较收藏发信人: quasar (飞贼克斯), 信区: fortran标 题: fortran 77, c, c+ 和 fortran 90 的比较(转载)发信站: 南京大学小百合站 (tue jun 1 10:59:14 2004)瀚海星云 - 文章阅读 讨论区: mathtools发信人: huicai (老灰菜), 信区: scicomp标 题: fortran 77, c, c+ 和 fortran 90 的比较(转载)发信站: 瀚海星云 (2002年12月19日10:40:38 星期四), 站内信件【 以下文字转载自 fortran 讨论区 】【 原文由 huicai 所发表 】fortran 77, c, c+ 和 fortran 90 的比较/develop/article/16/16085.shtm三十年来, 从 fortran 77 开始, fortran 成为了计算科学的主要语言.在这段时间里, fortran 的数值能力变得非常稳定 而且优于其它计算机语言; 最大的改变来自于不断增长的各种可靠的数值过程库的种类. fortran 联合(union), 它的使用技巧, 扩充的数值库为计算科学赋予了良好的基础.可是在过去十几年中, 动态数据结构(特别是动态数组)的重要性不窜上升, unix 工作站, 复杂的交互式可视化工具, 以及更近的并行体系结构-fortran 77 都没有实现-刺激了其它语言作为计算语言的使用, 最明显的一个例子是c. 最近c+ 也已经引起人们的兴趣, fortran 通过发展到 fortran 90来弥补它在现代科学计算方面的不足. 这部分的一个通常的工作是比较四种语言对科学计算的适应性的, 这四种语言是两个c 的代表(c, c+) 和两个fortran的代表(fortran 77, fortran 90). 下面的表格总结了这种比较, 后面的内容试图合理地解释这种等级排序, 从最好(1)到最差(4).功能 - f77 - c - c+ - f90数值健壮性 - 2 - 4 - 3 - 1数据并行性 - 3 - 3 - 3 - 1数据抽象 - 4 - 3 - 2 - 1面向对象编程 - 4 - 3 - 1 - 2函数型编程 - 4 - 3 - 2 - 1平均等级 - 3.4 - 3.2 - 2.2 - 1.21 数值健壮性numeric polymorphism(数值多态性)中是一个给定一个通用名称的几种版本的图形平滑过程的例子. 这里描述的通用能力是作为fortran 90提供的一种额外的数值健壮性超过fortran 77和c的特性. fortran 77, fortran 90 , 和 c 版本的smooth子过程也在下面给出, 用于比较. (注意, fortran 90版使用了第4部分描述的并行性)数值多态性, 加上实际类型的参数, 小数精度选择, 和数字环境变量检查等, 证明了fortran 90排在这四种语言中的第一位. fortran 77 列在第二为的原因在于它支持复杂变量, 这在很多计算科学应用中是很重要的. c+ 把 c 挤出了第三位是由于它在通常领域多态性上的能力.2 数据并行化部分在这四种语言中, 只有fortran 90具有对科学计算有价值的数据并行能力; 其它三种语言在这方面的特性基本上是一样的, 即全都没有. 这解释了四种语言在这个方面的排名.这里是完成高斯消去的一套fortran 77 和 c 过程:* 编程决定正确的子过程处理过程: pivot.f , triang.f , 和 back.f. * 子过程决定一系列同步方程的解*234567 program testg integer imax, jmax parameter (imax = 3, jmax = 4) real matrix(imax, jmax) real matrix(imax) integer i, j, n data ( ( matrix(i,j), j = 1, jmax), i = 1, imax) + /-1.0, 1.0, 2.0, 2.0, 3.0, -1.0, 1.0, 6.0, + -1.0, 3.0, 4.0, 4.0/ n = imax write(*,*) the original matrix,n,by,n=1,: call wrtmat(matrix, n, n +1) call pivot(matrix, n) write(*,*) the matrix after pivoting: call wrtmat(matrix, n, n +1) call triang(matrix, n) write(*,*) the matrix after lower triangulation: call wrtmat(matrix, n, n + 1) call back(solvec, matrix, n) write(*,*) the solution vector after back substitution: write(*,*) * write(*,*) (solvec(i), i = 1, n) write(*,*) * end*子过程决定第一列系数矩阵的最大值, 把最大值所在的行和第一行交换, *处理器然后重复对其他的行和列做这种处理, 对于每一次叠代, 列的位置*和行的位置增加一(即, 第1行-第1列, 然后第2行-第2列, 然后第3行-第 *3列, 等 *234567 subroutine pivot(matrix, n) integer i, j, k, n real matrix(n, n + 1), maxval, tempval do 10, j = 1, n maxval = matrix(j,j) do 20, i = j + 1, n if (maxval .lt. matrix(i,j) then maxval = matrix(i,j) do 30, k = 1, n + 1 tempval = matrix(i,k) matrix(i,k) = matrix(j, k) matrix(j,k) = tempval 30continue endif 20 continue 10 continue end*完成一个输入矩阵的低级分解的子过程 *234567 subroutine triang(matrix, n) integer i, j, k, n real matrix(n, n + 1), pivot, pcelem do 10, j = 1, n pivot = matrix(j,j) do 20, k = j + 1, n + 1 matrix(j,k) = matrix(j,k) / pivot20 continue do 30, i = j + 1, n pcelem = matrix(i,j) do 40, k = j + 1, n + 1 matrix(i,k) = matrix(i,k) - pcelem * matrix(j,k)40 continue30continue end* 子过程从一个已经经历了低级分解的参数矩阵计算一个解向量 *234567 subroutine back(solvec, matrix, n) integer n real solvec(n), matrix(n, n + 1), sum solvec(n) = matrix(n, n + 1) do 10, i = n -1, 1, -1 sum = 0.0 do 20, j = i + 1, n sum = sum + matrix(i, j) * solvec(j)20 continue solvec(i) = matrix(i, n + 1) - sum10 continue end* 测试子过程bisec.f的程序, bisec.f 决定一个方程(f.f中)的解* 可是这个函数确实假设函数-f由两个值支撑. 即在用户给定的终* 点之间的解不超过一个*234567 program testbs real xleft, xright real f external f write(*,*) please enter an initial left and right value: read(*,*) xleft, xright call bisec(f, xleft, xright) end这里是同一个算法的c 过程:/* 决定三个函数(pivot.c, triang.c, back.c)正确处理的程序 * 这些函数决定了一系列同步方程的解*/#include #define imax 3#define jmax 4float matriximaxjmax = -1.0, 1.0, 2.0, 2.0 , 3.0, -1.0, 1.0, 6.0 , -1.0, 3.0, 4.0, 4.0 ;float solvecimax = 0.0, 0.0, 0.0 ;main() void wrt_output(void); void pivot(void); void triang(void); void back(void); void wrt_vector(void); (void)printf(the original matrix %d by %d :n, imax, jmax); (void)wrt_output(); (void)pivot(); (void)printf(the matrix after pivoting:n); (void)wrt_output(); (void)triang(); (void)printf(the matrix after lower decomposition:n); (void)wrt_output(); (void)back(); (void)printf(the solution vector after back substitution:n); (void)wrt_vector();/* 决定参数矩阵中第一列的最大元素并移动第一列含有最大值的行 * 到第一行. 然后重复对其他的行和列做这种处理, 对于每一次叠 * 代, 列的位置和行的位置增加一(即, 第1行-第1列, 然后第2行- * 第2列, 然后第3行-第3列, 等*/void pivot()int i, j, k;float maxval, tempval;for(j = 1; j imax; j+) maxval = matrixjj;for ( i = (j + 1); i imax; i+) if ( maxval matrixij ) maxval = matrixij;for( k = 0; k = imax; k+) tempval = matrixik;matrixik = matrixjk;matrixjk = tempval;/* 完成一个输入矩阵的低级分解的函数 */void triang(void)int i, j, k;float pivot, pcelem;for ( j = 0; j imax; j+) pivot = matrixjj; for ( k = ( j + 1 ); k = imax; k+) matrixjk = matrixjk / pivot; for ( i = ( j + 1 ); i imax; i+) pcelem = matrixij; for ( k = ( j + 1 ); k -1; i-) sum = 0.0; for ( j = (i + 1); j imax; j+) sum = sum + matrixij * solvecj; solveci = matrixiimax - sum; void wrt_output(void)int i, j;(void)printf(*n); for ( i = 0; i imax; i+) for ( j = 0; j (jmax - 1); j+) (void)printf(%f, matrixij); (void)printf(%fn, matrixijmax - 1); (void)printf(*n);void wrt_vector(void);(void)printf(*n);(void)printf(%f, solvec0);(void)printf( %f, solvec1);(void)printg( %fn, solvec2);(void)printf(*n);/* 测试函数bisec.f的程序, bisec.f 决定一个方程(f中)的解 * 可是这个函数确实假设函数-f由两个值支撑. 即在用户给定的终 * 点之间的解不超过一个 */#include #include main()void bisec(float init_left_val, float init_right_val);float f(float value):float xleft, xright;char line100;(void)printf(please enter an initial left and right value:);(void)fgets(line, sizeof(line), stdin);(void)sscanf(line, %f %f, &xleft, &xright );(void)bisec(xleft, xright);return(0);3 数据抽象fortran 90有一个非常使用的, 使用简单的数据抽象能力。 c +作为面向对象程序设计的一个重要部分,也有很出色的数据抽象能力. 对于计算科学来说, 很多好处可以从数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年吉林省中考语文真题及答案解析
- 医疗器械销售合同
- 医院培训课件:《血液净化中心规范化管理》
- 慢性病防治与管理课件
- 新源电梯作业考试题及答案
- 中职汽修高考试题及答案
- 拱型路面考试题目及答案
- 新能源分类考试题及答案
- 食品检验考试试题及答案
- 特岗政治考试真题及答案
- 四川大学SCI期刊分级方案
- 梅大高速塌方灾害调查评估报告及安全警示学习教育
- 高考英语核心词汇1000个
- 医疗机构患者信息管理制度
- 2023年高考英语试卷(新课标Ⅰ卷)含答案解析
- 学生生活全景模板
- 安全生产管理制度-普货运输
- 建设项目日照分析报告
- 第八届全国职工职业技能大赛(网络和信息安全管理员)安徽选拔赛试题及答案
- 无人机装调检修工理论知识考试题及答案
- (部编版)统编版小学语文教材目录(一至六年级上册下册齐全)
评论
0/150
提交评论