Ряд Тейлора — arccos/arcsin на Prolog

      Комментарии к записи Ряд Тейлора — arccos/arcsin на Prolog отключены

В этой теме 1 ответ, 2 участника, последнее обновление  Васильев Владимир Сергеевич 1 год, 4 мес. назад.

  • Автор
    Сообщения
  • #2377

    questioner
    Участник

    Необходимо вычислить значение арккосинуса/арксинуса угла с помощью разложения в рад Тейлора на Prolog.

    Вложения:
  • #2389

    Арккосинус вычисляется через арксинус:

    pi(3.14).
    
    arccos(X, ArcCos, Eps):-
      arcsin(X, ArcSin, Eps),
      pi(Pi), 
      ArcCos is Pi/2 - ArcSin.

    Для того, чтобы на каждой итерации не приходилось вычислять факториалы и возводить числа в степень, имеет смысл передавать предыдущие значения в качестве параметров. При этом, целесообразно выделить в отдельные функции вычисление значение члена ряда по заданным параметрам, а также, вычисления новых параметров из старых:

    calc_tailor_element(N, Fact2N, FactN, Pow4N, X2N, Element):-
      Element is Fact2N * X2N / (Pow4N * FactN * FactN * (2*N+1)).
      
    calc_tailor_param(X, N, Fact2N, FactN, Pow4N, X2N, N1, Fact2N1, FactN1, Pow4N1, X2N1):-
      N1 is N + 1,
      Fact2N1 is Fact2N * N1*2 * (N1*2 - 1),
      FactN1 is FactN * N1,
      Pow4N1 is Pow4N * 4,
      X2N1 is X2N * X * X.

    Арксинус вычисляется через ряд Тейлора, при этом вычисления надо продолжать до тех пор, пока очередной член ряда не превысит заданной точности. Если точность не достигнута, нужно вычислить значение очередного члена ряда, параметры следующего члена и запустить их рекурсивную обработку. Полученное при рекурсивном вызове значение следует прибавить к текущему члену ряда, т.к. ряд тейлора задается суммой:

    arcsinTailor(_X, N, Fact2N, FactN, Pow4N, X2N, ArcSin, Eps):-
      calc_tailor_element(N, Fact2N, FactN, Pow4N, X2N, ArcSin),
      ArcSin < Eps, !.
    arcsinTailor(X, N, Fact2N, FactN, Pow4N, X2N, ArcSin, Eps):-
      calc_tailor_element(N, Fact2N, FactN, Pow4N, X2N, Element),
      calc_tailor_param(X, N, Fact2N, FactN, Pow4N, X2N, N1, Fact2N1, FactN1, Pow4N1, X2N1),
      arcsinTailor(X, N1, Fact2N1, FactN1, Pow4N1, X2N1, NextElement, Eps),
      ArcSin is Element + NextElement.

    Вложения:

Для ответа в этой теме необходимо авторизоваться.