Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lab1 / Laboratornaya_rabota_1_po_FOIT

.docx
Скачиваний:
15
Добавлен:
05.02.2020
Размер:
434.11 Кб
Скачать

Санкт-Петербургский Государственный Электротехнический Университет "ЛЭТИ"

кафедра физики

Задание №1 по дисциплине

"Физические основы информационных технологий"

Название: Фазовые кривые

Фамилия И.О.:

группа:

7303

Преподаватель:

Альтмарк А.М.

Итоговый балл:

Крайний срок сдачи: 7.10.19

.

Санкт-Петербург 2019

Условие ИДЗ

Построить серию из 5 зависимостей фазовой скорости от частоты, а также серию из 5 зависимостей групповой скорости от частоты (рис.1.) для двухслойного цилиндрического волновода, заполненного диэлектриком (рис.2.). Параметры волновода взять из таблицы

Фазовые скорости

Групповые скорости

Рисунок.1

Рисунок.2

Таблица с исходными данными

Группа 7303- варианты: 1-19

Группа 7304- варианты: 20-40

Вариант

R, см

R1, см

1

0.5

5.7

1

0.45

5.7

1

0.4

5.7

0.9

0.5

5.7

0.9

0.45

5.7

0.9

0.4

5.7

0.9

0.5

7

0.9

0.45

7

0.9

0.4

7

1

0.5

5.7

1

0.45

5.7

1

0.4

5.7

0.9

0.5

5.7

0.9

0.45

5.7

0.9

0.4

5.7

0.9

0.5

7

0.9

0.45

7

0.9

0.4

7

1

0.5

5.4

1

0.45

5.4

1

0.4

5.4

0.92

0.5

5.4

0.92

0.45

5.4

0.92

0.4

5.4

0.92

0.5

7.1

0.92

0.45

7.1

0.92

0.4

7.1

1.1

0.5

5.4

1.1

0.45

5.4

1.1

0.4

5.4

0.91

0.5

5.4

0.91

0.45

5.4

0.91

0.4

5.4

0.91

0.5

7.1

0.91

0.45

7.1

0.91

0.4

7.1

0.91

0.5

7.1

0.91

0.45

7.1

0.91

0.4

7.1

0.91

0.5

7.1

Основные теоретические положения

Чтобы построить графики дисперсионных кривых для волновода с двумя слоями диэлектрика, необходимо решить дисперсионное уравнение, приведённое на рис. 3.

Рисунок 3 – Дисперсионное уравнение для волновода с двумя слоями диэлектрика

В данном дисперсионном уравнении два неизвестных: фазовая скорость и фазовая частота.

На рис. 4 приведена формула для вычисления групповой скорости.

Рисунок 4 – Вычисление групповой скорости

На рис. 5 приведены графики зависимостей относительных фазовых и групповых скоростей от частоты.

Рисунок 5 – Графики зависимостей относительных фазовых и групповых скоростей от частоты

В приложении А приведена программа main.py, которая строит графики дисперсионных кривых.

ПРИЛОЖЕНИЕ А

ПРОГРАММА MAIN.PY

""" Программа принимает на вход файл с данными dataset.json. Переменные названы в соответствие с тем, как они выглядят. Например, w - похожа на омегу, а v - на скорость. s в названиях переменных означает, что это массив величин. Например, vs - массив величин v (скорость), s - окончание, как в английском языке. """ import numpy as np import matplotlib.pyplot as plt from scipy.special import * from scipy.constants import c from scipy.optimize import bisect import json np.seterr(divide='ignore', invalid='ignore') with open('dataset.json', 'r', encoding='utf-8') as f: data = json.load(f) Rw = data["Большой радиус"] Rc = data["Малый радиус"] e = data["Диэлектрическая проницаемость"] ws_step = data["Размер шага по фазовой частоте"] ws_range = data["Границы фазовых частот"] vs_step = data["Размер шага по фазовой скорости"] vs_range = data["Границы фазовых скоростей"] root_count = data["Количество корней дисперсионного уравнения"] def get_d11(r, k, x1, nu): return jvp(nu, x1 * k * r, 1) * yvp(nu, x1 * k * Rw, 1) \ - jvp(nu, x1 * k * Rw, 1) * yvp(nu, x1 * k * r, 1) def get_d12(r, k, x1, nu): return jv(nu, x1 * k * r) * yvp(nu, x1 * k * Rw, 1) \ - jvp(nu, x1 * k * Rw, 1) * yv(nu, x1 * k * r) def get_d21(r, k, x1, nu): return jvp(nu, x1 * k * r, 1) * yv(nu, x1 * k * Rw) \ - jv(nu, x1 * k * Rw) * yvp(nu, x1 * k * r, 1) def get_d22(r, k, x1, nu): return jv(nu, x1 * k * r) * yv(nu, x1 * k * Rw) \ - jv(nu, x1 * k * Rw) * yv(nu, x1 * k * r) def get_m22(k, x0, x1, nu=0): return ivp(nu, x0 * k * Rc, 1) / x0 / iv(nu, x0 * k * Rc) \ + get_d11(Rc, k, x1, nu) / x1 / get_d12(Rc, k, x1, nu) def get_m11(k, x0, x1, nu=0): return ivp(0, x0 * k * Rc, 1) / x0 / iv(nu, x0 * k * Rc) \ + e * get_d21(Rc, k, x1, nu) / x1 / get_d22(Rc, k, x1, nu) def get_x1(b): return ((e * b * b - 1) ** 0.5) / b def get_x0(b): return ((1 - b * b) ** 0.5) / b def get_disp(v, w): b = v / c k_z = w / с x0 = get_x0(b) x1 = get_x1(b) return get_m11(k_z, x0, x1) * get_m22(k_z, x0, x1) vs = np.arange(vs_range[0], vs_range[1], vs_step) ws = np.arange(ws_range[0], ws_range[1], ws_step) root_counter = 0 sols_and_ws = [] j = 1 for w in ws: row = [] v_prev = vs[0] disp_prev = get_disp(v_prev, w) for v in vs[1:]: disp = get_disp(v, w) if root_counter > root_count: break if disp_prev * disp <= 0: sol = bisect(get_disp, v_prev, v, w) row += [(sol, w)] disp_prev = disp v_prev = v sols_and_ws += [row] print(f'{j / ws.shape[0] * 100:.1f} % calculations has been performed.') j += 1 h = len(sols_and_ws) w = max([len(sols_and_ws[i]) for i in range(h)]) tmp = np.zeros((h, w, 2)) for i in range(h): size = len(sols_and_ws[i]) while size < w: sols_and_ws[i] += [0] size += 1 for j in range(w): tmp[i, j] = sols_and_ws[i][j] sols_and_ws = tmp.transpose((1, 0, 2)) sols_and_ws /= np.array([c, 1]) # нормализация на скорость света for row in sols_and_ws: if len(row) > 0: sols_, ws_ = zip(*list(filter(lambda x: x[0] > 0 and x[1] > 0, list(row)))) vs_gr = [(ws_[i + 1] - ws_[i]) / (ws_[i + 1] / sols_[i + 1] - ws_[i] / sols_[i]) for i in range(0, len(ws_) - 1)] plt.plot(ws_, sols_, 'blue') plt.plot(ws_[1:], vs_gr, 'red') plt.ylim(0, 1) plt.xlabel('частота (w)') plt.ylabel('относительная скорость (v)') plt.legend(['фазовая скорость', 'групповая скорость']) plt.savefig('grapics.png') plt.show()

Соседние файлы в папке lab1