Название: Информатика - Алгоритмы и программы (Н.В. Усольцев)

Жанр: Информатика

Просмотров: 1019


6. программное обеспечение к работе

В лабораторной работе используется ряд готовых функций, объединенных в модуль Aproxy. Он содержит следующие основные функции:

AprLine() – аппроксимация табличной зависимости линейной функцией;

AprPoly() – аппроксимация полиномами от нулевой до третьей степени;

AprSurf() – аппроксимация функции двух переменных полиномом третьей степени.

Заголовок функции AprLine() имеет следующий вид:

int AprLine(int n, Vector X, Vector Y,  double& A0, double& A1, double& S)

Входные параметры

n  – число точек в таблице зависимости y(x);

X – одномерный массив значений аргумента;

Y – одномерный массив значений функции;

Входными параметрами являются:

A0 и A1 – параметры линейной аппроксимации ;

S – среднеквадратичная погрешность аппроксимации.

Возвращаемое значение функции имеет смысл кода ошибки. Оно равно нулю при успешном  выполнении аппроксимации.

Заголовок функции AprPoly() имеет следующий вид:

int AprPoly(int n, Vector X, Vector Y, int Npol, Vector A, double& S)

Входные переменные

n – число точек в таблице зависимости y(x);

X – одномерный массив значений аргумента;

Y – одномерный массив значений функции;

Npol – порядок полинома: от 0 до 3.

Выходные переменные

A –      одномерный массив коэффициентов   полинома A[0]...A[3];

S – абсолютная среднеквадратичная погрешность аппроксимации.

Возвращаемой функцией значение представляет собой код ошибки:

AprPoly  = 0 – нормальное завершение; AprPoly = –1 – число точек недостаточно для аппроксимации.

Другие значения AprPoly передаются из подпрограммы решения СЛАУ (см. комментарии в тексте програмыы).

Функция AprPoly() обращается к подпрограмме решения СЛАУ, которая находится в том же файле.

Заголовок функции AprSurf() имеет следующий вид:

int AprSurf(int nx, int ny, Vector X, Vector Y, Vector Z, Vector A,

double& S)

Входные параметры

nx – число точек в таблице по оси x;

ny – число точек в таблице по оси y;

X – одномерный массив значений аргумента x;

Y – одномерный массив значений аргумента y;

Z – одномерный массив значений функции;

Ее выходные параметры:

A – одномерный массив коэффициентов полинома A[0]...A[9] в соответствии с формулой (6);

S – абсолютная среднеквадратичная погрешность аппроксимации.

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

Функция AprSurf() обращается к подпрограмме решения СЛАУ, которая находится в том же файле.

В работе также используются функция модуля DataFile - WritePolinom(). Эта функция предназначена для вывода в файл текста, который представляет собой синтаксически правильную функцию на языке С/С++, имеющую заголовок

double y(double x)

и выполняющую расчет значения функции по формуле полинома с жестко присвоенными коэффициентами. Она может компилироваться, присоединяться к любому проекту и использоваться для любых расчетов.

Заголовок функции WritePolinom() имеет вид:

void WritePolinom(int n, Vector A, string FileName=STRING0).

Все ее параметры – входные:

n – порядок полинома;

A – массив его коэффициентов;

FileName – имя файла (может не задаваться).

Пример функции, создаваемой с помощью WritePolinom(), представлен на листинге 1.

Листинг 1

#include <math.h>

#include "define.h"

 

double y(double x)

{

// описание типов

     int i,n;

     double P;

     Vector A;

 

// задание порядка полинома

     n=5;

 

// установка коэффициентов полинома

     A[0]= 5.0000000E-01;

     A[1]= 1.0000000E+00;

     A[2]= 2.0000000E+00;

     A[3]= 3.0000000E+00;

     A[4]= 4.0000000E+00;

     A[5]= 5.0000000E+00;

 

// расчет значения полинома

     P=0.0;

     for (i=0; i<=n; i++)

       P+=A[i]*pow(x,i);

     return P;

}

 

7. Задание к работе

1. Проанализировать текст функций модуля Aproxy и восстановить лежащие в их основе алгоритмы и формулы.

2. Разработать управляющую программу для аппроксимации табличных зависимостей с помощью AprLine(). Проверить ee работу на тестовых примерах.

3. Разработать управляющую программу для аппроксимации табличных зависимостей с помощью AprPoly(). Проверить ee работу на тестовых примерах полиномов от нулевой до третьей степени. 

Указание. Для проверки по пп. 2 и 3 рекомендуется задать полиномы с простыми коэффициентами типа 0.5, 1.0, 2.0, 3.0 и по ним предварительно рассчитать тестовые входные наборы данных.

4. Выполнить построение полиномиальной модели объекта, имитатор которого находится в файле, заданном преподавателем, и имеет заголовок  double y(double x). Для этого следует разработать управляющую программу, которая бы вводила значение аргумента x  и получала значение функции y. Выполнить набор необходимого количества точек на интервале (0…10), определить  коэффициенты аппроксимирующего полинома  с помощью AprPoly() и создать программную модель с помощью WritePolinom(). Построить график результатов аппроксимации. На графике должны быть представлены исходные точки в виде кружков, квадратиков или других символов и результат аппроксимации в виде непрерывной кривой. Для построения аппроксимационной кривой следует использовать функцию, полученную с помощью WritePolinom(), и функцию WriteFunc().

5. С помощью функции AprSurf() выполнить двумерную аппроксимацию данных, находящихся в файле, заданном перподавателем, полиномом третьей степени от двух переменных. Чтение данных из файла рекомендуется осуществить с помощью функции Read3Vec() из модуля DataFile.

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

5.0

6.0

7.0

8.0

9.0

2.31

2.50

2.80

3.33

4.59

 

а) –              б)  –     в) –.

Результат оформить также, как и при выполнении задания п.4.

 

Проанализировать текст функции, находящейся в файле linear.cpp. С ее помощью выполнить линеаризацию и аппроксимировать данные, находящиеся в файле, заданном преподавателем, наиболее подходящей функцией и определить искомые параметры. Результат оформить также, как и при выполнении задания п.п. 4 и 6.

8. Литература

 

4, 5, 6, 7, 10 из списка литературы.

Лабораторная работа № 9

Интерполяция табличных функция

 

1. Введение

Интерполяция – это определение аналитической функции, которая соответствует таблице числовых значений «аргумент(ы) – функция» и точно проходит через заданные точки. В лабораторной работе выполняется интерполяция таблично заданных функций полиномами и кубическими сплайнами. Осваивается практическая работа с программами, предназначенными для решения этих задач.