【发布时间】:2015-11-17 13:43:51
【问题描述】:
程序必须计算ƒ=3.1*x^2-5.3/x在x=1/2和x=3/2之间的曲线长度。该长度应计算为n线段的总和,以n=1开始并以n=20结束.
我真的找不到为什么我得到的结果是错误的。例如,如果 x1=1/2 和 x2=3/2 得到 110,而我应该得到 13
我给你下面的代码:
program pr2_ex2
implicit none
integer::x
double precision::dy,dx !dy=the height of the linear part & dx=the lenght of the linear part
double precision::x1,x2,s !f=f(x) the function,x=the values which can be given to f
double precision::length
print*,"Please enter the function's starting point"
read*,x1
print*,"Please enter the function's ending point"
read*,x2
length = 0
s = 0
do x = 2, 21
dx = ((x*abs(x2-x1)-(x-1)*abs(x2-x1))/(20))
dy = (3.1*(x*abs(x2-x1)/20)**2-(5.3*20/x*abs(x2-x1)))-(3.1*((x-1)*abs(x2-x1)/20)**2-(5.3*20/(x-1)*abs(x2-x1)))
length = sqrt((dx**2)+(dy**2))
s = length+s
end do
print*,s
end program
【问题讨论】:
-
没有足够的时间浏览代码,但我建议至少将循环索引
i定义为整数,并且只计算从i声明为double precision的x。跨度> -
操作顺序错误,
(5.3*20/x*abs(x2-x1))应该是(5.3*20/(x*abs(x2-x1)))(当然定义一个函数,或者预先计算一个本地的x可以避免这种错误)