Приложение 2
Готовые функции, используемые в лабораторных работах
В данном приложении приводятся заголовки функций из готовых модулей со списком входных и выходных параметров. Они необходимы для правильного использования этих функций. С полными текстами можно ознакомиться по cpp-файлам. Заголовочный файл define.h приводится полностью.
Заголовочный файл define.h
// Заголовочный файл для описания нестандартных типов
// - одномерных и двумерных массивов
// Вариант для 2-го семестра Информатики
#ifndef DEFINE_H_
#define DEFINE_H_
#define MatVecSize 20
#define LongVecSize 400
// одномерныймассив - вещественныйвектор
typedef double Vector[MatVecSize+1];
// одномерный массив - длинный вещественный вектор
typedef double LVector[LongVecSize+1];
// двумерный массив - вещественная матрица
typedef double Matrix[MatVecSize+1][MatVecSize+1];
// одномерный символьный массив - строка
typedef char string[80];
// двумерный символьный массив - лист текста
typedef char list[40][80];
// вещественная функция вещественного аргумента
typedef double (*f_x)(double);
#endif DEFINE_H_
Модуль Matrix
Модуль Matrix содержит функции для работы с матрицами:
- InpMat() – ввод матрицы с клавиатуры;
- OutMat() – вывод матрицы на экран монитора;
- MultMat() – умножение двух матриц;
- DegMat() – возведение матрицы в целую степень;
- NormMat() – вычисление нормы матрицы.
Заголовок и список параметров функции InpMat() следующий:
void InpMat(int& m, int& n, Matrix A)
Входные переменные:
m - число строк матрицы;
n -исло столбцов матрицы;
Выходные переменные:
m - число строк матрицы;
n - число столбцов матрицы;
A - вводимая матрица (двумерный массив);
Примечание:
Переменные m и n являются одновременно входными и выходными. В зависимости от того, какие значения они будут иметь при вызове функции InpMat(), реализуется следующее:
m== 0 и n == 0 - происходит запрос числа строк и столбцов матрицы;
m != 0 и n != 0 - происходит ввод матрицы с числом строк, равным m и числом столбцов, равным n;
m != 0, а n == 0 - происходит запрос числа строк и столбцов квадратной матрицы.
M == 0, а n != 0 - происходит ввод квадратной матрицы с числом строк и столбцов, равным n;
Заголовок и список параметров функции OutMat() следующий:
void OutMat(int m, int n, Matrix A, int w, int p)
Входные переменные:
m - число строк матрицы;
n - число столбцов матрицы;
A - выводимая матрица (двумерный массив);
w - число позиций для вывода одного элемента матрицы;
p - число позиций для вывода дробной части элемента матрицы.
Выходные переменные - нет.
Заголовок и список параметров функции MultMat() следующий:
void MultMat(int m, int n, int p, Matrix A, Matrix B,
Matrix C)
Входные переменные:
m - число строк матрицы A - первого сомножителя;
n - число столбцов матрицы A - первого сомножителя и строк матрицы B
– второго сомножителя;
p - число столбцов матрицы B - второго сомножителя;
A - матрица-первый сомножитель (двумерный массив);
B - матрица-второй сомножитель (двумерный массив);
Выходные переменные:
С - матрица-произведение - результат (двумерный массив).
Заголовок и список параметров функции DegMat() следующий:
void DegMat(int n, Matrix A, int m, Matrix Am)
Входные переменные:
n - число строк и столбцов возводимой квадратной матрицы;
A - возводимая матрицы (двумерный массив);
m - степень, в которую возводится матрица;
Выходные переменные:
Am - результат возведения в степень (тоже квадратная матрица)
Заголовок и список параметров функции NormMat() следующий:
double NormMat(int m, int n, Matrix A)
Входные переменные:
m - число строк матрицы;
n - число столбцов матрицы;
A - матрица (двумерный массив);
Возвращаемое значение - норма матрицы;
Модуль LinSys
Модуль LinSys содержит функцию LinGauss(). Она предназначена для решения систем линейных алгебраических уравнений методом Гаусса. Ее заголовок имеет вид:
int LinGauss(int n, Matrix A, Vector F, int KeyDemo,
VectorX, double& det)
Входные переменные:
n - порядок СЛАУ (число уравнений);
A - матрица коэффициентов (двумерный массив);
F - вектор свободных членов (одномерный массив);
KeyDemo - ключ демонстрации хода решения:
KeyDemo = 0 - нет демонстрации;
KeyDemo = 3 – вывод данных в файл;
Выходные переменные:
X - вектор неизвестных (одномерный массив);
det - определитель матрицы коэффициентов системы;
Возвращаемое значение:
LinGauss - это код ошибки:
LinGauss = 0 - все нормально;
LinGauss = 1,2,3... - в главной диагонали при пересчете матрицы образовался нулевой элемент. Дальнейшее решение невозможно - определитель будет равен нулю. При этом возвращаемое значение указывает индексы этого элемента.
МодульIntegral
Модуль Integral содержит функцию SdxSimps(). Она предназначена для расчета определенных интегралов методом Симпсона. Ее заголовок имеет вид:
double SdxSimps(f_x FuncName, double a, double b, int n)
Входные переменные:
FuncName - имя подпрограммы, задающей подынтегральную функцию;
a - нижний предел интегрирования;
b - верхний предел интегрирования;
n - число элементарных интервалов интегрирования;
Возвращаемое значение:
SdxSimps - значение интеграла;
МодульRoot
Модуль Root содержит функцию RootNewton(). Она предназначена для решения нелинейных уравнений методом Ньютона. Ее заголовок имеет следующий вид:
int RootNewton(f_x FuncName, double epsX, double epsF,
double& X, double& Fx, int& Nckl, int KeyDemo=0,
double dXmax=FLT_MAX, int limit=500)
Входные переменные:
FuncName - имя функции, реализующей левую часть уравнения;
epsX - абсолютная погрешность вычисления корня;
epsF - абсолютная погрешность невязки левой части уравнения с нулем;
X - нулевое приближение корня;
Необязательные входные переменные:
KeyDemo - ключ демонстрации промежуточных данных (итераций):
KeyDemo = 1 происходит непрерывный вывод данных итераций на дисплей;
KeyDemo = 2 происходит вывод с приостановом;
KeyDemo = 0 вывода нет.
dXmax - максимальная величина итерационного шага, при превышении которой происходит его ограничение;
limit - предельно допустимое число итераций, при достижении которого происходит выход из подпрограммы для предупреждения зацикливания;
Выходные переменные:
X - найденное значение корня;
Fx - значение левой части уравнения от значения корня;
Nckl - число совершенных итераций.
Возвращаемое значение:
RootNewton - код ошибки:
RootNewton = 0 - все нормально;
RootNewton= 1 - левая часть уравнения не вычисляется (аргумент принял недопустимое значение);
RootNewton = 2 - сходимость на limit итераций не достигнута;
RootNewton = 3 - значение производной равно нулю и дальнейшие итера- ции невозможны.
Примечания:
1. Левая часть уравнения должна быть оформлена в виде функции с заголовком: doubleFuncName(doublex).
2. Имя функции может быть любым и передается в RootNewton через указатель *FuncName в списке ее формальных параметров.
3. Рекомендуется, чтобы FuncName возвращало значение FLT_MAX (константа из <float.h>),если значение аргумента вышло изобласти определения функции. Например,
#include <math.h>
#include <float.h>
double f(double x)
{
if (x<0.0) return FLT_MAX;
return sqrt(x);
}
Это позволит корректно завершить итерационный процесс.
4. Для исключения механизма ограничения приращений (если это необходимо) следует значение параметра dXmax задать достаточно большим, например, той же константе FLT_MAX.
Модуль DataFile
Модуль DataFile содержит функции для работы с файлами. Основные функции предназначены для записи в файл и чтения из файла одномерных и двумерных массивов:
- WriteVec() – запись одномерного массива - вектора;
- ReadVec() – чтение одномерного массива - вектора;
- Write2Vec()- запись двух одномерных массивов – векторов;
- WriteMat() – запись двумерного массива – матрицы;
- ReadMat() – чтение двумерного массива – матрицы.
Заголовок и список параметров функции WriteVec() следующий:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.