Название: Информатика - Алгоритмы и программы (Н.В. Усольцев) Жанр: Информатика Просмотров: 1278 |
5. программное обеспечение к работеВ лабораторной работе используется ряд готовых функций, объединенных в два модуля: Polynom – модуль, содержащий функции интерполяции полиномами; Spline – модуль функций сплайн-интерполяции. Модуль Polynom содержит следующие основные функции: IntClassic() – интерполяция классическим полиномом; IntLagrange() – интерполяция полиномом Лагранжа. Заголовок функции IntClassic() имеет вид: int IntClassic(int n, Vector X, Vector Y, Vector A)
Входные параметры n – порядок интерполирующего полинома (число точек в таблице зависимости y(x) должно быть на единицу больше); X – одномерный массив значений аргумента; Y – одномерный массив значений функции. Входные параметры A – одномерный массив коэффициентов полинома A[0]...A[n]. Возвращаемое значение функции имеет смысл кода ошибки и равно нулю при успешном выполнении интерполяции. Заголовок функции IntLagrang() имеет вид: double IntLagrange(int n, Vector X, Vector Y, double x) Входные параметры n – порядок интерполирующего полинома (число точек в таблице зависимости y(x) должно быть на единицу больше); X – одномерный массив значений аргумента; Y – одномерный массив значений функции; x – значение аргумента, для которого вычисляется значение функции. Возвращаемое значение функции и представляет собой это вычисляемое по интерполяционной формуле значение функции. Модуль Spline содержит следующие основные функции: SplineCoeff() – расчет коэффициентов кубических сплайнов; Spline() – расчет значения функции по сплайн-интерполяции по предварительно вычисленным коэффициентам. Заголовок функции SplineCoeff() имеет вид: int SplineCoeff(int n, Vector X, Vector Y, Vector A, Vector B, Vector C,Vector D) Входные параметры n – число интервалов интерполяции; X, Y – одномерные
массивы – таблицы точек Выходные параметры A,B,C и D – одномерные массивы коэффициентов сплайнов. Возвращаемое значение представляет собой код ошибки: оно равно 0 при благополучном завершении интерполяции. Остальные значения объяснены во входном комментарии подпрограммы. Заголовок функции Spline() имеет вид: double Spline(int n, Vector X, Vector A, Vector B, Vector C, Vector D, double x) Входные параметры n – число интервалов интерполяции; X – одномерный
массив, таблица значений A, B, C, D – одномерные массивы коэффициентов сплайнов, определенных с помощью SplineCoeff(); x – значение аргумента, при котором вычисляется значение функции по сплайну. Возвращаемое значение представляет собой значение функции по сплайн-интерполяции. В работе также используется функция WriteSpline() из модуля DataFile. Эта функция предназначены для вывода в файл текста, который представляет собой синтаксически правильную функцию на языке С/С++, имеющую заголовок: double y(double x) и выполняющую расчет значения функции по формуле кубического сплайна с жестко присвоенными коэффициентами. Она может компилироваться, присоединяться к любому проекту и использоваться для любых расчетов. Заголовок функции WriteSpline() имеет вид: void WriteSpline(int n, Vector X, Vector A, Vector B, Vector C, Vector D, string FileName=STRING0) Все ее параметры входные: n – число интервалов сплайн-интерполяции; X – массив значений аргумента в точках интерполяции; A, B, C, D – массивы коэффициентов сплайн-интерполяции; FileName – имя файла (может не задаваться). Пример текста, создаваемого в виде файла функцией WriteSpline(), показан на листинге 1. Листинг 1 #include "define.h"
double y(double x) { // описание типов int i,j,n; double dx,Spl; Vector X,A,B,C,D;
// точки интерполяции n=10; X[ 0]= 0.0000000E+00; X[ 1]= 1.0000000E+00; X[ 2]= 2.0000000E+00; X[ 3]= 3.0000000E+00; X[ 4]= 4.0000000E+00; X[ 5]= 5.0000000E+00; X[ 6]= 6.0000000E+00; X[ 7]= 7.0000000E+00; X[ 8]= 8.0000000E+00; X[ 9]= 9.0000000E+00; X[10]=1.0000000E+01;
// коэфффициенты сплайнов A[ 1]= 0.0000000E+00; B[ 1]= 9.9878640E-01; A[ 2]= 9.4608000E-01; B[ 2]= 8.4066720E-01; A[ 3]= 1.6054100E+00; B[ 3]= 4.5477479E-01; A[ 4]= 1.8486500E+00; B[ 4]= 4.7943623E-02; A[ 5]= 1.7582000E+00; B[ 5]=-1.8817928E-01; A[ 6]= 1.5499300E+00; B[ 6]=-1.9138648E-01; A[ 7]= 1.4246900E+00; B[ 7]=-4.6804782E-02; A[ 8]= 1.4546000E+00; B[ 8]= 9.2615612E-02; A[ 9]= 1.5741900E+00; B[ 9]= 1.2484234E-01; A[10]=1.6650400E+00; B[10]= 3.9335047E-02;
C[ 1]= 0.0000000E+00; D[ 1]=-5.2706399E-02; C[ 2]=-1.5811920E-01; D[ 2]=-2.3218004E-02; C[ 3]=-2.2777321E-01; D[ 3]= 1.6238417E-02; C[ 4]=-1.7905796E-01; D[ 4]= 4.0664338E-02; C[ 5]=-5.7064947E-02; D[ 5]= 3.6974232E-02; C[ 6]= 5.3857749E-02; D[ 6]= 1.2288735E-02; C[ 7]= 9.0723953E-02; D[ 7]=-1.4009170E-02; C[ 8]= 4.8696441E-02; D[ 8]=-2.1722053E-02; C[ 9]=-1.6469718E-02; D[ 9]=-1.7522618E-02; C[10]=-6.9037571E-02; D[10]= 2.3012524E-02;
// определение номера интервала, в который попадает x j=0; for (i=1; i<=n; i++) if ((x >= X[i-1])&&(x < X[i])) j=i; if ((x >= X[n-1])&&(x <= X[n])) j=n; if (j==0) return 0.0;
// вычисление значения сплайна dx=x-X[j-1]; Spl=A[j]+B[j]*dx+C[j]*dx*dx+D[j]*dx*dx*dx;
// завершение return Spl; }
6. Задание к работе 1. Проанализировать текст функций модуля Polynom и восстановить лежащие в их основе алгоритмы и формулы. 2. Разработать управляющую программу для интерполяции табличной функции с помощью функции IntClassic(). Выполнить интерполяцию функции
После получения коэффициентов интерполирующего полинома с помощью функции WritePolinom() создать на диске текст функции на языке С/С++, моделирующий этот полином. Используя эту функцию, построить его график с большим (порядка 100) количеством точек. Добавить на этот график исходные точки. 3. Разработать управляющую программу для интерполяции табличной функции с помощью функции IntLagrange(). Выполнить интерполяцию функции из предыдущего пункта и представить результат на графике в виде непрерывной зависимости и исходных точек. 4. Проанализировать тексты функций SplineCoeff() и Spline() из модуля Spline, восстановить алгоритмы, лежащие в основе их работы. Сопоставить операторы подпрограмм с вышеприведенными описанием алгоритма и формулами. 5. Разработать управляющую программу для определения коэффициентов сплайн-интерполяции с помощью функции SplineCoeff(). Выполнить сплайн-интерполяцию функции интегрального синуса Si(x) на интервале (0, 10). Исходной информацией является таблица значений интегрального синуса:
6. С помощью функции WriteSpline() создать на диске текст функции на языке С/С++, моделирующий эту функцию. Используя ее, построить график сплайн-интерполяции интегрального синуса и наложить на него исходные точки (данные хранятся в файле si.dat). 7. Выполнить сплайн-интерполяцию табличной функции, заданной преподавателем. 8. Разработать функцию для изменения числа точек (увеличения или уменьшения) табличной функции на основе ее сплайн-интерполяции. Литература: [4 – 7, 11, 12].
Лабораторная работа № 10 Численное дифференцирование и интегрирование
1. Введение При решении различных вычислительных задач, часто возникает необходимость расчета значений производных (первой, второй и более старших порядков), а также интегралов. При этом дифференцируемая или интегрируемая функция могут не иметь аналитическое представление, а быть выражены только алгоритмически. Часто функция может быть задана набором небольшого числа точек (экспериментальных или полученных в результате другого расчета). Вычисление производных основывается на их представлении в виде конечных разностей. Численные методы расчета определенных интегралов основаны на вычислении конечных сумм значений подынтегральной функции в определенных точках интервала интегрирования. В лабораторной работе изучаются наиболее распространенные методы численного дифференцирования и интегрирования, разрабатываются реализующие их подпрограммы. Выполняется решение некоторых прикладных задач вычислительной математики, связанных с вычислением производных и интегралов.
|
|
Разделы
Количество литературы
Всего: 763 читаем
Лучшие из лучших
Философия для специалиста - учеб. пособие. (Т.О. Бажутина)
Экономика природопользования - Задачи и упражнения (В.А. Шоба)
Политология - Учеб. пособие.(Денисенко Н.А)
Франчайзинг в сфере малого предпринимательства - учебное пособие (А. Е. Леонов)
Основы финансового функционально-стоимостного анализа - учебное пособие (Щербаков В. А., Приходько)
Направление системы электросвязи Часть 1 - учебное пособие (Анатолий Денисов, Константин Алексеев)
Маркетинг - учебное пособие (О. А. Кислицына, С. И. Потапович, В. К. Стародубцева)
Практикум по конфликтологии - учебное пособие (И.А. Скалабан)
Информатика. Алгоритмический язык Фортран - учебное пособие (Худяков Д.С., Саблина Г.В.)
Основы работоспособности технических систем. Автомобильный транспорт - учебное пособие (Атапин, В.Г)