西安交大并行计算作业
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
si=f0*h
s=s+si
x=x+h
f0=x*sin(x)
10 continue
write(*,100) a,b,n
write(*,200) s
100 format(1x,'a=',f10.3,3x,'b=',
$ f10.3,3x,'n=',i4)
200 format(1x,'s=',f15.8)
error=sin(b)-sin(a)-b*cos(b)+a*cos(a)-s
(结果略)
2.自由落体位移公式为: 其中 ,其中 是初始位置, 是初始速度, 为重力加速度, 为经历时间,编写一段程序根据时间值求位移 。设 =1.2m, =2.5m/s (用格式输入语句读入t,并格式输出结果。)
代码:
program main
real t
write(*,*) "Please input the time"
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)*(perimeter-b)*
$(perimeter-c))
write(*,10)"center=",center
代码:
read(*,*) a,b,n
h=(b-a)/(2.0*n)
s=0.0
x=a+h
f2=0.0
f4=0.0
loop1: do i=1,n-1
x=x+h
f2=f2+f(x)
x=x+h
f4=f4+f(x)
end do loop1
s=h/3.0*(f(a)+f(b)+4.0*f4+2.0*f2)
write(*,150) s
read(*,*)t
call sum(t,s)
write(*,10)"time=",t
write(*,10)"displacement=",s
10 format(1x,a,f10.2)
end
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+s0
$ 'f(x)=',f16.10)
end
结果:
b=c
else
a=c
end if
end do Loop1
write(*,*)'x=',c
else
write(*,*)'Please input real interval'
end if
end
real function f(x)
f=4.1*x**3-5.3*x-11.8
end
结果:
1.4节作业
1.采样简单离散求和法求下面积分值:
if(sign(f1,f2).eq.f1) goto 5
f=1.0
20 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+a4
if(sign(f,f1).eq.f) then
i=1
do 10 while(1/i.gt.1e-5)
sum=1/i+sum
i=i+1
10continue
write(*,*) 'sum=',sum
end
结果:
1.6节作业
1.调试课本中的所有程序;
(结果略)
2.用双精度型数据计算:
直到
代码:
double precision sum=0
i=1
do 10 while(1/i.gt.1e-5)
3.编程对任意系数一元多次方程
进行求根,求根范围和方程系数通过read语句从外部调入(采用一种方法即可,注意无根的处理);
代码:
program main
5 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
write(*,300) error
300 format(1x,'error=',f16.10)
end
C sinpson法
real error
read(*,*) a,b,n
h=(b-a)/(2.0*n)
s=0.0
fa=fun(a)
fb=fun(b)
x=a+h
f2=0.0
f4=fun(x)
do 10 i=1来自百度文库n-1
s=s+si
10 continue
write(*,100) a,b,n
write(*,200) s
100 format(1x,'a=',f10.3,3x,
$ 'b=',f10.3,3x,'n=',i4)
200 format(1x,'s=',f15.8)
error=sin(b)-sin(a)-b*cos(b)+a*cos(a)-s
x1=x
f1=f
else
x2=x
f2=f
end if
goto 20
end if
if(abs(f).gt.1e-6) x=(x1+x2)/2.0
write(*,100) x
100 format(1x,'x=',f15.7)
end
结果:
4.改编课件中求函数极值程序,实现最大值的求解,函数为:
代码:
real low,high,x1,x2
结果:
矩阵法结果:
梯形法结果:
Sinpson法结果:
分析:从上面得到的结果可以看出矩阵法误差最大,sinpson法次之,梯形法最优,但是从数学上分析,Sinpson法应得到最好的结果,在本题中误差较小,在可以接受的误差范围之内,如果遇到变化较大的函数进行积分,可以预见的是,sinpson法最优,梯形法次之,矩形法误差最大。
$(m.ge.ichar('A').and.m.le.ichar('Z')))then
else
m=m-26
endif
line2(i:i)=char(m)
else
line2(i:i)=l1
endif
10 continue
write(*,*)line2
end
结果:
代码
1.7节作业
1.调试课件中的所有程序;
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.
$ (lge(l1,'a').and.lle(l1,'z'))) then
m=ichar(l1)+i
if((m.ge.ichar('a').and.m.le.ichar('z')).or.
sum=1/i+sum
i=i+1
10continue
write(*,*) 'sum=',sum
end
结果:
3.已知三角形三个顶点的坐标分别为A(1.5,2.5),B(-2.5,1), C(1,-1),采用复型数据类型求三角形的面积和重心。
代码:
complex a,b,c,center,area,perimeter
write(*,10)"area=",area
10 format(1x,a,f6.3,f6.3)
End
结果:
4.尝试编写课件例子中对应的破译程序。有兴趣可以尝试修改原编码程序中后移位数(当前为5)变化的情况,比如移动位数为当前位置序号。
代码:
program main
character*80 line1,line2
并行计算与程序设计作业
班级:姓名:学号:
1.1至1.3节作业
1.调试课件中的所有程序,并完成作业,同时在程序结果中需要输出个人信息;
代码:
Program main
write(*,*)'班级:','
write(*,*)'姓名:',''
print *,'学号:',''
end
2.编写一个数值求解方程的程序,方程为 ,求解区间为 ,误差小于1e-6。
代码:
a=1
b=5
if(f(a)*f(b).LT.0) then
write(*,*)'inter:(',a,',',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
if(f1.gt.f2) then
high=x1
x1=x2
x2=high-0.618*(high-low)
else
low=x2
x2=x1
x1=low+0.618*(high-low)
end if
goto 10
end if
f1=3*x1*x1-8.0*x1-7.0
f2=3*x2*x2-8.0*x2-7.0
x=x+h
f2=f2+fun(x)
x=x+h
f4=f4+fun(x)
10 continue
s=h/3.0*(fa+fb+4.0*f4+2.0*f2)
write(*,100) a,b,n
write(*,150) s
100 format(1x,'a=',f8.2,2x,'b=',f8.2,
$ 2x,'n=',i4)
end
结果:
1.8节作业
1.采用三种方法(矩形法、梯形法和Simpson法)编程对进行积分,积分上下限等参数需通过read语句从外部调入,并最终比较三种方法与理论解进行比较;
代码:
C矩阵法
real error
read(*,*) a,b,n
x=a
h=(b-a)/n
f0=x*sin(x)
s=0.0
do 10 i=1,n
100 format(1x,'a=',f8.2,2x,'b=',f8.2,
$ 2x,'n=',i4)
150format(1x,'s=',f16.7)
end
real function f(x)
f=x**2/(sin(x)+1)
end
double precision i,ai,y
double precision sum=0
150 format(1x,'s=',f16.7)
error=sin(b)-sin(a)-b*cos(b)+a*cos(a)-s
write(*,200) error
200 format(1x,'error=',f16.10)
end
real function fun(x)
fun=x*sin(x)
end
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
write(*,300) error
300 format(1x,'error=',f16.10)
end
C梯形法
real error
read(*,*) a,b,n
x=a
h=(b-a)/n
s=0.0
do 10 i=1,n
si=((x+(i-1)*h)*sin(x+(i-1)*h)+
$ (x+(i-1)*h)*sin(x+i*h))*h/2.0
if(f1.gt.f2) then
f=f2
x=x2
else
f=f1
x=x1
end if
write(*,204) x,f
200 format(12x,'x1',14x,'f1',
$ 13x,'x2',13x,'f2'/)
202 format(1x,4f15.7)
204 format('0','x=',f10.6,5x,
s=s+si
x=x+h
f0=x*sin(x)
10 continue
write(*,100) a,b,n
write(*,200) s
100 format(1x,'a=',f10.3,3x,'b=',
$ f10.3,3x,'n=',i4)
200 format(1x,'s=',f15.8)
error=sin(b)-sin(a)-b*cos(b)+a*cos(a)-s
(结果略)
2.自由落体位移公式为: 其中 ,其中 是初始位置, 是初始速度, 为重力加速度, 为经历时间,编写一段程序根据时间值求位移 。设 =1.2m, =2.5m/s (用格式输入语句读入t,并格式输出结果。)
代码:
program main
real t
write(*,*) "Please input the time"
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)*(perimeter-b)*
$(perimeter-c))
write(*,10)"center=",center
代码:
read(*,*) a,b,n
h=(b-a)/(2.0*n)
s=0.0
x=a+h
f2=0.0
f4=0.0
loop1: do i=1,n-1
x=x+h
f2=f2+f(x)
x=x+h
f4=f4+f(x)
end do loop1
s=h/3.0*(f(a)+f(b)+4.0*f4+2.0*f2)
write(*,150) s
read(*,*)t
call sum(t,s)
write(*,10)"time=",t
write(*,10)"displacement=",s
10 format(1x,a,f10.2)
end
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+s0
$ 'f(x)=',f16.10)
end
结果:
b=c
else
a=c
end if
end do Loop1
write(*,*)'x=',c
else
write(*,*)'Please input real interval'
end if
end
real function f(x)
f=4.1*x**3-5.3*x-11.8
end
结果:
1.4节作业
1.采样简单离散求和法求下面积分值:
if(sign(f1,f2).eq.f1) goto 5
f=1.0
20 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+a4
if(sign(f,f1).eq.f) then
i=1
do 10 while(1/i.gt.1e-5)
sum=1/i+sum
i=i+1
10continue
write(*,*) 'sum=',sum
end
结果:
1.6节作业
1.调试课本中的所有程序;
(结果略)
2.用双精度型数据计算:
直到
代码:
double precision sum=0
i=1
do 10 while(1/i.gt.1e-5)
3.编程对任意系数一元多次方程
进行求根,求根范围和方程系数通过read语句从外部调入(采用一种方法即可,注意无根的处理);
代码:
program main
5 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
write(*,300) error
300 format(1x,'error=',f16.10)
end
C sinpson法
real error
read(*,*) a,b,n
h=(b-a)/(2.0*n)
s=0.0
fa=fun(a)
fb=fun(b)
x=a+h
f2=0.0
f4=fun(x)
do 10 i=1来自百度文库n-1
s=s+si
10 continue
write(*,100) a,b,n
write(*,200) s
100 format(1x,'a=',f10.3,3x,
$ 'b=',f10.3,3x,'n=',i4)
200 format(1x,'s=',f15.8)
error=sin(b)-sin(a)-b*cos(b)+a*cos(a)-s
x1=x
f1=f
else
x2=x
f2=f
end if
goto 20
end if
if(abs(f).gt.1e-6) x=(x1+x2)/2.0
write(*,100) x
100 format(1x,'x=',f15.7)
end
结果:
4.改编课件中求函数极值程序,实现最大值的求解,函数为:
代码:
real low,high,x1,x2
结果:
矩阵法结果:
梯形法结果:
Sinpson法结果:
分析:从上面得到的结果可以看出矩阵法误差最大,sinpson法次之,梯形法最优,但是从数学上分析,Sinpson法应得到最好的结果,在本题中误差较小,在可以接受的误差范围之内,如果遇到变化较大的函数进行积分,可以预见的是,sinpson法最优,梯形法次之,矩形法误差最大。
$(m.ge.ichar('A').and.m.le.ichar('Z')))then
else
m=m-26
endif
line2(i:i)=char(m)
else
line2(i:i)=l1
endif
10 continue
write(*,*)line2
end
结果:
代码
1.7节作业
1.调试课件中的所有程序;
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.
$ (lge(l1,'a').and.lle(l1,'z'))) then
m=ichar(l1)+i
if((m.ge.ichar('a').and.m.le.ichar('z')).or.
sum=1/i+sum
i=i+1
10continue
write(*,*) 'sum=',sum
end
结果:
3.已知三角形三个顶点的坐标分别为A(1.5,2.5),B(-2.5,1), C(1,-1),采用复型数据类型求三角形的面积和重心。
代码:
complex a,b,c,center,area,perimeter
write(*,10)"area=",area
10 format(1x,a,f6.3,f6.3)
End
结果:
4.尝试编写课件例子中对应的破译程序。有兴趣可以尝试修改原编码程序中后移位数(当前为5)变化的情况,比如移动位数为当前位置序号。
代码:
program main
character*80 line1,line2
并行计算与程序设计作业
班级:姓名:学号:
1.1至1.3节作业
1.调试课件中的所有程序,并完成作业,同时在程序结果中需要输出个人信息;
代码:
Program main
write(*,*)'班级:','
write(*,*)'姓名:',''
print *,'学号:',''
end
2.编写一个数值求解方程的程序,方程为 ,求解区间为 ,误差小于1e-6。
代码:
a=1
b=5
if(f(a)*f(b).LT.0) then
write(*,*)'inter:(',a,',',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
if(f1.gt.f2) then
high=x1
x1=x2
x2=high-0.618*(high-low)
else
low=x2
x2=x1
x1=low+0.618*(high-low)
end if
goto 10
end if
f1=3*x1*x1-8.0*x1-7.0
f2=3*x2*x2-8.0*x2-7.0
x=x+h
f2=f2+fun(x)
x=x+h
f4=f4+fun(x)
10 continue
s=h/3.0*(fa+fb+4.0*f4+2.0*f2)
write(*,100) a,b,n
write(*,150) s
100 format(1x,'a=',f8.2,2x,'b=',f8.2,
$ 2x,'n=',i4)
end
结果:
1.8节作业
1.采用三种方法(矩形法、梯形法和Simpson法)编程对进行积分,积分上下限等参数需通过read语句从外部调入,并最终比较三种方法与理论解进行比较;
代码:
C矩阵法
real error
read(*,*) a,b,n
x=a
h=(b-a)/n
f0=x*sin(x)
s=0.0
do 10 i=1,n
100 format(1x,'a=',f8.2,2x,'b=',f8.2,
$ 2x,'n=',i4)
150format(1x,'s=',f16.7)
end
real function f(x)
f=x**2/(sin(x)+1)
end
double precision i,ai,y
double precision sum=0
150 format(1x,'s=',f16.7)
error=sin(b)-sin(a)-b*cos(b)+a*cos(a)-s
write(*,200) error
200 format(1x,'error=',f16.10)
end
real function fun(x)
fun=x*sin(x)
end
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
write(*,300) error
300 format(1x,'error=',f16.10)
end
C梯形法
real error
read(*,*) a,b,n
x=a
h=(b-a)/n
s=0.0
do 10 i=1,n
si=((x+(i-1)*h)*sin(x+(i-1)*h)+
$ (x+(i-1)*h)*sin(x+i*h))*h/2.0
if(f1.gt.f2) then
f=f2
x=x2
else
f=f1
x=x1
end if
write(*,204) x,f
200 format(12x,'x1',14x,'f1',
$ 13x,'x2',13x,'f2'/)
202 format(1x,4f15.7)
204 format('0','x=',f10.6,5x,