Как построить несколько точек данных, полученных при оценке функции методом Ньютона - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь собрать несколько точек данных, используя метод Ньютона для аппроксимации значений x ^ y = y ^ x, когда x не равно y.У меня возникают проблемы с поиском, как оценить функцию (с помощью метода Ньютона) при нескольких разных фиксированных значениях y.После этого я стремлюсь сохранить результирующие (x, y) координатные точки в списке, а затем построить их в виде линии.Вот несколько примеров кода, который я собрал до сих пор.

(Пожалуйста, миритесь с моим отсутствием навыков кодирования, я только начал учиться использовать sagemath, и моя борьба за то, чтобы эта работа принесла мневот после нескольких часов исследований. Спасибо.)

x=var('x');
y = ? '''(Some varying list of numbers between 1 and 100 at increments of 0.1. 
I am not sure how represent this with code.)'''
f(x)=x^(y/x)
df=diff(f,x);
NewtonIt (x)=x-(f/df) (x);

#### this is the for loop I was playing around with
'''xn=1.5;
print xn;
for i in range(5):
xn=N(NewtonIt(xn),digits=20)
print xn;'''

#### this is the while loop that I am leaning towards using
x0=2; 
print x0
x1=N(NewtonIt(x0),digits=25)
print x1;
while abs (x0-x1)>10^(-25):
x0=x1
x1=N(NewtonIt(x0),digits=25)
print(x1);      

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

line([(x0,y0),(x1,y1),....(xn,yn)], legend_label='Approximation of x^y=y^x');

Мне кажется, что уравнение, которое я определил как f (x), может не бытьидеально подходит для решения этой проблемы.Любое понимание того, что использовать вместо этого, будет оценено, но моя цель состоит в том, чтобы разработать код, который мог бы пройти через несколько тысяч итераций и создать точки данных, которые затем можно было бы легко построить на 2D-графике.

Любая помощь илипонимание этой проблемы будет наиболее ценно.Кроме того, я прошу прощения за мое незнание понимания Sagemath и Python, и надеюсь, что вы рассмотрите эту проблему от моего имени.

1 Ответ

0 голосов
/ 09 мая 2019

Классический метод Ньютона из исчисления обычно используется с функциями одной переменной. Это не то, что вы делаете. Вы должны выбрать определенный y, а затем использовать метод Ньютона, чтобы найти ноль некоторой функции. В этом случае x^y-y^x (для константы y) может подойти. Вот пример того, как вы можете заставить это работать в Sage.

var('y')
g(x) = x^y-y^x

def find_point(y):
    f = g.subs(y=y)
    fp = diff(f,x)
    NewtonIteration(x) = x - (f/fp)(x)
    x1 = 2
    x2 = N(NewtonIteration(x1))
    while abs(x2-x1) > 10^-10:
        x1 = x2
        x2 = N(NewtonIteration(x1))

    return (x1,y)

L = [2,3,4,5,6]
[find_point(l) for l in L]

Тогда вы действительно можете использовать line() с любым списком, который вы сделали. Вы могли бы назвать это M = [find_point(l) for l in L] и сделать, например, line(M). Вот аналогичный живой пример.

Наконец, похоже, что вы используете что-то с этого веб-сайта , в котором есть лишние точки с запятой. Вам может понравиться этот (который я только что скопировал) или этот из вики Sage лучше в качестве моделей.

...