отклонений в заданных точках 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().
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.