
Добавил:
Molochnik
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:лаб3 / DX_for_np
.py import matplotlib.pyplot as plt
# Data provided by the user
d_values = [0.125369, 0.13079, 0.142837, 0.156321, 0.167693]
np_values = {
0: [0, 0.644284, 1.407259, 2.310162, 3.304289],
1: [6.175797, 7.087122, 8.443555, 10.010704, 11.565011],
2: [12.351595, 13.529961, 15.479851, 17.711246, 19.825734],
3: [18.527392, 19.972799, 22.516147, 25.411787, 28.086456],
4: [24.70319, 26.415638, 29.552443, 33.112329, 36.347179],
5: [30.878987, 32.858476, 36.588738, 40.812871, 44.607901]
}
# Add mirrored data for negative p values
mirrored_np_values = {}
for p, values in np_values.items():
if p == 0:
mirrored_np_values[p] = values # Keep p=0 unchanged
else:
mirrored_np_values[-p] = [-val for val in values] # Mirror the values
# Combine original and mirrored data
all_np_values = {**np_values, **mirrored_np_values}
# Add zero points for each line at the beginning (d=0, n_p=0)
for p, values in all_np_values.items():
all_np_values[p] = [0] + values # Add zero to the beginning of each line
# Extend d_values to include 0
d_values_with_zero = [0] + d_values
# Plot np(d) for each p including zero points
plt.figure(figsize=(12, 8))
for p, values in all_np_values.items():
plt.plot(d_values_with_zero, values, label=f"p={p}")
# Add text label near the last point of each line
plt.text(
d_values_with_zero[-1], values[-1], f"p={p}",
fontsize=9, ha='left', va='center'
)
# Formatting the plot
plt.xlabel(r"$\lambda$, м")
plt.ylabel(r"$n_p(\lambda)$")
plt.title("Дисперсионная характеристика второго рода")
plt.grid(True)
plt.show()
# Data provided by the user
d_values = [0.125369, 0.13079, 0.142837, 0.156321, 0.167693]
np_values = {
0: [0, 0.644284, 1.407259, 2.310162, 3.304289],
1: [6.175797, 7.087122, 8.443555, 10.010704, 11.565011],
2: [12.351595, 13.529961, 15.479851, 17.711246, 19.825734],
3: [18.527392, 19.972799, 22.516147, 25.411787, 28.086456],
4: [24.70319, 26.415638, 29.552443, 33.112329, 36.347179],
5: [30.878987, 32.858476, 36.588738, 40.812871, 44.607901]
}
# Add mirrored data for negative p values
mirrored_np_values = {}
for p, values in np_values.items():
if p == 0:
mirrored_np_values[p] = values # Keep p=0 unchanged
else:
mirrored_np_values[-p] = [-val for val in values] # Mirror the values
# Combine original and mirrored data
all_np_values = {**np_values, **mirrored_np_values}
# Add zero points for each line at the beginning (d=0, n_p=0)
for p, values in all_np_values.items():
all_np_values[p] = [0] + values # Add zero to the beginning of each line
# Extend d_values to include 0
d_values_with_zero = [0] + d_values
# Plot np(d) for each p including zero points
plt.figure(figsize=(12, 8))
for p, values in all_np_values.items():
plt.plot(d_values_with_zero, values, label=f"p={p}")
# Add text label near the last point of each line
plt.text(
d_values_with_zero[-1], values[-1], f"p={p}",
fontsize=9, ha='left', va='center'
)
# Formatting the plot
plt.xlabel(r"$\lambda$, м")
plt.ylabel(r"$n_p(\lambda)$")
plt.title("Дисперсионная характеристика второго рода")
plt.grid(True)
plt.show()