Загрузка данных


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)