Программа должна вычислить длину кривой ƒ=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
как целое число и вычислить толькоx
, объявленный какdouble precision
, изi
. - person Vladimir F   schedule 17.11.2015(5.3*20/x*abs(x2-x1))
должно быть(5.3*20/(x*abs(x2-x1)))
(конечно, определение функции или предварительное вычисление локальногоx
позволяет избежать такой ошибки) - person agentp   schedule 17.11.2015