给定函数g(x),我想找到这个函数的固定点 fixed point iteration。除了找到点本身之外,我想使用matplotlib.pyplot将图形绘制到函数中,并包括显示迭代如何在固定点(如果存在)上关闭的垂直和水平条。 Example picture
所有帮助表示赞赏! /编程新手
编辑:由于我对生成器对象不太满意,我编写了以下代码。虽然不太合适:它有什么问题?
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
答案 0 :(得分:1)
def fixedpoint(f,x):
while x != f(x):
yield x
x = f(x)
yield x
用法:fixedpoint(g,some_starting_value)
。
垂直和水平条取决于绘图库。指定您使用的是哪一个。
答案 1 :(得分:1)
你的功能看起来很好。我不熟悉vlines和hlines。我使用你的商店arg获取积分,并将它们绘制在函数之外(通常更好地分离这样的问题)。
我只使用matplotlib.pyplot中的plot函数和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()
答案 2 :(得分:0)
以下是我的想法:
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()