Решаем уравнения

Первым справился [info]stepanishchev, естественно, с использованием МК-152. Время составления программы — порядка получаса, время счета — 2 минуты 15 секунд. График бодро выводится по мере расчетов :)

На сайте НПП «Семико» выложен пример программы: http://mk.semico.ru/dr_info25.htm, снабженный комментариями. Если кому-нибудь вдруг потребуется решать на МК-152/161 системы дифференциальных уравнений — путем небольших поправок можно «научить» калькулятор делать это.

Кстати, я думаю, что вполне можно было бы замахнуться и на контроль погрешности на шаге с автоматическим выбором длины шага.

Отмечу, кстати, одно нехорошее свойство рассматриваемого уравнения: его численные решения очень чувствительны к неизбежно возникающей вычислительной погрешности. Из-за разных представлений дробных чисел в микрокалькуляторе и QBasic графики не совпадают:

semiko_graph

graph

Это не удивительно. Вспомним, какое малое возмущение начальных данных приводило к возникновению генерации. Такое же малое возмущение повлияло и на поведение численного решения. Приведу эпиграф к параграфу, посвященному уравнению Ван-дер-Поля, из книги Хайрера, Нёрсетта и Ваннера «Решение обыкновенных дифференциальных уравнений»:

У меня есть теория: если вы хотите какой-то метод скомпрометировать — ищите решение уравнения Ван-дер-Поля
(П. Э. Задунайский, 1982)

Для подавляющего большинства «реальных» задач рассмотренный метод работает намного лучше.

С графиком в МК-152 все нормально, просто в первом варианте программы не было учтено, что ось Y направлена вниз. Если картинку перевернуть — все будет OK.

Спутниковое ТВ: что смотреть

Наверное, перед разговором о спутниковом оборудовании стоит определиться, какие каналы хочется смотреть. К сожалению, обычно информация о спутниковом ТВ исчерпывается рекламными проспектами вещателей, в которых умалчивают о том, что немалую часть пакета можно смотреть бесплатно. Поэтому список каналов и спутников придется составлять самому.

Самый простой способ соотнести желаемый состав каналов с «реальным» — это внимательный просмотр списка на каком-нибудь сайте с базой данных по спутникам и частотам. Я лично пользуюсь LyngSat. Это внушительная база данных, содержащая довольно полную информацию по транспондерам, пакетам и каналам каждого спутника.

Самый главный плюс такой базы — наличие списков каналов по странам, а также алфавитного списка каналов. Например, если хочется узнать, на каких спутниках есть бесплатные российские каналы — к вашим услугам список «Free TV Russia«. Согласитесь, что список очень неплохой, даже если ограничиться несколькими «популярными» спутниками.

Конечно, практически невозможно за разумные деньги построить такую систему, в которой будет возможен прием всех перечисленных каналов. Но можно ограничиться несколькими спутниками. Например, как я уже говорил, очень распространен «набор» из спутников ABS 1 (75E), Экспресс-АМ2 (80E) и Ямал 201 (90E).

Получившийся бесплатный «пакет» из Первого, ТВ3, НТВ, Спорта, ДТВ, СТС, ТНТ, Вестей, РБК, Мира, Первого игрового, 2×2, A-one и еще нескольких каналов — очень неплох в сравнении с двумя-тремя каналами с эфирного ретранслятора.

К другим распространенным вариантам относятся Экспресс-АМ22 (53E), Intelsat 904 (60E) и уже знакомый нам ABS 1 (75E) — на европейской части России, и «европейский» набор из Amos (4W), Sirius (5E), Hotbird (13E), иногда — с добавлением Astra 1 (19E) — это более характерно для Украины и Прибалтики (с пакетом Viasat). В последнее время на европейской части России стали ставить Hotbird (13 E) вместе с Eurobird 9 (9E) — из-за недорогих HD-каналов на последнем, и обилия музыкальных, спортивных и порнушных каналов на первом. Учитывая, что практически все эти импровизированные пакеты — намного дешевле стандартного российского НТВ+, а по качеству некоторых видов контента не уступают ему, можно задуматься и об их установке. Замечу, что последний вариант — Amos-Sirius-Hotbird-Astra — отличная находка для тех, кто хочет смотреть европейские каналы.

