fortran95作业答案

发布 2023-05-19 15:59:28 阅读 1170

fortran90程序设计。

麒麟火小组]

作业:一.求一元方程的根。

1.采用语句函数或函数子程序定义一元方程;

2.程序采用以下多种方法求方程的根;

牛顿迭代法,二分法,迭代法。

程序利用控制变量(如nmethod)来选择计算方法。

program frist一个可以选择子程序的主程序。

integer xuhao

print*,"请选择方法:1:二分法。2:迭代法。3:牛顿迭代法。"

read*,xuhao

if(xuhao==1)then将3种方法放在不同的子程序中,并用选择结构进行选择。

call bisection()

endifif(xuhao==2)then

call diedai()

endifif(xuhao==3)then

call niudun()

endifend

subroutine bisection二分法的子程序。

real x1,x2,x

real bisect,func1对要调用的子程序作说明。

doprint*,"输入x1,x2的值:"

read*,x1,x2

if(func1(x1)*func1(x2)<0.0)exit

print*,"不正确的输入!"

enddox=bisect(x1,x2)

print 10,'x=',x

10format(a,f15.7)

endreal function bisect(x1,x2二分法结构的函数子程序。

real x1,x2,x,f1,f2,fx

x=(x1+x2)/2.0

fx=func1(x)

do while(abs(fx)>1e-6)

f1=func1(x1)

if(f1*fx<0)then

x2=xelse

x1=xendif

x=(x1+x2)/2.0

fx=func1(x)

enddobisect=x

endreal function func1(x二分法的一元方程子程序。

real x

func1=x**3-2*x**2+7*x+4

endsubroutine diedai迭代法的子程序。

real x

integer m

print*,'请输入x0和最高循环次数的值:'

read*,x,m

call iteration(x,m)

endsubroutine iteration(x,m迭代法结构的函数子程序。

implicit none

real x,x1

real func2

integer i,m

i=1x1=func2(x)

do while(abs(x-x1)>

print 10,i,x1

x=x1i=i+1

x1=func2(x)

enddoif(i<=m)then

print 20,'x=',x1

elseprint 30,'经过',m,'次迭代后仍未收敛'

endif10 format('i='i4,6x,'x='f15.7)

20 format(a,f15.7)

30 format(a,i4,a)

endreal function func2(x迭代法一元方程的子程序。

real x

func2=(-x**3+2*x**2-4)/7

endsubroutine niudun牛顿迭代法的子程序。

real x

integer m

print*,'输入初值'

read*,x

call newton(x)

endsubroutine newton(x牛顿迭代法结构的函数子程序

implicit none

real x,x1

real func3,dfunc3

integer i,m

i=1x1=x-func3(x)/dfunc3(x)

do while (abs(x-x1)>1e-6)

print 10,i,x1

x=x1i=i+1

x1=x-func3(x)/dfunc3(x)

enddoprint 20,'x=',x1

10 format('i=',i4,6x,'x=',f15.7)

20 format(a,f15.7)

endreal function func3(x牛顿迭代法一元方程的函数子程序。

real x

func3=x**3-2*x**2+7*x+4

endreal function dfunc3(x牛顿迭代法一元方程的导数的子程序。

real x

dfunc3=3*x**2-4*x+7

end二.求解线性方程组。

用高斯消去法解线性方程组。

ax=b的解,其中a为n*n系数矩阵,x为解向量,b为方程组右端n维列向量。要求程序能够求解任意多个未知数的方程组,并附算例。

program second !一个可以选择未知数数量的求线性方程的小程序。

real,allocatable::a(:,b(:)c(:)

print*,'输入未知数个数n:'

read*,n

allocate(a(n,n为数组分配空间。

allocate(b(n))

allocate(c(n))

print*,'输出系数矩阵a:'

call input(a,n引入输入子程序。

print*,'输入等值矩阵b:'

read*,b

print*,'联立方程组:'

call output(a,b,n引入输出子程序。

call gauss_jordan(a,b,c,n) !引入乔丹法子程序。

print*,'求解:'

do i=1,n

print 10,i,c(i)

end do

10 format('x',i1,'=f8.4)

deallocate(a) !解除数组单元的分配。

deallocate(b)

deallocate(c)

endsubroutine input(a,n) !定义输入子程序。

real a(n,n)

do i=1,n

read*,(a(i,j),j=1,n)

enddoend

subroutine gauss_jordan(a,b,c,n) !定义乔丹法子程序。

dimension a(n,n),b(n),c(n)

call up(a,b,n) !乔丹法中包含的两个子程序。

call low(a,b,n)

forall(i=1:n)

c(i)=b(i)/a(i,i)

endforall

endsubroutine output(a,b,n) !定义输出子程序。

real a(n,n),b(n)

do i=1,n

print 10,a(i,1),i

do j=2,n

if(a(i,j)>0)then

print 20,a(i,j),j

elseprint 30,abs(a(i,j)),j

endifenddo

print 40,b(i)

enddo10 format(f5.2,'x',i1\)

20 format('+f5.2,'x',i1\)

Fortran95课程设计

课程设计。目录。一,任务书1 二,员工档案 工资和个人所得税6 三,求解方程11 1,求解一元方程的根11 1 1,二分法求解 1 2,弦截法求解 1 3,newton迭代法求解13 2,求方程的积分15 2 1,矩形法积分。2 2,梯形法积分。2 3,辛普生法积分。3,gauss jordan法求...

fortran作业

工程分析程序设计上机作业 六 上机目的 练习派生类型的定义 构造 初始化,成员的调用和操作,操作符的重载,指针。1 构造一个由年 月 日组成的派生类型,并编写程序,实现从键盘上输入年 月 日,由程序计算出是当年度的第几天。例如 输入 2011,4,8 输出 4月8日是2011年的第98天。注意 需考...

西安交大Fortran上机作业

工程分析程序设计上机作业 七 上机目的 练习c语言的书写 循环和判断结构。1.编写程序实现摄氏度和华氏度的相互转换 include main float c,f printf 请输入摄氏度 scanf f c f c 9 5.0 32 printf 华氏度为 f f 2.打印出6行杨辉三角形如下图 ...