fortran程序求编辑
某炮兵阵地,使用大炮向敌人阵地发射炮弹。炮弹的运行轨迹满足方程:f(x)=-0.0000125x2+0.07x-50,计算炮弹能打出的最大高度和最远距离。编写程序实现之。...
某炮兵阵地,使用大炮向敌人阵地发射炮弹。炮弹的运行轨迹满足方程:f(x)=-0.0000125x2+0.07x-50,计算炮弹能打出的最大高度和最远距离。编写程序实现之。(求平方根可用函数SQRT,如a=sqrt(4.0))。
展开
1个回答
展开全部
我想本题的关键在于理论的分析。由于炮弹的轨迹为二次曲线方程,因次炮弹在二次曲线对称轴
x=0.07/(2*0.0000125)处上升最大高度。另外炮弹发射时和落地时距地面的高度均为0。因此令f(x)=0求出发射点和落地点的横坐标x1,x2,相减之后(x2-x1),就是导弹前行的最远距离。下面是程序,望对你有帮助!
程序:
module tool
implicit none
real*8::distance !导弹上升的最大高度
real*8::high !导弹飞行的最远距离
contains
real*8 function f(x)
real*8::x
f=-0.0000125*x**2+0.07*x-50 !导弹飞行曲线的轨道方程
!f=x**2+1
end function
real*8 function binroot(f,x1,x2)!二分法求方程的根(零点)
real*8,external::f
real*8::x1,x2,x0
do while(f(x1)*f(x2)<1e-8.and.abs(x1-x2)>1e-8)
x0=(x1+x2)/2
if(f(x0)*f(x2)<1e-8)then
x1=x0
elseif(f(x1)*f(x0)<1e-8)then
x2=x0
endif
enddo
binroot=(x1+x2)/2
end function
subroutine solveproblem(f)!求解导弹高度及飞行最远距离的函数
real*8,external::f
real*8::x0=0.07/(2*0.0000125)!导弹轨道的对称轴
real*8::xL,xR,x1,x2 !xL为二分法的左端点,用来求轨道的根x1;xR为二分法的右端点,用来求轨道的根x2.
high=f(x0)
xL=x0-10
xR=x0+10
do while(f(xL)*f(x0)>1e-8)
xL=xL-10
enddo
do while(f(xR)*f(x0)>1e-8)
xR=xR+10
enddo
x1=binroot(f,xL,x0)
x2=binroot(f,x0,xR)
distance=x2-x1
end subroutine
end module
program main
use tool
implicit none
call solveproblem(f)
write(*,10) high,distance
10 format("导弹上升的最大高度",f/,"导弹前行的最远距离",f)
stop
end
x=0.07/(2*0.0000125)处上升最大高度。另外炮弹发射时和落地时距地面的高度均为0。因此令f(x)=0求出发射点和落地点的横坐标x1,x2,相减之后(x2-x1),就是导弹前行的最远距离。下面是程序,望对你有帮助!
程序:
module tool
implicit none
real*8::distance !导弹上升的最大高度
real*8::high !导弹飞行的最远距离
contains
real*8 function f(x)
real*8::x
f=-0.0000125*x**2+0.07*x-50 !导弹飞行曲线的轨道方程
!f=x**2+1
end function
real*8 function binroot(f,x1,x2)!二分法求方程的根(零点)
real*8,external::f
real*8::x1,x2,x0
do while(f(x1)*f(x2)<1e-8.and.abs(x1-x2)>1e-8)
x0=(x1+x2)/2
if(f(x0)*f(x2)<1e-8)then
x1=x0
elseif(f(x1)*f(x0)<1e-8)then
x2=x0
endif
enddo
binroot=(x1+x2)/2
end function
subroutine solveproblem(f)!求解导弹高度及飞行最远距离的函数
real*8,external::f
real*8::x0=0.07/(2*0.0000125)!导弹轨道的对称轴
real*8::xL,xR,x1,x2 !xL为二分法的左端点,用来求轨道的根x1;xR为二分法的右端点,用来求轨道的根x2.
high=f(x0)
xL=x0-10
xR=x0+10
do while(f(xL)*f(x0)>1e-8)
xL=xL-10
enddo
do while(f(xR)*f(x0)>1e-8)
xR=xR+10
enddo
x1=binroot(f,xL,x0)
x2=binroot(f,x0,xR)
distance=x2-x1
end subroutine
end module
program main
use tool
implicit none
call solveproblem(f)
write(*,10) high,distance
10 format("导弹上升的最大高度",f/,"导弹前行的最远距离",f)
stop
end
AiPPT
2024-09-19 广告
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图...
点击进入详情页
本回答由AiPPT提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询