Итерация с фиксированной точкой и построение в Python - PullRequest
0 голосов
/ 06 апреля 2011

Учитывая функцию g (x), я хочу найти фиксированную точку для этой функции, используя итерация с фиксированной точкой . Кроме нахождения самой точки, я хочу построить график для функции, используя matplotlib.pyplot, и включить вертикальные и горизонтальные столбцы, которые показывают, как итерация закрывается в фиксированной точке (если она существует). Пример изображения

Вся помощь приветствуется! / программирование новичка

РЕДАКТИРОВАТЬ: Так как я еще не слишком комфортно с объектами генератора, я написал следующий код. Это не совсем работает, хотя: что с ним не так?

from matlibplot.axes import vlines, hlines

def fixpt(f, x, epsilon=1.0E-4, N=500, store=False):
    y = f(x)
    n = 0
    if store: Values = [(x, y)]
    while abs(y-x) >= epsilon and n < N:
        x = f(x)
        n += 1
        y = f(x)
        if store: Values.append((x, y))
        vlines(x, min(x, y), max(x, y), color='b')
        hlines(y, min(y, x), max(y, x), color='b')
    if store:
        return y, Values
    else:
        if n >= N:
            return "No fixed point for given start value"
        else: 
            return x, n, y

Ответы [ 3 ]

1 голос
/ 07 апреля 2011

Ваша функция выглядит хорошо.Я не знаком с vlines и hlines.Я использовал ваш аргумент store, чтобы получить точки и вывести их за пределы функции (как правило, лучше отделить подобные задачи).

Я использовал только функцию plot из matplotlib.pyplot, а функцию show -отобразить график.

from matplotlib import pyplot as plt
import numpy as np

def fixpt(f, x, epsilon=1.0E-4, N=500, store=False):
    y = f(x)
    n = 0
    if store: Values = [(x, y)]
    while abs(y-x) >= epsilon and n < N:
        x = f(x)
        n += 1
        y = f(x)
        if store: Values.append((x, y))
    if store:
        return y, Values
    else:
        if n >= N:
            return "No fixed point for given start value"
        else: 
            return x, n, y

# define f
def f(x):
    return 0.2*x*x

# find fixed point
res, points = fixpt(f, 3, store = True)

# create mesh for plots
xx = np.arange(0, 6, 0.1)

#plot function and identity
plt.plot(xx, f(xx), 'b')
plt.plot(xx, xx, 'r')

# plot lines
for x, y in points:
    plt.plot([x, x], [x, y], 'g')
    plt.plot([x, y], [y, y], 'g')

# show result
plt.show()
1 голос
/ 06 апреля 2011
def fixedpoint(f,x):
    while x != f(x):
        yield x
        x = f(x)
    yield x

Использование: fixedpoint(g,some_starting_value).

Вертикальные и горизонтальные столбцы зависят от библиотеки графиков.Укажите, какой вы используете.

0 голосов
/ 12 апреля 2015

Вот как я это продумал:

from pylab import *

def f(x):
  return 8*x/(1 + 2*x)

def cobweb(x0, n, ax):
  xs = [x0]
  ys = [0]
  for i in range(1,n):
    if i % 2 == 0:
      xs.append(ys[-1])
      ys.append(ys[-1])
    else:
      xs.append(xs[-1])
      ys.append(f(xs[-1]))
  ax.plot(xs, ys, 'k--', lw=2.0)

x = linspace(0, 4, 100)

fig = figure()
ax  = fig.add_subplot(111)

ax.plot(x, x,    'k', lw=2.0)
ax.plot(x, f(x), 'r', lw=2.0)
cobweb(0.5, 50, ax)

ax.set_xlabel(r'$x$')
ax.set_ylabel(r'$f(x)$')

grid()
show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...