Архив 28 апреля 2009

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

Первым справился [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