Еще одна опция LyngSat — выбор каналов из алфавитного списка. Например, если в списке принимаемых каналов обязательно должен быть CNN, то достаточно открыть страничку «LyngSat Adress«, найти в списке «CNN International Europe» и убедиться, например, что на Astra 1M он есть в «открытом» виде, а на Hotbird имеется две «кодированные» копии (правда, одна из них доступна для просмотра — но об этом будет отдельный разговор).

Думаю, сейчас надо раскрыть смысл некоторых встречающихся на LyngSat понятий. Начнем с таблицы-списка каналов. Первая графа — частота и транспондер, как я уже говорил, совершенно необходимая для приема информация. Для каждого транспондера указан список его каналов, символьная скорость и FEC. Для каналов в списке указываются номера SID и PID для видео и аудиодорожек (которых может быть несколько). Кроме того, для транспондеров указывается тип модуляции (DVB или DVB-S2), а для каналов — информация о видеопотоке (MPEG-2 или MPEG-4), а также наличие «кодирования», как в прсторечии называют системы условного доступа.

Если на канале кодирования нет, то канал называется «открытым» и его можно смотреть, не прилагая к этому особых усилий. «Кодированные» же каналы обычно принадлежат какому-нибудь пакету, и для «раскодирования» нужны специальные средства — чаще всего «карточка условного доступа», но иногда — и специальный очень дорогой профессиональный ресивер, как в случае с кодировками PoverVu или Rosscrypt. Системы условного доступа — отдельная очень большая тема, к которой я обязательно вернусь, когда речь пойдет о выборе ресивера.

Очень важная графа в таблице — «луч» (beam), обычно содержащая гиперссылку на карту покрытия, вроде такой:

astra1m_wide

Теплые цвета соответствуют высокому уровню сигнала, холодные — низкому. За пределами закрашенной зоны прием практически невозможен. Цифры на карте соответствуют EIRP — эффективной мощности сигнала, справа от карты находится табличка для пересчета EIRP в необходимый размер отражателя параболической антенны. Этот параметр будет важен при выборе «тарелки».

Конечно, реальные размеры антенны лучше выбирать несколько больше, чем рекомендует LyngSat, а еще лучше — проконсультироваться, например, на местных форумах, о том, какие «тарелки» ставят.

В следующий раз — ждите не очень большой пост с фотографиями, посвященный различным типам спутниковых антенн.

Решаем уравнение бурбулятора

Предлагаю сравнить несколько языков программирования (в широком смысле) по критерию их удобства для разнообразных расчетов. Даю вводную: из коробки извлекается компьютер (или вообще какое-нибудь вычислительное устройство, желательно с экраном), и необходимо в кратчайший срок произвести на нем сравнительно несложные вычисления.

Чтобы не извращаться, возьмем возникающее из физики уравнение Ван-дер-Поля. Речь идет о «модификации» уравнения осциллятора

y» + ay’ + y = 0.

Как легко показать (ну-ка, кто умеет решать дифференциальные уравнения?) при a>0 колебания будут затухающими, а при a<0 - неустойчивыми, то есть система пойдет вразнос. При a=0 получится малоинтересное уравнение идеального колебательного контура, которого в природе не бывает. Параметр a играет здесь роль сопротивления. Теперь подставим вместо константы a изменяющуюся величину (например, включив в цепь триод). В качестве простого "идеализированного" триода выберем a = y2 — 1. Тогда уравнение превратится в

y» + (y2-1)y’ + y = 0,

или, после стандартного понижения порядка — в систему двух уравнений:

y’1=y2
y’2=(1 — y12)y2 — y1

