Отражение маленьких чисел на графике
У меня есть метод простых итераций. Он отражает некоторое кол-во решений нелинейного уравнения. Проблема заключается в том, что цена деления слишком большая, как можно ее изменить
def Draw(Xn, FXn):
plt.grid()
plt.xlabel("Xn")
plt.ylabel("F(Xn)")
plt.plot(Xn, FXn)
plt.plot(Xn, FXn, '.')
plt.show()
def simpleIterationMethod():
Xn = []
FXn = []
x0, eps, a, b = get_parametrs_for_simple_iter()
iter = 0
cur_x = x0
next_x = func(cur_x)
max_iter = 1000000
Xn.append(cur_x)
FXn.append(next_x)
while abs(next_x - cur_x) > eps and iter < max_iter:
iter += 1
cur_x = next_x
next_x = func(cur_x)
Xn.append(cur_x)
FXn.append(next_x)
for i in range(len(Xn)):
print(f"Итерация {i}: Xn = {Xn[i]}, F(Xn) = {FXn[i]}")
Draw(Xn, FXn)
Вывод:
Python Console
Начальное приблежение X0 = >? 5
Введите точность eps = >? 0.001
Введите отрезок(через пробел): >? 1 10
Итерация 0: Xn = 5.0, F(Xn) = 4.360592680838103
Итерация 1: Xn = 4.360592680838103,
Итерация 2: Xn = 3.7411162320793334,
Итерация 3: Xn = 3.144815731180929,
Итерация 4: Xn = 2.5758302687039056,
Итерация 5: Xn = 2.0395382795111034,
Итерация 6: Xn = 1.5430618590112009,
Итерация 7: Xn = 1.0959842510618794,
Итерация 8: Xn = 0.7112520478585733,
Итерация 9: Xn = 0.405731006151047,
Итерация 10: Xn = 0.19767172078546044,
Итерация 11: Xn = 0.09218795392219692,
Итерация 12: Xn = 0.05506574145909428,
Итерация 13: Xn = 0.04096415852155372,
Итерация 14: Xn = 0.03381533900966394,
Итерация 15: Xn = 0.029467381721033265,
Итерация 16: Xn = 0.026515895993719844,
Итерация 17: Xn = 0.024363362100489155,
Итерация 18: Xn = 0.022712827050695182,
Итерация 19: Xn = 0.02139971935616802,
F(Xn) = 3.7411162320793334
F(Xn) = 3.144815731180929
F(Xn) = 2.5758302687039056
F(Xn) = 2.0395382795111034
F(Xn) = 1.5430618590112009
F(Xn) = 1.0959842510618794
F(Xn) = 0.7112520478585733
F(Xn) = 0.405731006151047
F(Xn) = 0.19767172078546044
F(Xn) = 0.09218795392219692
F(Xn) = 0.05506574145909428
F(Xn) = 0.04096415852155372
F(Xn) = 0.03381533900966394
F(Xn) = 0.029467381721033265
F(Xn) = 0.026515895993719844
F(Xn) = 0.024363362100489155
F(Xn) = 0.022712827050695182
F(Xn) = 0.02139971935616802
F(Xn) = 0.020325223925158967
Итерация 20: Xn = 0.020325223925158967, F(Xn) = 0.019426259952797034
Ответы (2 шт):
Автор решения: SergFSM
→ Ссылка
вы можете установить деления (ticks) там где вам нужно:
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import numpy as np
x = np.linspace(0.1, 2 * np.pi, 41)
y = np.exp(np.sin(x))
fig,ax = plt.subplots()
ax.plot(x,y)
ax.tick_params(axis='x', labelcolor='b')
ax.xaxis.set_major_locator(ticker.FixedLocator([0, 1, 1.5, 2, 3, 4, 4.5, 5]))
plt.grid()
plt.show()
Автор решения: strawdog
→ Ссылка
Ну как вариант, можно попробовать так, как описано в одной статье (взял ваши данные в виде простых списков):
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import zoomed_inset_axes
from mpl_toolkits.axes_grid1.inset_locator import mark_inset
X = [5.0, 4.360592680838103, 3.7411162320793334, 3.144815731180929, 2.5758302687039056, 2.0395382795111034, 1.5430618590112009, 1.0959842510618794,
0.7112520478585733, 0.405731006151047, 0.19767172078546044, 0.09218795392219692, 0.05506574145909428, 0.04096415852155372, 0.03381533900966394,
0.029467381721033265, 0.026515895993719844, 0.024363362100489155, 0.022712827050695182, 0.02139971935616802]
Y = [3.7411162320793334, 3.144815731180929, 2.5758302687039056, 2.0395382795111034, 1.5430618590112009, 1.0959842510618794, 0.7112520478585733,
0.405731006151047, 0.19767172078546044, 0.09218795392219692, 0.05506574145909428, 0.04096415852155372, 0.03381533900966394, 0.029467381721033265,
0.026515895993719844, 0.024363362100489155, 0.022712827050695182, 0.02139971935616802, 0.020325223925158967, 0.019426259952797034]
fix, ax = plt.subplots(figsize=(8,6))
plt.plot(X, Y, marker="o", markerfacecolor="yellow")
axins1 = zoomed_inset_axes(ax, zoom = 8, loc=2)
axins1.plot(X, Y, marker = 'o', markerfacecolor="yellow", markersize=10)
x1, x2, y1, y2 = -.1,.2,-.1,.1
axins1.set_xlim(x1, x2)
axins1.set_ylim(y1, y2)
mark_inset(ax, axins1, loc1=3, loc2=4, fc="none", ec="0.5")
plt.show()
Получим:


