Сообщение об ошибке в этом случае, я думаю, сбивает вас с пути. Он предполагает, что вы не создаете возвращаемое значение для функции, хотя на самом деле строка, в которой вы пытаетесь сделать именно это, синтаксически неверна.
Помните, что всякий раз, когда функция выполняется, x
будет иметь заданное значение c, и поэтому должно возвращаемое значение f
:
double precision function f(x)
implicit none
double precision, intent(in) :: x
f = (x**(x**2)) - 1000
end function f
Аналогично, вам нужно удалить (x)
из строки df(x)=2*x**(2+x**2)
Я также Мне не нравится, что вы используете goto
в этом случае. Много раз, когда вы думаете об использовании goto
, есть лучший, менее прерывающий способ.
Это потому, что goto
прерывает поток исходного кода. Это усложняет отслеживание.
В этом случае вам нужно делать это, пока не будет выполнено условие . Есть два способа упростить чтение:
do
if (abs(f(x0)) < 1d-10) exit
k = k + 1
x0 = x0 - f(x0)/df(x0)
print *, k
end do
Или, что еще точнее, c:
do while (abs(f(x0)) >= 1d-10)
k = k + 1
x0 = x0 - f(x0)/df(x0)
print *, k
end do