Я пытаюсь использовать правило Симпсона для вычисления интеграла sqrt(1-x^2) в интервале от -1 до 1. Однако сумма, представленная переменной "s", в разработанном мной коде, не вообще не сходятся к пи более 2. Я абсолютный новичок в фортране и программировании в целом, поэтому, пожалуйста, потерпите меня. Что я делаю не так?
PROGRAM integral
REAL*8 :: x
REAL*8 :: h
REAL*8 :: fodd
REAL*8 :: feven
REAL*8 :: simpson
REAL*8 :: s
x = -1
s = 0
simpson = 0
h = 0
DO WHILE (x<=1)
fodd = sqrt(1-(x+(2*h+0.1))**(2))
feven = sqrt(1-(x+2*h)**(2))
simpson = 4*fodd + 2*feven
s = s + simpson*(h/3)
WRITE(*,*) x,h, fodd, feven, simpson, s
h = 0.1
x = x + h
END DO
END PROGRAM
Вот ссылка на результат, который он генерирует: https://pastebin.com/mW06Z6Lq.
Поскольку этот интеграл составляет всего половину площади круга радиуса 1, он должен сходиться к пи на протяжении 2, но он намного превосходит это значение. Я думал о том, чтобы сделать шаг меньше для точности, но это не проблема, так как он даже превзошел ожидаемое значение, когда я попробовал это.
h
перед циклом. Это не главная проблема здесь, но это важно для будущего. Кроме того, вы действительно должны сообщить нам, какие именно результаты вы получаете и какие именно результаты вы ожидаете взамен. - person Vladimir F   schedule 06.04.2019real*8
не является стандартным Fortran stackoverflow.com/questions/838310/fortran-90-kind-parameter stackoverflow.com/questions/3170239/ - person Vladimir F   schedule 07.04.2019h
действительно должен быть установлен перед циклом и пусть зафиксирован. Пожалуйста, не ссылайтесь ни на какой pastebin. Поместите важную информацию прямо в свой вопрос. Вопросы здесь должны быть доступны для других даже тогда, когда внешние ресурсы перестанут работать в будущем. - person Vladimir F   schedule 07.04.2019