Уравнение арк-синуса для решения обратной для x редко дает ответ с 2 * pi * n - PullRequest
0 голосов
/ 08 февраля 2019

Это, безусловно, неправильное понимание тригонометрической стороны этой проблемы: я создал короткую программу, которая должна сначала решить для Y с A, B, C и X в функции синуса (a, b и c).преобразования для функции греха).Затем я использую арксинус, чтобы найти X и сравнить значения между диапазонами для использования 2 * pi * n.Я что-то упускаю из-за того, что это редко дает результаты с уравнением дуги-синуса, которое соответствует моему сгенерированному значению X?

import math
import random

while True:
    arcsin_all = []
    while True:
        a = round(random.uniform(-2*math.pi, 2*math.pi), 2)
        b = round(random.uniform(-2*math.pi, 2*math.pi), 2)
        c = round(random.uniform(-2*math.pi, 2*math.pi), 2)
        x = round(random.uniform(-2*math.pi, 2*math.pi), 2)
        if a == 0 or b == 0:
            print("Denominator(s) Zero")
            pass
        else:
            break
    print("A =",a,", B =",b,", C =",c,", X =",x)
    sin = round(a*math.sin(b*x+c), 2)
    print("Y =",sin)
    for n in range(-10, 10):
        arcsin = round((math.asin(sin/a)-c+2*(math.pi)*n)/b, 2)
        arcsin_all.append(arcsin)
    if x in arcsin_all:
        print("Solved")
    else:
        print("Not Solved")
    input("Again?")

1 Ответ

0 голосов
/ 08 февраля 2019

Решение Sin(u)=t содержит две серии (из-за симметрии по отношению к вертикальной оси)

 u = arcsin(t) + 2*Pi*k
 u = Pi - arcsin(t) + 2*Pi*n

Таким образом, вы должны сформировать список возможных сущностей с обеими ветвями:

for n in range(-5, 5):
    arcsin = round((math.asin(sin/a)-c+2*(math.pi)*n)/b, 2)
    arcsin_all.append(arcsin)
    arcsin = round(((math.pi) - math.asin(sin/a) - c+ 2*(math.pi)*n)/b, 2)
    arcsin_all.append(arcsin)

Кроме того, ваше округление приводит к числовым ошибкам - они часто выявляются, если вы печатаете список arcsin_all.Например, здесь 4.92 <> 4.93, поэтому вы должны выбрать другой метод проверки - сравнить значения с некоторым абсолютным допуском (epsylon)

A = -4.93 , B = 0.09 , C = -0.22 , X = 4.93
Y = -1.09
[-344.14, -314.19, -274.33, -244.38, -204.52, -174.57, -134.7, -104.75, -64.89, -34.94, 4.92, 34.87, 74.73, 104.69, 144.55, 174.5, 214.36, 244.31, 284.17, 314.13]
Not Solved
...