close

Вход

Забыли?

вход по аккаунту

?

FreeBASIC14

код для вставкиСкачать
Пособие для начинающих программировать на языке высокого уровня FreeBASIC. Работа состоит из нескольких глав. В главе 14 " Классические ортогональные полиномы" – продолжение пособия, которое будет интересно для учащихся школ, студентов институтов,
 1
Евгений Рыжов, инженер
Программирование на языке FreeBASIC
пособие для начинающих
Пособие для начинающих программировать на языке высокого уровня FreeBASIC.
Работа состоит из нескольких глав. В главе 14 "Классические ортогональные
полиномы" –
прод
олжение пособия, которое будет интересно для учащихся школ,
студентов институтов, а также преподавателей.
Фрагмент 14.
Классические ортогональные полиномы
"В некоторых странах по
-
прежнему многие СМИ весьма ангажированы в своих оценках. Многие СМИ по
-
пр
ежнему страдают пристрастием к стереотипам десятилетней давности. А, главное, большинство из них не желают ничего узнать о том, что творится в России. И публикуют вот эти вот изрядно эмоциональные материалы, основываясь на каких
-
то там интернет
-
сообщениях и так далее, которые имеют очень относительное отношение к реальности. Во многом это наша недоработка. Мы мало рассказываем о себе. Потому что тем, кто хочет слышать, мы обязаны рассказывать о себе".
Дмитрий Сергеевич Песков,
пресс
-
секретарь президента РФ В.В.Путина.
2
Так, просто из любопытства поинтересовался биографией
героя: родился 17 октября 1967 в Москве, отец -
российский дипломат Сергей Николаевич Песков. В 1989 Дмитрий Песков окончил Институт стран Азии и Африки (ИСАА) при МГУ (специальность "истори
к
-
востоковед"), с 1989 работал в системе МИД СССР. В администрацию президента Дмитрий Песков попал в 2000 и с тех пор лишь набирает аппаратный вес: начальник отдела по связям со СМИ, заместитель, первый заместитель начальника Управления пресс
-
службы презид
ента, заместитель пресс
-
секретаря президента. На его счету, по меньшей мере, два "сильных" заявления: в 2011 заявил, что "бывший руководитель СССР по сути развалил страну", а в 2013 году выразил уверенность, что ничего подобного горбачёвской "перестройке" в России никогда больше не будет. Оно, конечно, может быть это большой секрет, но поразило отсутствие сведений о матери
Дмитрия Сергеевича. Надеюсь, в ближайшее время он расскажет о ней... и о тех "экспертах", которые от имени Министерства образования и на
уки России планируют значительно сократить список специальностей, которые можно будет получить в ВУЗах: из более чем 500 специальностей останется около 100...
Вот и вторая цитата подвернулась:
"Каждый день я вижу лица и слышу речи людей, наделённых больш
им объёмом высоких полномочий и в то же время остро нуждающихся в профессиональной помощи психотерапевта –
если не сказать психиатра. Я понимаю, что никто лечить этих людей не будет; более того, ни у кого в их ближайшем окружении никогда не хватит смелости
сказать им о том, что они больны –
и поэтому руководить государством не могут и не должны".
Юрий Хейфец,
"17 апреля 2013 -
Торжество бессилия"
Справка:
Хейфец Юрий Борисович, родился 31 октября 1953 в Свердловске (ныне –
Екатеринбург), отец –
Борис Михайлович (начальник отдела снабжения треста "Уралэлектросетьстрой"), мать –
Анна Наумовна (экономист). В 1971 закончил общеобразовательную школу №1 и параллельно –
музыкальную по классу фортепиано. В 1977 -
Уральскую государственную медицинскую академию (УГМА, санитарно
-
гигиенический факультет). Фамилию и имя никогда не менял, а вот псевдоним "Борис Берг" брал дважды: первый раз, когда в 1989 резко изменил жизнь -
работу врача в Свердловске поменял на гастрольную жизнь вместе с буйной группой "Анонс" (для
которой писал тексты). В то время Бориса Берга знали как серьезного поэта и барда, а Борис Берг мог позволить себе писать такое, под чем Хейфец вряд ли подписался бы -
чуть ли не из каждого ларька неслась хулиганская песня "Оля и СПИД". В 91
-
ом Борис Берг
бесследно исчезает, а Юрий Хейфец переезжает в Москву. Он снова врач (награжден серебряной медалью им. И.П.Павлова "За многолетний труд в практическом здравоохранении"), в 2004 заканчивает Московский государственный университет им. М.В.Ломоносова (Психоло
гия), но продолжает писать стихи и песни.
Не мог его не приметить –
он тоже любит Владимира Семеновича Высоцкого.
Вот одна из песен Юрия Хейфеца:
3
http://www.moskva.fm/artist/юрий_хейфец
/song_0323725
Памяти В.С. Высоцкого.
Песня впервые прозвучала 23 декабря 2011 на станции Эхо Москвы в Петербурге.
Мы же знали всегда "он бессмертен"!
1.
"Почтовый ящик" и "художественная галерея".
Почтовый ящик опять оказался пустым
, а потому сразу
пройдем в нашу, ставшую уже непременным атрибутом "Фрагментов", "художественную галерею". Выбирать долго не пришлось –
в этом году три исторические даты
, обойденные официальными СМИ стороной, должны быть отмечены:
400 лет со дня восшествия на престол дин
астии Романовых,
145 лет со дня рождения государя Николая II,
95 лет со дня мученической кончины царской семьи в Екатеринбурге.
1.1.
400 лет со дня восшествия на престол династии Романовых.
С тех пор как в 1598 году в России не осталось наследников н
а престол по праву родства, царей, начиная с Бориса Годунова, избирали Земским собором.
Федор I Иоаннович, третий сын Ивана IV Грозного и царицы Анастасии Романовны, последний из династии Рюриковичей, не оставил наследников. Правда, это весьма отдаленно на
поминало современные выборы. Скорее, речь шла об утверждении единственной, заранее известной кандидатуры. Так получилось и на Земском соборе 1613 года: те, кто участвовал в итоговом голосовании, высказали свое мнение единогласно. Это был едва ли не самый п
редставительный Земский собор за всю историю России. Число его участников было достаточно велико, к тому же это один из очень немногих случаев, когда в соборе участвовали казаки и крестьяне.
Тем не менее 400 лет назад Земский собор, созванный после освобо
ждения Москвы ополчением Кузьмы Минина и Дмитрия Пожарского, избрал новым государем всея Руси Михаила Романова, сына патриарха Филарета, находившегося в польском плену. Это произошло 21 февраля 1613 года (по новому стилю 3 марта). 14 (24) марта избранный ц
арь, находившийся в тот момент в Ипатьевском монастыре под Костромой, с разрешения своей матери, инокини Марфы, дал официальное согласие занять российский престол. 11 (21) июля 1613 его торжественно короновали в Кремле.
Процедура "приглашения" на царство депутацией от Земского собора представлена на картине ниже:
4
"Посольство Земского Собора сообщает Михаилу Романову об избрании Его на царство"
(копия миниатюры из книги "Об избрании венчания на царство царя и Великого князя Михаила Феодоровича")
1.
2.
145 лет со дня рождения государя Николая II.
Всероссийский Император Романов Николай Александрович родился 18 мая 1868 года.
Николай II Александрович (1868 —
1918)
Он был 14
-
ый Император Всероссийский, Царь Польский и Великий Князь Финляндский, посл
едний Император Российской Империи. Полковник (1892); кроме того, от британских монархов имел чины: адмирала флота (1908) и фельдмаршала британской армии (1915).
Официальный Гимн Российской Империи
(1833
—
1917) на слова Василия Андреевича Жуковского, музык
а Алексея Федоровича Львова
:
Боже, Царя храни!
Сильный, державный, Царствуй на славу нам;
Царствуй на страх врагам, Царь православный!
Боже, Царя храни!
5
1.3.
95 лет со дня мученической кончины царской семьи
в Екатеринбурге.
После прихода к власти боль
шевиков в апреле 1918 года
президиум ВЦИК принял решение о переводе царской семьи из Тобольска якобы в Москву для суда над ними. Однако на самом деле верхушка большевиков решила совершить злодеяние в Екатеринбурге, куда и была переправлена царская семья и размещена в "Доме особого назначения" —
реквизированном особняке горного и военного инженера
-
строителя Ипатьева. В ночь с 16 на 17 июля
царская семьи и слуги легли спать, как обычно, в 22 часа 30 минут. В 23 часа 30 минут в особняк явились два особоуполном
оченных от Уралсовета. Они вручили решение исполкома командиру отряда охраны Ермакову и новому коменданту дома комиссару ЧК Янкелю Юровскому, которым предстояло организовать злодеяние. В 1919 году, после взятия Екатеринбурга белыми, по распоряжению Колчака
было начато расследование цареубийства. Оно было возложено на следователя по особо важным делам Омского окружного суда Николая Алексеевича Соколова.
Царская семья в 1918 году
В новейшее время следователем Соловьевым предпринята попытка опровергнуть в
ыводы следствия Соколова
и доказать, что тела царской семьи не были уничтожены на Ганиной Яме, а захоронены в могиле в Поросенковом Логу. Найденные в могиле останки расстрелянных безвестных русских людей были выданы за святые мощи
и захоронены в императорс
кой усыпальнице Петропавловской крепости 17 июля 1998 года. Однако Русская православная церковь, несмотря на колоссальное давление власти, не признала подлог.
На сайте "Русской народной линии" есть специальная страничка "Екатеринбургские останки", посвяще
нная обстоятельствам убийства и захоронения 6
Царской Семьи. В 1981 году члены царской семьи были причислены к лику мучеников Русской православной церковью за рубежом, а в 2000 году на юбилейном Архиерейском соборе они были канонизированы Русской православно
й Церковью как Царственные страстотерпцы. Но это уже совсем другая история...
2.
Введение.
Вряд ли есть необходимость много говорить о важности специальных функций для любого учёного или инженера, имеющего дело с практическим применением в своей работе
дифференциальных уравнений. Решение задач, связанных с динамическими (развивающимися как во времени, так и в пространстве) процессами, приводит к необходимости использования специальных функций. Чаще всего такая необходимость появляется при решении диффер
енциальных уравнений в частных производных, например, методом разделения переменных. При этом в качестве математического аппарата часто используются специальные функции, называемые классические ортогональные многочлены, т.е. полиномы Лежандра, Чебышёва, Эр
мита, Лагерра. Эти многочлены применяются в теоретических исследованиях математиков, в математической физике, в вычислительной математике и в квантовой механике, появляются все новые примеры применения классических ортогональных многочленов при решении раз
личных технических задач, например, в теории автоматического управления и теории передачи сигналов и данных. Это связано, прежде всего, с их уникальными аппроксимативными свойствами, которые на основе метода наименьших квадратов (МНК) позволяют достаточно просто аналитически описывать результаты натурных испытаний, числовых расчетов, данных экспериментов и т.п.
2.1.
Л
итература
по рассматриваемой тематике
.
В связи с распространенностью во многих учебных пособиях по высшей математике классическим ортогон
альным многочленам уделяется большое внимание. Подробно свойства ортогональных многочленов рассматриваются, как правило, в монографиях по теории приближения функций. Например, в книге крупного советского математика Исидора Павловича Натансона (1906 —
1964) "Конструктивная теория функций", изданной в 1949 году, ортогональным многочленам посвящена примерно третья часть всего объема. Но, к сожалению, эта книга стала библиографической редкостью и, кроме того, изложение в ней, как и во всех монографиях по теории приближений, рассчитано на профессиональных математиков и не содержит многих "простых" вопросов, которые важны для приложений в технических науках. Со своей стороны могу посоветовать следующие книги (каждую из них в свое время держал в руках, сегодня все о
ни доступны в сети):
Корн Г., Корн Г. Справочник по математике для научных работников и инженеров. М., Наука, 1974. 832 с., ил.
Справочник содержит сведения по разделам: высшая алгебра, аналитическая и дифференциальная геометрия, математический анализ, в
екторный и тензорный анализ, криволинейные координаты, функции комплексного переменного, операционное исчисление, дифференциальные уравнения, вариационное исчисление, матрицы, 7
линейные векторные пространства, операторы и теория представлений, интегральные уравнения, краевые задачи, теория вероятностей и математическая статистика, численные методы анализа, специальные функции, включая ортогональные многочлены.
Суетин П.К. Классические ортогональные многочлены. 3
-
е изд., М.: ФизМатЛит, 2005. 480 с., ил.
В к
ниге излагаются свойства ортогональных многочленов Чебышева, Лежандра, Чебышева
-
Эрмита, Чебышева
-
Лагерра и общих многочленов Якоби. С доказательствами приводятся асимптотические формулы для этих многочленов и теоремы о разложении функций в ряды Фурье по ни
м. Рассмотрены применения этих многочленов в вычислительной математике, в математической физике и в некоторых технических науках.
Никифоров А.Ф., Уваров В.Б. Основы теории специальных функций. М., Наука, 1974. 304 с., ил.
В книге излагается с единой точк
и зрения теория классических ортогональных полиномов, сферических, цилиндрических и гипергеометрических функций. Сначала изучаются наиболее простые специальные функции —
классические ортогональные полиномы. Единство изложения достигается благодаря тому, чт
о все специальные функции рассматриваются как частные решения дифференциального уравнения определенного вида, для которого с помощью обобщения свойств классических ортогональных полиномов получены в явном виде интегральные представления решений и указан сп
особ вывода различного рода функциональных соотношений. Рассматриваются приложения специальных функций к задачам математической физики и квантовой механики.
Бейтмен Г., Эрдейи А. Высшие трансцендентные функции, т. 2 -
Функции Бесселя, функции параболичес
кого цилиндра, ортогональные многочлены. М., 1974. 296 с., ил.
Книга содержит краткие, но весьма ясно написанные выводы основных свойств изучаемых функций, по которым человек, не владеющий теорией, может её изучить. Но, кроме того, в неё включены многочисл
енные списки формул, касающихся наиболее важных специальных функций. Наконец, каждая глава книги сопровождается списком использованной литературы (помещённым в конце книги), что позволяет читателю найти дополнительную информацию об изучаемых функциях.
Зд
есь вполне уместно вспомнить слова Исаак
а
Ньютон
а
(1643 —
1727) из письма
Роберту Гуку 1676: "Если я видел дальше других, то потому, что стоял на плечах гигантов
".
Этих книг будет вполне достаточно для ознакомления с ортогональными полиномами и их использо
вания в практической работе...
8
2.
2
.
Историческая справка
.
Поскольку экскурс "исторический", решил представить "участников интеллектуального сражения" в порядке рождения
(по годам):
Лежандр Адриен Мари (фр. Adrien
-
Marie Legendre; 1752 —
1833)
—
фра
нцузский математик. Лежандр закончил Коллеж Мазарини, с 1775 года —
преподаватель Военной школы в Париже. Член Парижской Академии наук (с 1783 года). Лежандр вел тихую и скромную жизнь ученого, полную трудов. Его сочинение "Recherches sur la figure des pla
netes" (1784) обратило на себя всеобщее внимание. В годы Французской революции Лежандр, вместе с Лагранжем и Лапласом, активно участвовал в Комиссии по введению метрической системы, в частности, в измерении длины одного градуса между Дюнкерком и Барселоной
для установления эталона метра. Его имя внесено в список величайших учёных Франции, помещённый на первом этаже Эйфелевой башни.
Чебышёв Пафнутий Львович (Pafnuty Lvovich Chebyshev; 1821 —
1894)
—
русский математик и механик. Летом 1837
года Чебышёв на
чинает изучение математики в Московском университете на втором физико
-
математическом отделении философского факультета. В 1847 году Чебышёв утверждён в звании доцента и начинает читать лекции по алгебре и теории чисел в Петербургском университете. В 1850 г
оду Чебышёв защищает докторскую диссертацию и становится профессором Петербургского университета. Эту должность он занимал до старости. Чебышёв считается одним из основоположников теории приближения функций. Работы также в теории чисел, теории вероятностей
, механике. Наиболее оригинальными, как по сущности вопроса, так и по методу решения, являются работы Чебышёва "О функциях, наименее уклоняющихся от нуля".
Эрмит Шарль (фр. Charles Hermite; 1822 —
1901)
—
французский математик, признанный лидер математик
ов Франции во второй половине XIX века. Член Парижской академии наук с 1856 года. Награждён орденом Почётного легиона (1892).
С 1842 по 1845 год учился в парижской Политехнической школе. Защитив диссертацию, становится (1869) профессором Политехнической шк
олы, где преподавал до 1876 года. В 1869
—
1897 годах —
профессор Парижского факультета наук, преподавал также в Нормальной школе.
9
Основные работы относятся к теории чисел, теории квадратичных форм, теории инвариантов, ортогональных многочленов, эллиптиче
ских функций и алгебре. Исследовал класс ортогональных многочленов (многочлены Эрмита). Внёс вклад в теорию алгебраических форм и их инвариантов, в том числе в теорию представления целых чисел алгебраическими формами и другие приложения к теории чисел. В х
оде этих работ открыл особые билинейные формы (формы Эрмита).
Лагерр Эдмон Никола (фр. Edmond Nicolas Laguerre; 1834 —
1886)
—
французский математик, член Парижской академии наук (1885). Труды по геометрии, комплексному анализу. Исследовал ортогон
альные многочлены (например, многочлены Лагерра, Квадратурная формула Гаусса
—
Лагерра). Первую известность дали ему еще некоторые ученические работы. В 1853 он поступил в Ecole Polytechnique, откуда поступил на службу в артиллерию.
2.
3
.
Общие замеча
ния об ортогональных полиномах.
Исторически первым примером ортогональных полиномов были многочлены Лежандра. Затем были введены многочлены Чебышева, общие многочлены Якоби, многочлены Эрмита и Лагерра. Общая теория ортогональных полиномов была построена
П.Л.Чебышевым.
Не перегружая читателей теоретическими подробностями укажем лишь на определение: Ортогональная система функций, это система функций x
n
, где n
= 1, 2,..., ортогональных с весом )
x
(
на отрезке b
,
a
, т. е. таких, что скалярное произведение:
b
a
n
m
n
m
0
dx
x
x
x
,
.
10
Кроме того, здесь и далее действительные и непрерывные функции одного аргумента ...
,
x
,
x
2
1
считаются ортогональными и нормальными
на отр
езке b
,
a
, если:
b
a
n
m
n
m
,
1
n
m
,
0
dx
x
x
.
При этом весовая функция )
x
(
на отрезке ортогональности удовлетворяет дифференциальному уравнению Пирсона:
2
2
1
0
1
0
'
x
q
x
q
q
x
p
p
)
x
(
)
x
(
Сами классические ортогональные полиномы м
ожно считать специальными решениями линейных однородных дифференциальных уравнений второго порядка, связанных с гипергеометрическим (полиномы Лежандра, Чебышева) или с вырожденным гипергеометрическим (полиномы Лагерра, Эрмита) дифференциальными уравнениями
. Эти специальные решения порождаются специальными краевыми условиями.
Их характеристики приведены в таблице:
Отрезок
Весовая функция
a
b
)
x
(
Название
п
олином
ов
1
1
1
P
-
Лежандра
1
1
2
1
2
)
x
1
(
T
-
Чебышёва
)
x
exp(
2
H
-
Эрмита
0
)
x
exp(
x
L
-
Лагерра
11
3
.
Тексты программ на языке FreeBASIC
.
Перечень программ приведен в таблице:
Имя файла
Назначение программы
OrPol1_Value.bas
Вычисление значений ортогональных полиномов
OrPol2_NorLaguer.bas
Демонстрация значений полиномов Лагерра
OrPol3_GammaFunc.bas
Вычисление Гамма
-
функции действительного аргумента
OrPol4_ViewLaguer.bas
Построение графиков функций Лагерра
OrPol5_Coeffic.bas
Вычисление коэффициентов ортогональных полиномов
OrPol6_CoefLa
g.bas
Пример вычисления коэффициентов полиномов Лагерра
OrPol7_ ChristNum
.bas
Вычисление чисел Кристоффеля полиномов Лагерра
Внимание! В листингах отсутствуют символы продолжения строк!
' P R O G R A M "OrPol1_Value"
' 12.10.2012
'
-------------------------------------------------------------
' Вычисление значений ортогональных полиномов
'
-------------------------------------------------------------
' Ординарная переработка программ 10б, 11б, 12б, 13б из:
' Библиотека алгоритмов 1б
-
50б. Под ред. М.И.Агеева. 1975
' Ортогональные полиномы:
' CHEB -
Вычисление значений полинома Чебышева.
' HERM -
Вычисление значений полинома Эрмита.
' LAGR -
Вычисление значений полинома Л
агерра.
' LEZH -
Вычисление значений полинома Лежандра.
' Нормировка полиномов соответствует книге:
' Корн Г., Корн Г. Справочник по математике для научных
' работников и инженеров. М., Наука, 1974, 832 с., ил.
' стр. 767: п.п. 21.7. Ортогональные многочлены.
#Lang "FB" ' Режим совместимости с FreeBASIC
'
'Вычисление значения полинома Чебышева
Function Cheb(N As Integer, X As Single) As Single
Dim As Integer I
Dim As Single A, B, C
'
If N = 0 Then C = 1.0
If N = 1 Then C = X
If N >=2
Then
A = 1.0: B = X
For I = 2 To N
C = 2.0*X*B -
A
A = B: B = C
Next I
End If
Cheb = C
End Function
12
'
'
Вычисление
значения
полинома
Эрмита
Function Herm(N As Integer, X As Single) As Single
Dim As Integer I
Dim As Single A, B, C
'
If N = 0 T
hen C = 1.0
If N = 1 Then C = 2.0*X
If N >= 2 Then
A = 1.0: B = 2.0*X
For I = 1 To N
-
1
C = 2.0*X*B -
2*I*A
A = B: B = C
Next I
End If
Herm = C
End Function
'
'
Вычисление
значения
полинома
Лагерра
Function Lagr(N As Integer, X As Single) As Si
ngle
Dim As Integer I
Dim As Single A, B, C
'
If N = 0 Then C = 1.0
If N = 1 Then C = 1.0 -
X
If N >= 2 Then
A = 1.0: B = 1.0 -
X
For I = 1 To N
-
1
C = (1+2*I
-
X)*B -
I*I*A
A = B: B = C
Next I
End If
Lagr = C
End Function
'
'
Вычисление
значения
полинома
Лежандра
Function Lezh(N As Integer, X As Single) As Single
Dim As Integer I
Dim As Single A, B, C
'
If N = 0 Then C = 1.0
If N = 1 Then C = X
If N >= 2 Then
A = 1.0: B = X
For I = 2 To N
C = B*X + (I
-
1)*(B*X -
A)/I
A = B: B = C
Nex
t I
End If
Lezh = C
End Function
'
13
' Основной модуль программы
Dim As Integer N
Dim As Single X
N = 5: X = 2.0
Open Cons For Output As #2
'Open "OrPol.res" For Output As #2
Print #2, " Value of orthogonal polynomials"
Print #2, " N X Val"
Print #2, Using " ## ###.#### ###.######"; N; X; Cheb(N, X)
'Print #2, 16*X^5
-
20*X^3+5*X
Print #2, Using " ## ###.#### ###.######"; N; X; Herm(N, X)
'Print #2, 32*X^5
-
160*X^3+120*X
Print #2, Using " ## ###.#### ###.######"; N; X; Lagr(N, X)
'Print #2, -
X^5+25*X^4
-
200*X^3+600*X^2
-
600*X+120
Print #2, Using " ## ###.#### ###.######"; N; X; Lezh(N, X)
'Print #2, (63*X^5
-
70*X^3+15*X)/8
Print #2,
Close #2
Sleep
' Результат выполнения программы:
' Value of orthogonal polynomials
' N X Val
' 5 2.0000 362.000000
' 5 2.0000 -
16.000000
' 5 2.0000 88.000000
' 5 2.0000 185.750000
Классические ортогональные полиномы, ка
к правило, используются без специального указания на тип нормировки, а он может оказаться весьма существенным для решения задачи. Убедиться в этом можно посмотрев результаты выполнения следующей программы
(она восстановлена по чудом сохранившемуся черновик
у)
:
' P R O G R A M "OrPol2_NormLaguer"
' 10.10.1996
'
-------------------------------------------------------------
' Демонстрация вычисления значений полиномов Лагерра
'
---------------------------
----------------------------------
'
' Вычисление производится по рекуррентной формуле.
' Нормировка полиномов принята в соответствии с книгой:
' Суетин П.К. Классические ортогональные многочлены,
' М., Наука, 1979, 416 с., ил. (См. стр. 22
0).
' N -
степень полинома Лагерра
' A -
значение параметра полинома (A > -
1)
' X -
значение аргумента (X >= 0)
' Полиномы определяются с точностью до постоянных множителей:
14
' LS -
значение стандартизованного полинома
' LE -
знач
ение полинома с единицей при старшей степени
' LN -
значение ортонормированного полинома
'
#Lang "FB" ' Режим совместимости с FreeBASIC
#Include "crt/math.bi" ' заголовочный файл станд. библиотеки
'
Sub PLGR(N As Integer, A As Single, X As Single,
ByRef LS As Single, ByRef LE As Single, ByRef LN As Single)
' LS -
значение стандартизованного полинома
' LE -
значение полинома с единицей при старшей степени
' LN -
значение ортонормированного полинома
'
Dim As Integer K
Dim As Single LS0, L
S1, FAC, F0, F1
LS0 = 1: LS1 = A + 1 -
X: FAC = 1
If N = 0 Then ' если
степень
равна
0
LS = LS0: LE = LS
Else
If N = 1 Then ' если степень равна 1
LS = LS1: LE = LS
Else
' степень полинома равна или больше 2
For K = 2 To N
FAC = FAC*K: F0 = K + A
-
1: F1 = K + F0 -
X
LS = (F1*LS1 -
F0*LS0)/K ' стандартизованный
LS0 = LS1: LS1 = LS
Next K
' вычисление значения полинома с единицей при степени
LE = FAC*LS
EndIf
EndIf
' вычисление значения ортонормированного полинома
F0 = A + N + 1
LN = LS*Sqr(F
AC/tgammaf(F0))
If (N Mod 2) <> 0 Then
LE = -
LE: LN = -
LN
EndIf
End Sub
'
Dim As Integer N, I
Dim As Single X, A, LS, LE, LN
Open Cons For Output As #2
'Open "OrPol.res" For Output As #2
Print #2, " Normalization of the polynomials Laguerre"
For A = 0.0 To
2.0 Step 2.0 ' перебор
параметра
For N = 3 To 5 ' перебор степени
Print #2,
Print #2, Using " Alpha = ##.### N = ##"; A; N
Print #2, " X LS LE LN"
For X = 0 To 2 Step 0.5 ' перебор
аргуме
нта
'
15
PLGR(N, A, X, LS, LE, LN)
'
Print #2, Using " ##.# ####.###### ######.#### ####.######"; X; LS; LE; LN
Next X
Next N
Next A
Close #2
Sleep
' Результат выполнения программы:
' Alpha = 0.000 N = 3
' X LS LE LN
' 0.0 1.000000 -
6.0000 -
1.000000
' 0.5 -
0.145833 0.8750 0.145833
' 1.0 -
0.666667 4.0000 0.666667
' 1.5 -
0.687500 4.1250 0.687500
' 2.0 -
0.333333 2.0000 0.333333
' Alpha = 0.000 N = 4
' X LS LE LN
' 0.0 1.000000 24.0000 1.000000
' 0.5 -
0.330729 -
7.9375 -
0.330729
' 1.0 -
0.625000 -
15.0000 -
0.625000
' 1.5 -
0.289063 -
6.9375 -
0.289063
' 2.0 0.333333 8.0000 0.333333
' Alpha = 0.000 N = 5
' X LS LE LN
' 0.0 1.000000 -
120.0000 -
1.000000
' 0.5 -
0.445573 53.4688 0.445573
' 1.0 -
0.466667 56.0000 0.466667
' 1.5 0.116406 -
13
.9688 -
0.116406
' 2.0 0.733333 -
88.0000 -
0.733333
' Alpha = 2.000 N = 3
' X LS LE LN
' 0.0 10.000000 -
60.0000 -
2.236068
' 0.5 5.604167 -
33.6250 -
1.253130
' 1.0 2.333333 -
14.000
0 -
0.521749
' 1.5 0.062500 -
0.3750 -
0.013975
' 2.0 -
1.333333 8.0000 0.298142
' Alpha = 2.000 N = 4
' X LS LE LN
' 0.0 15.000000 360.0000 2.738613
' 0.5 6.752604 162.0625 1.232851
' 1.0 1.541667 37.0000 0.281469
' 1.5 -
1.289063 -
30.9375 -
0.235350
' 2.0 -
2.333333 -
56.0000 -
0.426006
' Alpha = 2.000 N = 5
' X LS LE LN
' 0.0 21.000000 -
2520.0000 -
3.
240370
' 0.5 7.455469 -
894.6563 -
1.150404
' 1.0 0.283333 -
34.0000 -
0.043719
' 1.5 -
2.524219 302.9063 0.389495
' 2.0 -
2.600000 312.0000 0.401189
16
Не огорчайтесь, если не смогли найти в каталогах компилятора файл
с подпрограммой вычисления значений Гамма
-
функции tgammaf
(
Х
)
. Для этого случая ниже приведена довольно сносно работающая программа
(вывод результатов в виде графиков)
:
' P R O G R A M "OrPol3_GammaFunc"
' 12.10.1996
'
-------------------------------------------------------------
' Контрольное построение графика Гамма
-
функции
'
-------------------------------------------------------------
'
' Гринчишин Я.Г., Ефимов В.И., Ломакович А.Н. Алгоритмы и
' программы на бейсике. М., Просвещение, 1988, 160 с., ил.
' (стр.83: Гамма
-
функция -
существенно переработана)
' XX -
аргумент функции (XX <= 35.0);
' ER -
код завершения:
' ER = 0 -
нормальное завершение
' ER = -
1 -
слишком большое значение аргумента
' ER = -
2 -
аргумент является полюсом
'
#Lang "FB" ' Режим совместимости с FreeBASIC
'
Function CGAM(XX As Single, ER As Integer) As Single
' Вычисление Гамма
-
функции действительного аргумента
'
Dim As Double A(13), X, G, G1
Dim As Integer I
' Коэффициенты аппроксимации функции для -
1.0 < X <= 1.0
A( 0) = -
0.000000018122: A( 1) = 0.000001328554
A( 2) = 0.000002625721: A( 3) = 0.000017527917
A( 4) = 0.000145624324: A( 5) = -
0.
000360851496
A( 6) = -
0.000804341335: A( 7) = 0.008023278113
A( 8) = -
0.017645242118: A( 9) = -
0.024552490887
A(10) = 0.191091101162: A(11) = -
0.233093736365
A(12) = -
0.422784335092: A(13) = 1.000000000000
'
ER = 0: X = XX: G = 1.0
I
f XX > 35.0 Then
ER = -
1 ' слишком большое значение аргумента
Else
If Int(XX) = -
Abs(XX) Then
ER = -
2 ' аргумент является полюсом
Else
'
Do While X > 1 ' пока правее интервала
X = X -
1: G = G*X
Loop
G = 1/G
Do WHILE X < -
1 ' пока леве
е интервала
G = G * X: X = X + 1
Loop
17
If X <> 1 THEN
G1 = A(0) ' вычисление по схеме Горнера
For I = 1 TO 13
G1 = G1*X + A(I)
Next I
G = G*X * (X + 1)*G1
EndIf
G = 1/G
EndIf
EndIf
CGAM = G
End Function
'
' Основной модуль программы вывода на VGA
Di
m As Integer ER
Dim As Single X, Y
Screen 12 ' вывод на граф. экран 640x480
View (1, 1)
-
(468, 448), , 15 ' квадратное окно
Window (
-
5, -
5)
-
(5, 5) ' логическое окно вывода
For X = -
4 To 4
Line (
-
5, X)
-
(5, X), 6, , &HAAAA ' гор
изонтали
Line (X, 5)
-
(X, -
5), 6, , &HAAAA ' вертикали
Next X
Line (
-
5, 0)
-
(5, 0), 7, , &HAAAA ' линия
оси
X
Line (0, 5)
-
(0, -
5), 7, , &HAAAA ' линия
оси
Y
'
For X = -
5 To 5 Step 0.002 ' перебор
аргумента
Y = CGAM(X, ER) ' вычислен
ие функции
If ER = 0 Then PSet(X, Y), 13 ' вывод точки графика
Next X ' следующая точка
Locate 2, 31: Print "Y" ' метка
оси
X
Locate 14, 61: Print "X" ' метка
оси
Y
Sleep
В надежде, что мы вернемся в брошюре
N
к использованию полиномов Лагерра для построения систем автоматического управления
, ниже приведена программа вывода их графиков:
' P R O G R A M "OrPol4_ViewLaguer"
' 12.10.1996
'
------------------
-------------------------------------------
' Построение графиков функций Лагерра Y = LS * EXP(
-
X/2)
'
-------------------------------------------------------------
'
' Используется подпрограмма "PLGR" (упрощенная!)
' N -
степень полинома Лаг
ерра
' X -
значение аргумента
' LS -
значение стандартизованного полинома
' с параметром ALPHA = 0!
18
' Выводит на экран монитора (VGA) графики четырех функций
#Lang "FB" ' Режим совместимости с FreeBASIC
'
Sub PLGR(N As Integer
, X As Single, ByRef LS As Single)
' Вычисляются только стандартизованные полиномы Лагерра
Dim As Integer K
Dim As Single LS0, LS1, F0, F1, A
LS0 = 1: LS1 = A + 1 -
X
If N = 0 Then ' степень
равна
0
LS = LS0
Else
If N = 1 Then ' ст
епень
равна
1
LS = LS1
Else
For K = 2 To N ' степень равна или больше 2
F0 = K -
1: F1 = K + F0 -
X
LS = (F1*LS1 -
F0*LS0)/K
LS0 = LS1: LS1 = LS
Next K
EndIf
EndIf
End Sub
' Основной модуль программы:
Dim As Integer N
Dim As Single X, Y, LS
Scr
een 12 ' вывод на граф. экран 640x480
' Подготовка поверхности вывода
View (1, 1)
-
(638, 448), , 15 ' почти весь экран
Window (0, -
0.6)
-
(6, 1) ' логическое окно вывода
For Y = -
0.4 To 0.81 Step 0.2
Line (0, Y)
-
(6, Y), 6, , &HAAAA ' горизонтали
Next Y
For X = 0.5 To 5.5 Step 0.5
Line (X, 1)
-
(X, -
0.6), 6, , &HAAAA ' вертикали
Next X
Line (0, 0)
-
(6, 0), 7, , &HAAAA ' линия
оси
X
'
' Вывод точек графика
For N = 0 To 3 ' перебор степеней
For X = 0 To 6 Step 0.01 ' перебор
аргумента
PLGR(N, X, LS) ' вызов подпрограммы
Y = LS * EXP(
-
X/2) ' вычисление функции
PSet (X, Y), 13 ' вывод точки графика
Next X ' с
ледующая точка
Next N
Sleep
19
В инженерных расчетах часто бывает необходимо (удобно) иметь не численные значения полиномов, а их аналитическое выражение
. На этот случай приведена соответствующая программа:
' P R O G R A M "OrPol5_Coeffic"
' 12.10.2012
'
-------------------------------------------------------------
' Вычисление коэффициентов ортогональных полиномов
'
-------------------------------------------------------------
' Рассматриваютс
я ортогональные полиномы:
' Herm -
Вычисление значений полинома Эрмита.
' Lezh -
Вычисление значений полинома Лежандра.
' Полиномы записываются по возрастающим степеням аргумента.
' C(0)*1 + C(1)*X + ... + C(K
-
1)*X^(K
-
1) + C(K)*X^K ' Суетин П.К. Классические ортогональные многочлены,
' М., Наука, 1979, 416 с., ил.
' Проверка вычисления производится сравнением результатов
' с полученными по программе OrPol_XXX.bas для N=5 и X=2.0
#Lang "FB" ' Режим совместимости с FreeB
ASIC
Dim As Integer I, J, K, N
N = 6
Dim As Single C(N,N), C0(N), C1(N)
Dim As Single X, Sum
X = 2
Open Cons For Output As #2
'Open "OrPol.res" For Output As #2
'
----
Пример № 1 рассчет коэффициентов полиномов Эрмита
' по рекуррентной формуле:
' H(
K+1) = 2x*H(K) -
2*K*H(K
-
1)
Print #2,
Print #2, Using " Coefficients of Hermite polynomial of degree N = ##"; N
C(0,0) = 1
C(1,0) = 0: C(1,1) = 2
For K = 1 To N
-
1
For J = 0 To K
-
1: C0(J) = 2*K*C(K
-
1,J): Next J
For J = 0 To K: C1(J+1) = 2*C(K,J): Next J Fo
r J = 0 To K+1: C(K+1,J) = C1(J) -
C0(J): Next J
Next K
For K = 0 To N
For I = 0 To K
Print #2, Using " #####.####"; C(K,I);
Next I
Print #2,
Next K
Sum = C(5,5)
For J = 4 To 0 Step -
1
Sum = Sum*X + C(5,J)
Next J
Print #2, Using " Herm = ##
##.####"; Sum
20
' Результат выполнения программы:
' Coefficients of Hermite polynomial of degree N = 6
' 1.0000
' 0.0000 2.0000
' -
2.0000 0.0000 4.0000
' 0.0000 -
12.0000 0.0000 8.0000
' 12.0000 0.0000 -
48.0000 0.0000 16.0000
...
' Herm = -
16.0000
'
'
----
Пример № 2 расчет коэффициентов полиномов Лежандра
' по рекуррентной формуле:
' (K+1)*P(K+1) = (2*K+1)*X*P(K) -
K*P(K
-
1)
Print #2,
Print #2, Using " Coefficients of Legendre polynomial of degree N = ##"; N
For J = 0 To N: C0(J) = 0: Next J ' остатки предыдущего расчета
C(0,0) = 1
C(1,0) = 0: C(1,1) = 1
For K = 1 To N
-
1
For J = 0 To K
-
1: C0(J) = K*C(K
-
1,J): Next J:
For J = 0 To K: C1(J+1) = (2*K+1)*C(K,J): Next J For J = 0 To K+1: C(K+1,J) = (C1(J
) -
C0(J))/(K+1): Next J
Next K
For K = 0 To N
For I = 0 To K
Print #2, Using " #####.####"; C(K,I);
Next I
Print #2,
Next K
Sum = C(5,5)
For J = 4 To 0 Step -
1
Sum = Sum*X + C(5,J)
Next J
Print #2, Using " Lezh = ####.####"; Sum
Close #2
S
leep
' Результат выполнения программы:
' Coefficients of Legendre polynomial of degree N = 6
' 1.0000
' 0.0000 1.0000
' -
0.5000 0.0000 1.5000
' 0.0000 -
1.5000 0.0000 2.5000
' 0.3750 0.0000 -
3.7500 0.000
0 4.3750
...
' Lezh = 185.7500
'
21
Ниже приведена программа в
ычисление коэффициентов полиномов Лагерра
тоже восстановленная по черновикам:
' P R O G R A M "OrPol6_CoefLag"
' 10.10.1996
'
------
-------------------------------------------------------
' Вычисление коэффициентов полиномов Лагерра
'
-------------------------------------------------------------
'
' Подпрограмма соответствует явному выражению для полинома
' Лагерра, из книги: Сует
ин П.К. Классические ортогональные
' многочлены М., Наука, 1979, 416 с., ил.
' N -
степень стандартизованного полинома Лагерра (типа LS)
' Alp -
значение параметра полинома (Alp > -
1)
' CP -
вектор коэффициентов полинома Лагерра
'
#Lang "FB" ' Реж
им совместимости с FreeBASIC
Sub CPLG(N As Integer, Alp As Single, CP() As Single)
Dim As Integer I, M
Dim As Double FCN, FCM, FCL Dim As Single SIG, S, X
'
CP(0) = 1 ' свободный член полинома
If N > 0 And N <= 12 Then ' проверка ограничен
ий N
' вычисление факториала N
FCN = 1
For I = 1 To N
FCN = CDbl(I)*FCN
Next I
'
SIG = 1 ' начальная установка знака
For M = 0 To N
' вычисление факториала M
FCM = 1
For I = 1 To M
FCM = CDbl(I)*FCM
Next I
' вычисление факто
риала (N
-
M)
FCL = 1
For I = 1 To N
-
M
FCL = CDbl(I)*FCL
Next I
' члены числителя
X = N + Alp: S = 1
For I = 0 To N
-
M
-
1
S = S*(X
-
I)
Next I
CP(N
-
M) = SIG*S/(FCL*FCM)
SIG = -
SIG ' изменение знака
Next M
End If
22
End Sub
' Основной
модуль программы
Dim As Integer N, I
N = 5 ' Полином
степени
5
Dim As Single CS(N), Alp, X, LS
'Print #2, -
X^5+25*X^4
-
200*X^3+600*X^2
-
600*X+120
Open Cons For Output As #2
'Open "OrPol.res" For Output As #2
Print #2,
Print #2, Using " Coefficie
nts of the polynomial LS of degree N = ###"; N
For Alp = 0.0 To 2.0 Step 2.0
'
CPLG (N, Alp, CS())
'
Print #2,
Print #2, Using " Parameter Alpha = ##.##"; Alp
Print #2,
For I = 0 To N
Print #2, Using " ###.######"; CS(I);
Next I
Print #2,
Print #2,
For X =
0.0 TO 2.0 Step 0.5
LS = CS(0) ' Значение полинома в точке
For I = 1 To N
LS = LS*X + CS(I)
Next I
Print #2, Using " X = ##.# LS = ##.######"; X; LS
Next X
Next Alp
Close #2
Sleep
' Результат выполнения программы:
' Coefficients of the polynomial LS o
f degree N = 5
' Parameter Alpha = 0.00
' -
0.008333 0.208333 -
1.666667 5.000000 -
5.000000 1.000000
' X = 0.0 LS = 1.000000
' X = 0.5 LS = -
0.445573
' X = 1.0 LS = -
0.466667
' X = 1.5 LS = 0.116406
' X = 2.0 LS = 0.733334
' Paramete
r Alpha = 2.00
' -
0.008333 0.291667 -
3.500000 17.500000 -
35.000000 21.000000
' X = 0.0 LS = 21.000000
' X = 0.5 LS = 7.455469
' X = 1.0 LS = 0.283333
' X = 1.5 LS = -
2.524218
' X = 2.0 LS = -
2.599998
23
Для вычисления различного рода интег
ралов
по квадратурным формулам типа Гаусса необходимо вычисление узлов и чисел Кристоффеля. Ниже приведен исходный текст демонстрационной программы и подпрограммы вычисления чисел Кристоффеля для полиномов Лагерра.
' P R O G R A M "OrPol7_ChristNum"
' 10.10.1996
'
-------------------------------------------------------------
' Вычисление чисел Кристоффеля полиномов Лагерра
'
-------------------------------------------------------------
' Number o
f Christoffel symbols
' Числа Кристоффеля (всегда положительные) -
коэффициенты
' квадратурных формул Гаусса (Никифоров А.Ф. Основы теории
' специальных функций. М., Наука, 1974) для приближенного
' численного интегрирования.
'
' NM -
максимальная степень полинома (0<NM<=12);
' N -
текущая степень полинома (в программе от 1 до 6);
' AL -
значение параметра полинома (A > -
1)
' XX(K) -
корни (нули, узлы) полинома;
' CR(K) -
коэффициенты (числа Кристоффеля).
'
#L
ang "FB" ' Режим совместимости с FreeBASIC
#Include "crt/math.bi" ' заголовочный файл станд. библиотеки
'
Sub CPLG(N As Integer, AL As Single, CP() As Single, ER As Integer)
' 12.08.1994
'
----------------
---------------------------------------------
' Подпрограмма вычисления коэффициентов полинома Лагерра
'
-------------------------------------------------------------
' Подпрограмма соответствует явному выражению для полинома
' Лагерра из книги:
Суетин П.К. Классические ортогональные
' многочлены М., Наука, 1979, 416 с., ил.
'
' N -
степень стандартизованного полинома Лагерра (типа LS)
' AL -
значение параметра полинома (AL > -
1)
' CP -
вектор коэффициентов полинома Лагерра
' ER -
код завершения подпрограммы
'
Dim As Integer I, M
Dim As Single SIG, X, S
Dim As Double FCN, FCM, FCL
ER = 0: CP(0) = 1 ' свободный член
If N > 0 And N <= 12 Then ' ограничения на степень N
'
FCN = 1
For I = 1 To N ' факториал
числа
N
FCN = CDbl(I)*FCN
24
Next I
'
SIG = 1
For M = 0 To N
'
FCM = 1
For I = 1 To M ' факториал
числа
M
FCM = CDbl(I)*FCM
Next I
'
FCL = 1
For I = 1 To N
-
M ' факториал
N
-
M
FCL = CDbl(I) * FCL
Next I
'
X = N + AL: S = 1
For I = 0 To N
-
M
-
1 ' члены
числителя
S = S*(X
-
I)
NEXT I
CP(N
-
M) = SIG*S/(FCL*FCM)
SIG = -
SIG
Next M
EndIf
End Sub
'
Sub PLRT(M As Integer, XCOF() As Single, ROOTR() As Single, ROOTI() As Single, ER As Integer)
' 12.08.1994
'
-------------------------------------------------------------
' Вычисление комплексных корней действительного полинома
'
-------------------------------------------------------------
'
' Метод последовательных приближений Берстоу
-
Н
ьютона -
' см. программу PoliRoot.bas из брошюры "Фрагмент 8".
' Внешние подпрограммы НЕ ИСПОЛЬЗУЮТСЯ!
' Параметры вызова:
' M -
степень полинома (1 <= M <= 12)
' XCOF -
массив коэффициентов полинома
' ROOTR -
массив действител
ьных частей корней
' ROOTI -
массив мнимых частей корней
' ER -
код ошибки: 0 -
нормальное завершение
' 1 -
M меньше 1 или больше 12
' 2 -
нулевой старший коэффициент
' 3 -
исчерпаны возможности
Dim As Integer N, NX, NXX, N2, FIT, L, I, IN, ICT, ITEMP
Dim As Single COF(M+2)
Dim As Double X, XO, XT, DX, UX, Y, YO, YT, DY, UY, V, U
Dim As Double TEMP, XT2, YT2, FI, SUMSQ, XPR, YPR, Alpha
If M < 1 Or M > 12 Then
ER = 1 ' M меньше 1 или больше 12
Else
If XCOF(0) = 0 Then
25
ER = 2 ' нулевой старший коэффициент
Else
If M = 1 Then
ROOTR(1) = -
XCOF(1)/XCOF(0): ROOTI(1) = 0
Else
'
ER = 0
N = M: NX = N: NXX = N + 1: N2 = 1
FIT = 0
For L = 0 To N: COF(L+1) = XCOF(L): Next L
'
Do
IN = 0: XO = 0.00500101: YO = 0.01000101
'
L50:IN = IN + 1 ' следующее начальное приближение
X = XO
XO = -
10.0*YO
YO = -
10.0*X
X = XO: Y = YO
'
L60:ICT = 0 ' начало итераций
L65:UX = 0.0: UY = 0.0
V = 0.0
XT = 1.0: YT = 0.0
U = COF(N+1) ' младший коэффициент
If U = 0 Then X = 0: NX = NX -
1: NXX = NXX -
1: GoTo L130
For I = 1 To N
TEMP = COF(N
-
I+1)
XT2 = X * XT -
Y * YT: YT2 = X * YT + Y * XT
U = U + TEMP * XT2: V = V + TEMP * YT2
FI = CDbl(I)
UX = UX + FI*XT*TEMP: UY = UY -
FI*YT*TEMP
XT = XT2: YT = YT2
Next I
'
SUMSQ = UX * UX + UY * UY
If SUMSQ = 0 Then
If FIT = 0 Then GoTo L50
X = XPR: Y
= YPR: GoTo L120
End If DX = (V*UY -
U*UX)/SUMSQ: X = X + DX
DY = -
(U*UY + V*UX)/SUMSQ: Y = Y + DY
If Abs(DY) + ABS(DX) < 0.00000001 Then GoTo L100
'
ICT = ICT + 1 ' следующий шаг итерации
If ICT < 500 Then GoTo L65
If FIT
= 1 Then GoTo L100
If IN >= 5 Then ER = 3: Exit Do ' 500 итер
. от
5 нач
.
приближ
.
GoTo L50
'
L100:For L = 1 To NXX
26
TEMP = XCOF(L
-
1)
XCOF(L
-
1) = COF(L)
COF(L) = TEMP
Next L
ITEMP = N: N = NX: NX = ITEMP
If FIT = 0 Then FIT = 1: XPR = X: YPR = Y: GoTo L60
L120:FIT = 0
If Abs(Y) < 0.000001*ABS(X) Then GoTo L130
Alpha = X + X
SUMSQ = X*X + Y*Y
N = N -
2
GoTo L140
'
L130:Y = 0: SUMSQ = 0: Alpha = X
N = N -
1
L140:COF(2) = COF(2) + Alpha*COF(1)
For L = 2
To N
COF(L+1) = COF(L+1) + Alpha*COF(L) -
SUMSQ*COF(L
-
1)
Next L
Do
ROOTR(N2) = X: ROOTI(N2) = Y
N2 = N2 + 1
If SUMSQ = 0 Then Exit Do
Y = -
Y ' комплексно сопряженные корни
SUMSQ = 0
Loop
'
Loop While N > 0
EndIf
EndIf
EndIf
End Sub
'
Sub PLGR(N As Integer, A As Single, X As Single, ByRef LS As Single, ByRef LE As Single, ByRef LN As Single, ER As Integer)
' 17.08.1994
'
---------------------------
----------------------------------
' Вычисление значений обобщенных полиномов Лагерра
'
-------------------------------------------------------------
' Вычисление производится по рекуррентной формуле.
' Нормировка полиномов принята в соответстви
и с книгой:
' Суетин П.К. Классические ортогональные многочлены,
' М., Наука, 1979, 416 с., ил.
'
' N -
степень полинома Лагерра
' A -
значение параметра полинома (A > -
1)
' X -
значение аргумента (X >= 0)
' LS -
значение стандар
тизованного полинома
' LE -
значение полинома с единицей при старшей степени
' LN -
значение ортонормированного полинома
'
Dim As Integer K
27
Dim As Single LS0, LS1, FAC, F0, F1
LS0 = 1: LS1 = A + 1 -
X: FAC = 1
If N = 0 Then ' если
степень
р
авна
0
LS = LS0: LE = LS
Else
If N = 1 Then ' если степень равна 1
LS = LS1: LE = LS
Else
' степень полинома равна или больше 2
For K = 2 To N
FAC = FAC*K: F0 = K + A -
1: F1 = K + F0 -
X
LS = (F1*LS1 -
F0*LS0)/K ' стандартизова
нный
LS0 = LS1: LS1 = LS
Next K
' вычисление значения полинома с единицей при степени
LE = FAC*LS
EndIf
EndIf
' вычисление значения ортонормированного полинома
F0 = A + N + 1
LN = LS*Sqr(FAC/tgammaf(F0))
If (N Mod 2) <> 0 Then
LE = -
LE: LN = -
LN
EndIf
End Sub
'
Sub CLCR(N As Integer, AL As Single, XX() As Single, CR() As Single, ER As Integer)
' 10.10.1996
'
-------------------------------------------------------------
' Вы
числение узлов и чисел Кристоффеля полиномов Лагерра
'
-------------------------------------------------------------
'
' N -
степень полинома Лагерра
' AL -
значение параметра полинома (A > -
1)
' XX(K) -
узлы интегрирования (корни полинома)
' CR(K) -
коэффициенты (числа Кристоффеля)
' ER -
код завершения:
' ER = 0 -
нормальное завершение
' ER = -
1 -
обнаружена ошибка в подпрограмме
' CL(K) -
коэффициенты полиномов Лагерра (типа LS)
' XI(K) -
мнимые части корней пол
инома (всегда равны 0)
'
Dim As Integer N1, K
Dim As Single LS, LE, LN
Dim As Single X, CL(N), XI(N), GNN, GAN, NALN
'
' вычисление коэффициентов стандартизованного полинома
CPLG(N, AL, CL(), ER)
' вычисление комплексных корней полинома
PLRT(N, CL(), XX(
), XI(), ER)
' вычисление вспомогательных параметров
28
X = N
GNN = tgammaf(X) ' вычисление Г(n)
X = N + AL
GAN = tgammaf(X) ' вычисление Г(n+A)
NALN = N*(AL + N) ' вычисление n*(n+A)
'
' вычисление чисел Кристоффеля
For K = 1 To N
X = XX(K) ' значение текущего аргумента
N1 = N –
1 ' степень предыдущего полинома
' вычисление значений полиномов Лагерра
PLGR(N1, AL, X, LS, LE, LN, ER)
CR(K) = (X*GNN*GAN)/(NALN*LE*LE)
' числа
Кристоффеля
Next K
'
End Sub
'
' Текст основной программы
Dim As Integer IMAX, NM, N, K, ER
IMAX = 12
Dim As Single XX(IMAX), CR(IMAX), AL, SUM
'
NM = 6 ' максимальная степень полинома
Open Cons For Output As #2
'Open "OrPol.res" For Output As #2
For AL = 0.0 To 2.0 St
ep 2.0 ' перебор параметра полинома
Print #2,
Print #2, Using " Parameter polynomial AL = ##.##"; AL
For N = 1 To NM ' перебор степеней полинома
Print #2,
Print #2, Using " Degree of the polynomial N = ##"; N
'
CLCR(N, AL, XX
(), CR(), ER)
'
Print #2, " K XX(K) CR(K)"
For K = 1 To N
Print #2, Using " ## ###.####### ##.########"; K; XX(K); CR(K)
Next K
SUM = 0.0
For K = 1 To N
SUM = SUM + CR(K)
Next K
Print #2, Using " Christoffel sy
mbols numbers amount ##.########"; SUM
'
Next N
Print #2,
Next AL
Close #2
Sleep
' Фрагмент результата работы программы:
29
' Parameter polynomial AL = 0.00
' Degree of the polynomial N = 1
' K XX(K) CR(K)
' 1 1.0000000 1.000000
00
' Christoffel symbols numbers amount 1.00000000
' ...
' Degree of the polynomial N = 5
' K XX(K) CR(K)
' 1 0.2635603 0.52175474
' 2 1.4134030 0.39866677
' 3 3.5964262 0.07594249
' 4 7.0858111 0.00361176
'
5 12.6407976 0.00002337
' Christoffel symbols numbers amount 0.99999911
' Degree of the polynomial N = 6
' K XX(K) CR(K)
' 1 0.2228466 0.45896405
' 2 1.1889321 0.41700038
' 3 2.9927375 0.11337373
' 4 5
.7751408 0.01039919
' 5 9.8374691 0.00026102
' 6 15.9828739 0.00000090
' Christoffel symbols numbers amount 0.99999923
' Parameter polynomial AL = 2.00
' Degree of the polynomial N = 5
' K XX(K) CR(K)
' 1 1.0311091 0.52091640
' 2 2.8372130 1.06670678
' 3 5.6202917 0.38354903
' 4 9.6829195 0.02856411
' 5 15.8284636 0.00026272
' Christoffel symbols numbers amount 1.99999893
' Degree of the polynomial N = 6
' K XX(K) CR(
K)
' 1 0.8899410 0.38435465
' 2 2.4331436 0.99712431
' 3 4.7662048 0.53608721
' 4 8.0482664 0.07953963
' 5 12.6003799 0.00287961
' 6 19.2620659 0.00001344
' Christoffel symbols numbers amount 1.99999905
Для значения параметра полинома Alpha = 0.00 получено очень хорошее совпадение со значениями узлов и чисел Кристоффеля...
30
Конечно, материал этой главы требует более детального рассмотрения.
Например, представляют интерес следующие вопросы:
ортогона
льные полиномы дискретной переменной;
аппроксимативные свойства ортогональных полиномов Чебышёва;
аппроксимация функции рядом Фурье
-
Лагерра;
прямое и обратное преобразования Лапласа.
Но сегодня лимит времени и объема брошюры исчерпан!
На этом позвольт
е закруглиться.
До новых встреч!
Пишите: eugene_r@mail.ru
Документ
Категория
Информатика
Просмотров
112
Размер файла
833 Кб
Теги
полином, многочлен, алгоритм, программа, freebasic
1/--страниц
Пожаловаться на содержимое документа