import json
import math
import plotly.graph_objects as go
# Variant 22:
# x = 4 / (x^2 + 2x + 6)
def phi(x):
return 4 / (x*x + 2*x + 6)
def f(x):
return phi(x) - x
x0 = 0.5
eps = 1e-6
max_iter = 100
# Fixed-point iterations
xs = [x0]
for _ in range(max_iter):
xn = phi(xs[-1])
xs.append(xn)
if abs(xs[-1] - xs[-2]) < eps:
break
root = xs[-1]
iterations = len(xs) - 1
print(f"x0 = {x0}")
print(f"iterations = {iterations}")
print(f"root ≈ {root:.10f}")
# Save iteration table
with open('variant22_iterations.csv', 'w', encoding='utf-8') as fcsv:
fcsv.write('n,x_n,abs_dx\n')
for n in range(1, len(xs)):
fcsv.write(f'{n},{xs[n]:.10f},{abs(xs[n]-xs[n-1]):.10f}\n')
# Chart 1: convergence of iterations
fig1 = go.Figure()
fig1.add_trace(go.Scatter(
x=list(range(len(xs))),
y=xs,
mode='lines+markers',
name='x_n'
))
fig1.update_layout(
title={
"text": "Convergence of iterations for variant 22<br><span style='font-size:18px;font-weight:normal;'>Source: lab task | fixed-point method</span>"
},
legend=dict(orientation='h', yanchor='bottom', y=1.02, xanchor='center', x=0.5)
)
fig1.update_xaxes(title_text='n')
fig1.update_yaxes(title_text='x_n')
fig1.update_traces(cliponaxis=False)
fig1.write_image('variant22_convergence.png')
with open('variant22_convergence.png.meta.json', 'w', encoding='utf-8') as fmeta:
json.dump({
"caption": "Convergence of fixed-point iterations",
"description": "Line chart showing successive approximations x_n for variant 22 until convergence."
}, fmeta, ensure_ascii=False)
# Chart 2: function and identity line
xmin, xmax = 0, 1
grid = [xmin + (xmax - xmin) * i / 400 for i in range(401)]
y_phi = [phi(x) for x in grid]
y_id = grid
fig2 = go.Figure()
fig2.add_trace(go.Scatter(x=grid, y=y_phi, mode='lines', name='phi(x)'))
fig2.add_trace(go.Scatter(x=grid, y=y_id, mode='lines', name='y = x'))
fig2.add_trace(go.Scatter(
x=[root],
y=[root],
mode='markers+text',
name='root',
text=[f'{root:.6f}'],
textposition='top center'
))
fig2.update_layout(
title={
"text": "Intersection for variant 22<br><span style='font-size:18px;font-weight:normal;'>Source: lab task | fixed-point equation and y=x</span>"
},
legend=dict(orientation='h', yanchor='bottom', y=1.02, xanchor='center', x=0.5)
)
fig2.update_xaxes(title_text='x')
fig2.update_yaxes(title_text='y')
fig2.update_traces(cliponaxis=False)
fig2.write_image('variant22_intersection.png')
with open('variant22_intersection.png.meta.json', 'w', encoding='utf-8') as fmeta:
json.dump({
"caption": "Intersection of phi(x) and y=x",
"description": "Graph of the iteration function and the identity line with the numerical root highlighted."
}, fmeta, ensure_ascii=False)