Как показал в 1920-1926 году Ван-дер-Поль, у такой системы сущеcтвует устойчивое периодическое решение, к которому сходятся все остальные решения. Это не может не радовать, так как система возникла из математического описания генератора незатухающих колебаний на триоде (кстати, для 20-х — вполне себе чудо техники).

Необходимые же вычисления заключаются в том, чтобы численно промоделировать это уравнение. Предлагаю воспользоваться методом Рунге-Кутта в его простейшей форме. Пусть у нас есть система дифференциальных уравнений

y’1=f1(x, y1, y2)
y’2=f2(x, y1, y2),

мы умеем вычислять функции f1 и f2 в любой точке, и нам известны значения y1, y2 в точке x0. Тогда мы можем приближенно вычислить их значения в точке x1 = x0 + h, где h достаточно мало, по следующим формулам (в «Кратком физико-математическом справочнике» Аленицына, Бутикова и Кондратьева 1990 года издания они приведены, как «формулы Рунге-Кутта»):

p11 = hf1(x0, y1, y2)
p12 = hf2(x0, y1, y2)

p21 = hf1(x0 + h/2, y1 + p11/2, y2 + p12/2)
p22 = hf2(x0 + h/2, y1 + p11/2, y2 + p12/2)

p31 = hf1(x0 + h/2, y1 + p21/2, y2 + p22/2)
p32 = hf2(x0 + h/2, y1 + p21/2, y2 + p22/2)

p41 = hf1(x0 + h, y1 + p31, y2 + p32)
p42 = hf2(x0 + h, y1 + p31, y2 + p32)

x1 = x0 + h
y1(x1) ≈ y01 + (p11 + 2 p21 + 2 p31 + p41) / 6
y2(x1) ≈ y02 + (p12 + 2 p22 + 2 p32 + p42) / 6

Конечно, в современной вычислительной практике применяются гораздо более сложные варианты метода Рунге-Кутта, например, формулы Дормана-Принса, но для грубых расчетов хватит и этого. Не будем усложнять задачу такими «бонусами», как автоматический выбор длины шага, а ограничимся этими формулами. Для упрощения написания программы я «раскрыл» вектор (y1, y2). Для вычисления y1(x1) и y2(x1) достаточно лишь применить эти формулы в том порядке, в котором они выписаны. Вычисления надо повторять, пока не исчерпается отрезок, на котором нас интересуют значения y(x).

Теперь для расчетов требуются лишь начальные условия — известные в нулевой момент времени y1 и y2, а также величина шага и длина отрезка интегрирования. Предлагаю выбрать такие начальные условия:

x0 = 0,
y1(0) = 0,
y2(0) = 0,0001

Очень небольшое значение y2 — необходимый для запуска генератора «толчок». Я утверждаю, что при таких условиях y1(x) довольно быстро «стабилизируется» и колебания станут незатухающими, с постоянной частотой. Для того, чтобы убедиться в этом, предлагаю проделать вычисления с шагом 0,1 вплоть до x = 64. Получим довольно симпатичный график (масштаб по y — в десять раз меньше, чем по x):

graph

Предлагаю всем желающим попробовать построить такой же график любыми доступными с компьютером «из коробки» средствами. К таковым, например, можно причислить Excel — офисный пакет довольно часто является предустановленным, Matlab же к «коробочным» не относится. Разнообразные варианты Basic — от Sinclair Basic до VBScript, Javascript, различные варианты интерпретатора командной строки — только приветствуются. Интересно было бы взглянуть на программу для какого-нибудь программируемого калькулятора (при отсутствии графического экрана достаточно просто «распечатки» значений). Сомневаюсь, что «старинные» МК-52 или МК-61 «потянут» это, памяти у них маловато (хотя метод Ньютона для них реализовывали), а вот для МК-152 такая задача — в самый раз.

PS Я свой график строил на QBasic из комплекта MS-DOS 6.22