Аппроксимация табличных функций методом наименьших квадратов (Лабораторная работа № 7)

Страницы работы

Фрагмент текста работы

отклонений в заданных точках xi исходных данных yi и получаемых  по аппроксимации.

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

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

int AprPoly(int n, LVector X, LVector Y, int m, Vector A,

 double& S, int keyDemo=0, LVector DY=NULL)

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

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

X - вектор значений аргумента;

Y - вектор значений функции;

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

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

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

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

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

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

AprPoly  = 0 - нормальное завершение;

AprPoly = -1 - число точек недостаточно для аппроксимации. Другие значения AprPoly передаются из подпрограммы решения СЛАУ, в качестве которой используется AprGaussPro() и которая находится в том же файле Aproxy (см. комментарии к ней).

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

int AprNonLine(int n, LVector X, LVector Y, LVector A, f_Xy FuncName, int nA, Vector A, double epsA, double epsF, double& S, int keyDemo=0, LVector DY=NULL).

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

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

X - вектор значений аргумента;

Y - вектор значений функции;

nA – число определяемых параметров аппроксимации;

A - вектор нулевых приближений искомых параметров;

FuncName – имя функции, которая является аппроксимирующей.

Входные переменные keyDemo, epsA и epsF имеют то же назначение, что соответствующие параметры функции AprSysNewton() и предназначены для передачи в нее.

Выходные переменные функции  AprNonLine():

A - вектор искомых параметров аппроксимирующей функции;

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

Необязательным выходным параметром является вектор отклонений DY.

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

AprNonLine  = 0 - нормальное завершение;

AprNonLine = -1 - число точек недостаточно для аппроксимации. Другие значения AprNonLine передаются из функции AprSysNewton().

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

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

int AprPoly2(int n, LVector X, LVector Y, LVector Z,

int m, Vector A, double& S, int keyDemo=0, LVector DZ=NULL).

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

-  n - число точек в таблице функции;

X - вектор значений первого аргумента;

X - вектор значений второго аргумента;

Z - вектор значений функции.

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

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

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

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

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

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

double y(double x)   или

double z(double x, double y)

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

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

void WritePoly(int n, Vector A, string FileName=STR0)

void WritePoly2(int n, Vector A, string FileName=STR0)

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

n – порядок полинома. Для WritePolу() он может быть любым, а для WritePolу2()онограничивается: ;

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

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

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

Листинг 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;

     for (i=1; i>=n; i++)

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

     return P;

}

Эта функция осуществляет расчет полинома по его формуле.

Аналогичный текст создает функция WritePolу2().

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

  1. Проанализировать текст функций модуля Aproxy и восстановить лежащие в их основе алгоритмы и формулы.
  2. С помощью AprLine() выполнить линейную аппроксимацию данных содержащихся в файле polkan*.dat. Чтение данных из файла рекомендуется осуществить с помощью функции Read2Vec() из модуля DataFile. Построить график, содержащий исходные точки и аппроксимирующую прямую линию и числовые параметры зависимости. Исходные точки должны быть представлены на графике в виде кружков, квадратиков или других символов и результат аппроксимации в виде непрерывной линии. В качестве примера следует использовать график, данные которого находятся в файле primer.dat.
  3. Выполнить полиномиальную аппроксимацию объекта, имитатор которого

Похожие материалы

Информация о работе

Предмет:
Информатика
Тип:
Методические указания и пособия
Размер файла:
474 Kb
Скачали:
0