1、,b,) Loop1: do while(abs(f(a)-f(b).gt.10e-6).and. $ (abs(a-b).gt.10e-6) c=(a+b)/2 if(f(a)*f(c).le.0)then b=c else a=c end if end do Loop1write(*,*)x=,celsePlease input real intervalendreal function f(x)f=4.1*x*3-5.3*x-11.8 end结果:1.4节作业1.采样简单离散求和法求下面积分值:read(*,*) a,b,n h=(b-a)/(2.0*n) s=0.0 x=a+h f2=
2、0.0 f4=0.0 loop1: do i=1,n-1 x=x+h f2=f2+f(x) f4=f4+f(x) end do loop1 s=h/3.0*(f(a)+f(b)+4.0*f4+2.0*f2) write(*,150) s100 format(1x,a=,f8.2,2x,b=,f8.2,$ 2x,n=,i4)150 format(1x,s=,f16.7) real function f(x) f=x*2/(sin(x)+1) double precision i,ai,y double precision sum=0 i=1 do 10 while(1/i.gt.1e-5) su
3、m=1/i+sum i=i+110 continue write(*,*) sum=,sum1.6节作业1.调试课本中的所有程序;(结果略)2.用双精度型数据计算: 直到 代码: 结果:3.已知三角形三个顶点的坐标分别为A(1.5,2.5),B(-2.5,1), C(1,-1),采用复型数据类型求三角形的面积和重心。 complex a,b,c,center,area,perimeter a=(1.5,2.5) b=(-2.5,1) c=(1,-1) center=(a+b+c)/3 perimeter=(a+b+c)/2 area=sqrt(perimeter*(perimeter-a)*(
4、perimeter-b)* $(perimeter-c) write(*,10)center=,centerarea=,area 10 format(1x,a,f6.3,f6.3) End4.尝试编写课件例子中对应的破译程序。有兴趣可以尝试修改原编码程序中后移位数(当前为5)变化的情况,比如移动位数为当前位置序号。 program main character*80 line1,line2 character l1 read(*,*)line1 n=len(line1) do 10 i=1,n l1=line1(i:i) if(lge(l1,A).and.lle(l1,Z).or. $ (lg
5、e(l1,az) then m=ichar(l1)+i if(m.ge.ichar().and.m.le.ichar( $(m.ge.ichar()then m=m-26 endif line2(i:i)=char(m)i)=l110 continue write(*,*)line2代码1.7节作业1.调试课件中的所有程序;2.自由落体位移公式为: 其中,其中是初始位置,是初始速度,为重力加速度,为经历时间,编写一段程序根据时间值求位移。设=1.2m,=2.5m/s(用格式输入语句读入t,并格式输出结果。)代码: program main real t write(*,*) Please in
6、put the time read(*,*)t call sum(t,s)time=,tdisplacement=,s 10 format(1x,a,f10.2) subroutine sum(t0,s) real t0,s,s0,v0,g s0=1.2 v0=2.5 g=9.8 s=(g*t0*2)/2+v0*t0+s01.8节作业1. 采用三种方法(矩形法、梯形法和Simpson法)编程对进行积分,积分上下限等参数需通过read语句从外部调入,并最终比较三种方法与理论解进行比较; C 矩阵法 real error read(*,*) a,b,n x=a h=(b-a)/n f0=x*sin
7、(x) si=f0*h s=s+si write(*,100) a,b,n write(*,200) s,f10.3,3x, $ f10.3,3x,200 format(1x,f15.8) error=sin(b)-sin(a)-b*cos(b)+a*cos(a)-s write(*,300) error300 format(1x,error=,f16.10) C 梯形法 si=(x+(i-1)*h)*sin(x+(i-1)*h)+ $ (x+(i-1)*h)*sin(x+i*h)*h/2.0,f10.3,3x, $ C sinpson法 real error fa=fun(a) fb=fun
8、(b) f4=fun(x) do 10 i=1,n-1 f2=f2+fun(x) f4=f4+fun(x) s=h/3.0*(fa+fb+4.0*f4+2.0*f2) $ 2x, write(*,200) error real function fun(x) fun=x*sin(x)矩阵法结果:梯形法结果:Sinpson法结果: 分析:从上面得到的结果可以看出矩阵法误差最大,sinpson法次之,梯形法最优,但是从数学上分析,Sinpson法应得到最好的结果,在本题中误差较小,在可以接受的误差范围之内,如果遇到变化较大的函数进行积分,可以预见的是,sinpson法最优,梯形法次之,矩形法误差最
9、大。3.编程对任意系数一元多次方程进行求根,求根范围和方程系数通过read语句从外部调入(采用一种方法即可,注意无根的处理); 代码: program main5 read(*,*) x1,x2,a1,a2,a3,a4 f1=a1*x1*3+a2*x1*2+a3*x1+a4 f2=a1*x2*3+a2*x2*2+a3*x2+a4 if(sign(f1,f2).eq.f1) goto 5 f=1.020 if(abs(x1-x2).gt.1e-5).and. $ abs(f).gt.1e-6) then x=x2-(x2-x1)/(f2-f1)*f2 f=a1*x*3+a2*x*2+a3*x+a
10、4 if(sign(f,f1).eq.f) then x1=x f1=f x2=x f2=f goto 20 if(abs(f).gt.1e-6) x=(x1+x2)/2.0 write(*,100) x,f15.7) 4.改编课件中求函数极值程序,实现最大值的求解,函数为: real low,high,x1,x2 read(*,*) low,high write(*,200) x1=low+0.618*(high-low) x2=high-0.618*(high-low)10 if(high-low.gt.1e-4) then f1=3*x1*x1-8.0*x1-7.0 f2=3*x2*x2-8.0*x2-7.0 write(*,202) x1,f1,x2,f2 if(f1.gt.f2) then high=x1 x1=x2 low=x2 x2=x1 goto 10 f=f2 x=x2 f=f1 x=x1 write(*,204) x,f200 format(12x,x1,14x,f1 $ 13x,x2,13x,f2/)202 format(1x,4f15.7)204 format(0,f10.6,5x,f(x)=
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1