КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Предварительные рекомендации
Для успешного выполнения данной лабораторной работы Вам следует ознакомиться со следующими рекомендациями. Рассмотрим особенности реализации алгоритма интерполирования по Лагранжу. Пусть установлено, что исследуемое значение аргумента
Наша первоочередная задача – вычислить индексы Такой подход обеспечит наилучшее для многочлена Лагранжа «качество» аппроксимации табличной функции Таким образом, алгоритм вычисления значений индексов Указанный алгоритм должен учитывать следующие моменты: · порядок · значение Будем определять индексы
где для четных значений а для нечетных значений Например, при а при Такие результаты обусловлены правилами функций
Следовательно, первая функция – Если при реализации алгоритма (11.4) индекс В таком случае мы в качестве индекса Если же при реализации алгоритма (11.4) индекс В этой ситуации мы поступим аналогично предыдущему случаю: индексу Во всех трех перечисленных случаях для частичного интервала интерполирования будет выделено из основной таблицы ровно Все выше сказанное реализуем в отдельном проекте AddAlgorithm_11 консольного приложения на языке программирования Fortran. Для простоты анализа результатов массив узлов При таких условиях код основной программной единицы будет следующим:
Ниже приводятся результаты для одного из тестовых расчетов:
Вернемся теперь к формуле (11.1). С использованием новой безразмерной переменной
Каждое Производная от многочлена Лагранжа будет иметь вид:
Таким образом, каждое Отметим, что в этом произведении всего Производная произведения, в свою очередь, может быть представлена в виде следующей суммы:
Каждое Подведем общий итог рассуждениям. Формула (11.13) представляет собой сумму из Если при построении многочлена (11.13) мы будем использовать только В этом случае параметр
Остается только реализовать формулу (11.15) в виде соответствующей программной единицы. Обратимся теперь к формулам (11.2) и (11.3) интерполирования по Ньютону. Выполним в этих формулах замену переменной следующего вида: · для первой интерполяционной формулы – · для второй интерполяционной формулы – Тогда будем иметь (с учетом того, что степень интерполяционного многочлена будет
Дифференцирование обеих формул дает следующие выражения:
Выше мы уже обсуждали вид производной от произведения нескольких сомножителей. В данном случае каждое из слагаемых (кроме первых) в суммах (11.18) и (11.19) содержит производную от произведения Поэтому алгоритм вычисления слагаемых в суммах (11.18) и (11.19) будет проще: для для Следующее соображение касается построения таблицы конечных разностей. Поскольку степень Теперь Вы можете приступать к непосредственному программированию по данной работе. Пример выполнения лабораторного задания на Fortran Воспользуемся уже разработанными компонентами из лабораторных работ № 8 и № 9, а в качестве исследуемой функции возьмем зависимость
Стартуем среду разработки MS Visual Studio. Создадим новый проект LabTask_11f и сгенерируем в нем файл основной программной единицы – main_11.f90. Включим в проект файл y(x)_dy(x).f90 со следующими программными единицами, представляющими собой функции (11.22):
Реализуем алгоритм (11.15) интерполирования по Лагранжу для производной от таблично заданной функции следующим образом:
Здесь переменная xx есть исследуемое значение аргумента Обозначения всех остальных переменных выполнены максимально близко к обозначениям, принятым в выше приведенных формулах.
Алгоритмы (11.18)–(11.21) интерполирования по Ньютону объединим в рамках одной программной единицы:
Объединим интерфейсы к разработанным программным единицам в рамках одного модуля:
Раздел описаний основной программной единицы может быть следующим:
Основные действия программы указаны в комментариях, поэтому мы предоставляем Вам возможность самостоятельно разобраться в сути производимых преобразований над числовыми данными:
Выполнение данной программной единицы требует ввода данных, например:
Таблица результатов (файл Table_dy.txt) интерполирования по Лагранжу для производной функции (11.22) будет иметь следующий вид: n = 21 m = 7 x y(x) y'(x) Ln'(x) abs_err otn_err 1.0000 2.439737 -10.460448 -10.466503 0.006056 0.058 % 1.0238 2.145598 -14.126488 -14.125279 0.001209 0.009 % 1.0476 1.773570 -16.972276 -16.971319 0.000957 0.006 % 1.0714 1.345186 -18.838069 -18.838239 0.000170 0.001 % 1.0952 0.885142 -19.619399 -19.619747 0.000348 0.002 % 1.1190 0.419897 -19.272966 -19.272930 0.000036 0.000 % 1.1429 -0.023813 -17.819080 -17.818854 0.000226 0.001 % 1.1667 -0.420483 -15.340516 -15.340512 0.000005 0.000 % 1.1905 -0.747283 -11.977845 -11.978087 0.000242 0.002 % 1.2143 -0.985341 -7.921499 -7.921496 0.000002 0.000 % 1.2381 -1.120807 -3.401028 -3.401374 0.000347 0.010 % 1.2619 -1.145637 1.327850 1.327850 0.000000 0.000 % 1.2857 -1.058046 5.997679 5.997304 0.000375 0.006 % 1.3095 -0.862603 10.344354 10.344351 0.000003 0.000 % 1.3333 -0.569982 14.122023 14.121704 0.000319 0.002 % 1.3571 -0.196350 17.116960 17.116955 0.000005 0.000 % 1.3810 0.237539 19.159618 19.159425 0.000193 0.001 % 1.4048 0.707520 20.134202 20.134196 0.000006 0.000 % 1.4286 1.187377 19.985196 19.985172 0.000024 0.000 % 1.4524 1.650325 18.720498 18.720493 0.000006 0.000 % 1.4762 2.070521 16.410976 16.411127 0.000151 0.001 % 1.5000 2.424524 13.186463 13.186460 0.000004 0.000 % 1.5238 2.692615 9.228438 9.228730 0.000292 0.003 % 1.5476 2.859913 4.759781 4.759780 0.000001 0.000 % 1.5714 2.917213 0.032199 0.032568 0.000368 1.130 % 1.5952 2.861505 -4.687973 -4.687972 0.000001 0.000 % 1.6190 2.696149 -9.134808 -9.134445 0.000362 0.004 % 1.6429 2.430680 -13.057780 -13.057776 0.000004 0.000 % 1.6667 2.080273 -16.235910 -16.235634 0.000276 0.002 % 1.6905 1.664887 -18.490230 -18.490224 0.000006 0.000 % 1.7143 1.208140 -19.693879 -19.693751 0.000128 0.001 % 1.7381 0.735975 -19.779267 -19.779261 0.000006 0.000 % 1.7619 0.275198 -18.741884 -18.741932 0.000048 0.000 % 1.7857 -0.148035 -16.640556 -16.640551 0.000005 0.000 % 1.8095 -0.509694 -13.594127 -13.594341 0.000214 0.002 % 1.8333 -0.789229 -9.774757 -9.774754 0.000003 0.000 % 1.8571 -0.970728 -5.398202 -5.398533 0.000332 0.006 % 1.8810 -1.043821 -0.711645 -0.711714 0.000069 0.010 % 1.9048 -1.004256 4.020248 4.020814 0.000567 0.014 % 1.9286 -0.854145 8.530264 8.530586 0.000322 0.004 % 1.9524 -0.601842 12.563720 12.561988 0.001732 0.014 % 1.9762 -0.261473 15.892830 15.890370 0.002460 0.015 % 2.0000 0.147863 18.329556 18.341838 0.012282 0.067 % Другая таблица, для интерполирования по Ньютону, будет содержать следующие данные: x y(x) y'(x) Nt'(x) abs_err otn_err 1.0000 2.439737 -10.460448 -10.466503 0.006056 0.058 % 1.0238 2.145598 -14.126488 -14.125279 0.001209 0.009 % 1.0476 1.773570 -16.972276 -16.971319 0.000957 0.006 % 1.0714 1.345186 -18.838069 -18.835940 0.002129 0.011 % 1.0952 0.885142 -19.619399 -19.617813 0.001585 0.008 % 1.1190 0.419897 -19.272966 -19.270390 0.002576 0.013 % 1.1429 -0.023813 -17.819080 -17.817218 0.001861 0.010 % 1.1667 -0.420483 -15.340516 -15.338067 0.002449 0.016 % 1.1905 -0.747283 -11.977845 -11.976122 0.001723 0.014 % 1.2143 -0.985341 -7.921499 -7.919721 0.001777 0.022 % 1.2381 -1.120807 -3.401028 -3.399826 0.001201 0.035 % 1.2619 -1.145637 1.327850 1.328560 0.000710 0.053 % 1.2857 -1.058046 5.997679 5.998091 0.000412 0.007 % 1.3095 -0.862603 10.344354 10.343839 0.000515 0.005 % 1.3333 -0.569982 14.122023 14.121555 0.000468 0.003 % 1.3571 -0.196350 17.116960 17.115335 0.001625 0.009 % 1.3810 0.237539 19.159618 19.158373 0.001245 0.006 % 1.4048 0.707520 20.134202 20.131828 0.002374 0.012 % 1.4286 1.187377 19.985196 19.983451 0.001744 0.009 % 1.4524 1.650325 18.720498 18.717904 0.002595 0.014 % 1.4762 2.070521 16.410976 16.409120 0.001856 0.011 % 1.5000 2.424524 13.186463 13.184225 0.002238 0.017 % 1.5238 2.692615 9.228438 9.226884 0.001554 0.017 % 1.5476 2.859913 4.759781 4.760035 0.000254 0.005 % 1.5714 2.917213 0.032199 0.030950 0.001249 4.036 % 1.5952 2.861505 -4.687973 -4.686562 0.001411 0.030 % 1.6190 2.696149 -9.134808 -9.141842 0.007034 0.077 % 1.6429 2.430680 -13.057780 -13.055525 0.002255 0.017 % 1.6667 2.080273 -16.235910 -16.247165 0.011254 0.069 % 1.6905 1.664887 -18.490230 -18.487633 0.002596 0.014 % 1.7143 1.208140 -19.693879 -19.706850 0.012970 0.066 % 1.7381 0.735975 -19.779267 -19.776907 0.002361 0.012 % 1.7619 0.275198 -18.741884 -18.753684 0.011800 0.063 % 1.7857 -0.148035 -16.640556 -16.638956 0.001599 0.010 % 1.8095 -0.509694 -13.594127 -13.602132 0.008005 0.059 % 1.8333 -0.789229 -9.774757 -9.774275 0.000482 0.005 % 1.8571 -0.970728 -5.398202 -5.400630 0.002428 0.045 % 1.8810 -1.043821 -0.711645 -0.712387 0.000742 0.104 % 1.9048 -1.004256 4.020248 4.023936 0.003689 0.092 % 1.9286 -0.854145 8.530264 8.528463 0.001801 0.021 % 1.9524 -0.601842 12.563720 12.572705 0.008985 0.071 % 1.9762 -0.261473 15.892830 15.890370 0.002460 0.015 % 2.0000 0.147863 18.329556 18.341838 0.012282 0.067 % Анализ двух представленных таблиц свидетельствует в пользу алгоритма по Лагранжу. Причина этого – принцип размещения значения Можно отметить, что качество интерполирования по Ньютону может быть всегда улучшено за счет увеличения порядка Пример выполнения лабораторного задания на языке C# В имеющемся рабочем пространстве NMM_PetrovIS сгенерируем (добавим) новый проект LabTask_11с консольного приложения на языке программирования C#. Включим в проект класс – Class_11, в котором разместим программные компоненты – аналоги разработанных выше алгоритмов. Никакие принципиально новые приемы программирования мы здесь использовать не будем, поэтому коды программных компонентов приводим без комментариев:
Кроме того, коды функций func_y() и func_dy() в соответствии с формулами (11.22) Вам уже под силу сформировать самостоятельно.
Напомним здесь, что для сохранения результатов вычислений в виде файла на жестком диске, нам необходимо подключить в основной программной единице пространство имен System.IO. Аналог основной программной единицы main_11 (на Fortran) на языке C# может иметь, например, следующий вид:
Сравнение кодов на C# и Fortran, реализующих операции форматного вывода в текстовый файл, безусловно, говорит в пользу Fortran. В частности, операторы format позволяют более гибко организовывать форматный ввод/вывод и не «загромождают» основной код программы, поскольку могут быть записаны в любом месте программной единицы (неисполняемые операторы).
Компиляция проекта LabTask_11с и тестовый расчет дают результаты (файл LabTask_11с.txt), идентичные тем, что были получены в проекте LabTask_11f и приведены выше в виде таблиц (файл Table_dy.txt). Последнее свидетельствует в пользу того, что цель данной лабораторной работы достигнута. Отладка данной лабораторной работы (на обоих языках программирования) должна производиться на функциях (11.22), а затем на функциях из Вашего варианта. Только после того, как Вами будут получены результаты, совпадающие с приведенными выше, Вы можете приступать к вычислениям для своих данных. Контроль выполнения варианта лабораторного задания № 11 Для контроля правильности Вашего выполнения лабораторной работы № 11 воспользуйтесь уже известным Вам приложением NMM_Labs. Выберите требуемую лабораторную работу и свой вариант. После этого – нажмите на кнопку «Выполнить» – перед Вами появится следующая форма:
Пользователю предоставляется возможность вычислять значение для таблично заданной функции, а также ее производной, при помощи одного из двух интерполяционных многочленов. Выбор многочлена производится путем «включения» соответствующей радио-кнопки из группы «Интерполяционный многочлен». Напомним, что вводимое значение аргумента должно быть в пределах отрезка интерполирования. Кроме того, Вы можете задать другое «Количество интервалов основной таблицы», например – 25, которое при начальной загрузке имеет минимальное значение – 20. Для исследования влияния степени многочлена на относительную погрешность вычисления Вы можете увеличивать этот параметр (от 4 до 9). После того, как выбран интерполяционный многочлен, например – Лагранжа, и задано конкретное значение аргумента, необходимо нажать на кнопку «Вычислить значение функции и ее производной»:
Основной результат интерполирования размещается внизу формы. Для наглядности работы данного расчетного алгоритма (интерполирования по Лагранжу), а также для облегчения отладки Вашей программы, выводится таблица функции и ее производной, рассчитанные по аналитическим формулам. Если же был выбран многочлен Ньютона, то форма с результатами будет иметь вид:
Здесь также выводится дополнительная информация, раскрывающая особенности интерполирования по Ньютону, и позволяющая производить отладку подобной программы. Вам следует выполнить ряд вычислений для различных значений аргумента и для обоих методов интерполирования, чтобы убедиться в корректности работы Вашей программы по данной лабораторной работе. Работа считается выполненной, если результаты, полученные Вашей программой для значений аргумента из «верхней», «средней» и «нижней» частей расчетных таблиц (файлов Table_dy.txt или LabTask_11с.txt) совпадут с результатами программы NMM_Labs.
Дата добавления: 2014-12-23; Просмотров: 514; Нарушение авторских прав?; Мы поможем в написании вашей работы! |