Автор Тема: задача на решение уравнения  (Прочитано 1640 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Anna

  • Коллежский регистратор
  • *
  • Сообщений: 3
  • Репутация: 0
задача на решение уравнения
« : ёоЫм 05, 2009, 12:24:22 am »

Найти с точностью 0.0001 все корни уравнения 1/x=sin(x),принадлежащего отрезку[-pi,pi]/


Код: (fortran) [Выделить]
program yravnenie
data pi/3.141528/,epsilon/0.0001/
x=-pi
yp=1/x-sin(x)
  1 if(x.gt.pi)goto 7
x=x+epsilon
if(x.eq.0)goto 1
yn=1/x-sin(x)
if(yp*yn.le.0)print 10,(x)

yp=yn
goto 1
  7 continue
 10 format('x=',f10.4)
    end program yravnenie

Строка
if(x.eq.0)goto 1должна по идее исключать корень х=0,но она не работает ,помогите пожалуйста :'(

Оффлайн Alexiski

  • Любитель давать советы
  • Надворный советник
  • *****
  • Сообщений: 307
  • Репутация: 15
  • Пол: Мужской
Re: задача на решение уравнения
« Ответ #1 : ёоЫм 05, 2009, 02:27:05 am »
Точная проверка для плавающих чисел не работает. Поставьте что-то вроде

if (abs(x).lt.epsilon) goto 1

Точно проверить синтаксис не могу, фортрана под рукой нет.

Оффлайн Anna

  • Коллежский регистратор
  • *
  • Сообщений: 3
  • Репутация: 0
Re: задача на решение уравнения
« Ответ #2 : ёоЫм 05, 2009, 06:04:27 pm »
Cпасибо )с этой строкой программа вроде правильно работает ,но эта строка несовсем понятна

Оффлайн Alexiski

  • Любитель давать советы
  • Надворный советник
  • *****
  • Сообщений: 307
  • Репутация: 15
  • Пол: Мужской
Re: задача на решение уравнения
« Ответ #3 : ёоЫм 05, 2009, 08:52:51 pm »
Вместо точной проверки на ноль непосредственно вставляется проверка того, что модуль числа достаточно мал (меньше epsilon), то есть, фактически, на то, что число достаточно близко к нулю.

В результате, когда число станет равным, скажем, 0.00000001 - а такое вполне может произойти из-за ошибок округления плавающих чисел, точное сравнение не сработает, а приближенное - сработает.

Естественно, точность такого сравнения надо подбирать для каждой задачи. В данной epsilon - вполне уместно.

Оффлайн Anna

  • Коллежский регистратор
  • *
  • Сообщений: 3
  • Репутация: 0
Re: задача на решение уравнения
« Ответ #4 : ёоЫм 07, 2009, 04:52:26 pm »
Большое спасибо :)