Оформление документации в программныой среде
Практические методы вычисления в прикладной математике. Совершенствование разработки алгоритмов и построение программ на языке программирования. Выбор аппроксимирующей функции. Модульное программирование и техника использования подпрограмм на языке С.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 12.12.2016 |
Размер файла | 403,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение
высшего профессионального образования
"САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ"
КАФЕДРА ИНФОРМАЦИОННО-СЕТЕВЫХ ТЕХНОЛОГИЙ
КУРСОВАЯ РАБОТА
по дисциплине: ИНФОРМАТИКА И ПРОГРАМИРОВАНИЕ
Оформление документации в программныой среде
Санкт-Петербург
2015
Содержание
1. Цель работы
2. Методические указания
2.1 Методические рекомендации по аппроксимации методом наименьших квадратов
2.2 Методика выбора аппроксимирующей функции
2.3 Общая методика решения
2.4 Методика решений нормальных уравнений
2.5 Оценка погрешности аппроксимации
3. Ручной счет
4. Схема алгоритма
5. Код программы
6. Результаты машинного счета
Вывод
1. Цель работы
Данная работа предназначена для закрепления учебного материала, изученного по курсу "Информатика и программирование".
Практическое выполнение курсовой работы предполагает решение типовых инженерных задач обработки данных с использованием методов матричной алгебры, решение систем линейных алгебраических уравнений.
Цель курсового проекта - практическое освоение методов вычисления прикладной математики, совершенствования навыков разработки алгоритмов и построения программ на языке высокого уровня; использования принципов модульного программирования и совершенствования техники использования подпрограмм закрепления знаний по программированию на языке С.
Кроме указанного, курсовая работа предназначена для приобретения навыков по оформлению документации на программные среды.
2. Методические указания
2.1 Методические рекомендации по аппроксимации методом наименьших квадратов
Постановка задачи
Пусть проводится ряд измерений, цель которых - исследование зависимости некоторой физической величины Y от другой физической величины X.
Предполагается, что величины X и Y связаны функциональной зависимостью. Вид этой зависимости требуется определить исходя из результатов измерений, причем число этих измерений n невелико (табл. 1.1).
Таблица 1.1
i |
1 |
2 |
3 |
… |
n |
|
x1 |
x2 |
x3 |
… |
|||
y1 |
y2 |
y3 |
… |
В табл. 1.1:i - номер измерения, - значение аргумента, - значение функции (i = 1, …,n). По данным таблицы можно построить график зависимости Y от X (рис. 1.1). На графике отдельные точки соответствуют значениям в точках (i = 1,...,n).
Пусть из теоретических или иных соображений (например, по графику) выбран вид аппроксимирующей функции y =ц(x). Эта функция в качестве параметров помимо x содержит еще ряд числовых параметров ,…,. Требуется определить такие значения этих параметров (,…,), чтобы кривая y=ц(x,,…,) наилучшим образом аппроксимировала зависимость, полученную экспериментальным путем.
Наиболее применимым на практике для решения таких задач является метод наименьших квадратов (МНК), при котором требование согласования кривой y =ц(x) и экспериментальных точек сводится к тому, чтобы сумма квадратов отклонений (дi) значений от значений аппроксимирующей
функции в соответствующих точках ц () (i = 1, …,n) обращалась в минимум (рис. 2.1).
(2.1)
Запишем требование МНК аналитически
Выражение (2.1) определяет критерий выбора аппроксимирующей функции.
2.2 Методика выбора аппроксимирующей функции
Аппроксимирующую функцию ц(x), имеющую вид ?(x) =?(x, ,…,), (2.2) выбирают из некоторого семейства функций, для которого задан вид функции, но неизвестны и подлежат определению ее параметры ,…,. Определение аппроксимирующей функции ц(x) подразделяется на два основных этапа:
?подбор подходящего вида функции ц(х);
?нахождение параметров функции ц(х) в соответствии с критерием МНК.
Уравнения ()) (2.4) используемые в МНК, называются нормальными, поэтому описываемый способ решения задачи будем называть методом нормальных уравнений.
Структура этих уравнений получается более простой в том случае, когда аппроксимирующая функция ?(x) выбирается линейной функцией искомых параметров, и выражение (2.2) имеет вид:
где - определяемые параметры; ?1(x), ?2(x), …, ?m(x) - система линейно-независимых функций, называемых в курсовой работе базисными функциями. прикладной математика алгоритм программирование
В этом случае, подставляя (2.3) в выражение (2.1) и выполняя дифференцирование в соответствии с (2.4), получим систему уравнений относительно искомых.
Применим операцию дифференцирования (2.4) к параметру, и,
выполняя необходимые алгебраические преобразования, получим уравнение:
(2.5)
Аналогичные уравнения можно получить, применяя описанные выше действия по отношению к переменным ,…,. Эти уравнения образуют систему нормальных уравнений:
где коэффициенты и величины (k, l = 1, 2,…, m) определяются выражениями:
(2.6)
2.3 Общая методика решения
Уравнения (2.6) представляют собой систему линейных алгебраических уравнений, где квадратная матрица A называется матрицей системы, вектор C - вектором-столбцом неизвестных системы, а вектор B - вектором-столбцом свободных членов.
(2.7)
Решение системы линейных уравнений сводится к отысканию значений элементов вектора-столбца С, называемых корнями системы. для получения единственного решения системы, входящие в нее m уравнений должны быть линейно независимыми. необходимым и достаточным условием этого является неравенство нулю определителя данной системы, то есть detA ? 0.
2.4 Методика решений нормальных уравнений
Методика вычислений методом Обратной матрицы
Один из методов решения системы линейных алгебраических уравнений (1.7), записываемой в матричной форме, связан с использованием обратной матрицы 3).
В этом случае решение системы уравнений получается в виде
(2.7)
где - матрица, определяемая следующим образом. Пусть А - квадратная матрица размером c ненулевым определителем det A ? 0. Тогда существует обратная матрица R = , определяемая условием
где Е - единичная матрица, размерности все элементы главной диагонали которой равны 1, а все элементы вне этой диагонали равны 0.
Матрица R - квадратная матрица размером. Умножим матрицу А на первый столбец матрицы R. Получим первый столбец матрицы Е, то есть система уравнений будет представлена в виде,
где неизвестными являются значения. Решением этой системы будет набор значений, то есть первый столбец матрицы R.
Аналогично, умножая матрицу A на второй столбец матрицы R, получим:
Решением этой системы будет набор значений, то есть второй столбец матрицы R. И так далее до m-го столбца матрицы R.
Решением этой системы будет набор значений, то есть m- й столбец матрицы R.В результате получим m систем уравнений.Для решения этих систем можно применять любые методы, разработанные для решения систем линейных алгебраических уравнений.
Вычислив матрицу R (матрицу), находим матрицу коэффициентов С в соответствии с (2.7).
2.5 Оценка погрешности аппроксимации
Результатом этапа решения системы нормальных уравнений (2.7) является получение значений параметров аппроксимирующей функции (2.2) для заданного набора базисных аппроксимирующих функций
+
,….,
Решение () системы нормальных уравнений определяет значения параметров, при которых критерий качества аппроксимации J принимает минимально возможное значение При всех других допустимых значениях параметров величина критерия будет больше. тем самым полученное значение может быть принято за характеристику эффективности аппроксимации заданной функциональной зависимости функциями выбранного класса. При изменении класса аппроксимирующих функций, а также при изменении набора базисных функций значение может меняться. Сравнение различных классов функций по их эффективности (качеству) аппроксимации может осуществляться на основе сравнений соответствующих значений.
Для количественной оценки погрешности аппроксимации может использоваться также величина (Д) максимального отклонения исходной функциональной зависимости от найденной аппроксимирующей. Для этого определяется отклонение во всех заданных точках и определяется максимальное из этих отклонений:
(2.11)
3. Ручной счет
Выражение для аппроксимирующей функции будет иметь следующий вид:
+
Выражение для аппроксимирующей функции и в соответствии с?условиями локального минимума функции найдем частные производные и приравняем их к нулю:
Приведем полученную систему уравнений к?нормальному виду, перенеся свободные члены вправо и поделив обе части уравнений на 2:
Для удобства представим промежуточные результаты вычислений в?соответствии с?(3.1) в?табл.?3.2. Используя значения из табл. 3.2, запишем систему уравнений (3.1) в?окончательном виде:
Таблица(3.2)
№ |
x |
y |
e^(2x) |
y*x |
(x)^2 |
(x)*e^(2x) |
(e^(2x))^2 |
y*e^(2x) |
|
1 |
0,000 |
-2,000 |
1,000 |
0,000 |
0,000 |
0,000 |
1,000 |
-2,000 |
|
2 |
0,250 |
-4,000 |
1,649 |
-1,000 |
0,063 |
0,412 |
2,718 |
-6,595 |
|
3 |
0,500 |
-7,000 |
2,718 |
-3,500 |
0,250 |
1,359 |
7,389 |
-19,028 |
|
4 |
0,750 |
-12,000 |
4,482 |
-9,000 |
0,563 |
3,361 |
20,086 |
-53,780 |
|
5 |
1,000 |
-21,000 |
7,389 |
-21,000 |
1,000 |
7,389 |
54,598 |
-155,170 |
|
6 |
1,25 |
-21,000 |
12,182 |
-26,250 |
1,563 |
15,228 |
148,413 |
-255,832 |
|
? |
3,750 |
-67,000 |
29,420 |
-60,750 |
3,438 |
27,750 |
234,204 |
-492,406 |
?
Полученную систему уравнений решаем методом обратной матрицы. Получаем матрицу А, находим обратную матрицу (матрица R), с помощью матрицы Е (единичная матрица), рассчитываем коэффициенты С: с1 1.259; с2 3.670; с3 -3.580.
Матрица A |
B |
|||
6,000 |
3,750 |
29,420 |
-67,000 -60,750 -492,406 |
|
3,750 |
3,438 |
27,750 |
||
29,420 |
27,750 |
234,204 |
||
Матрица R |
||||
0.544 |
-0.961 |
0.046 |
||
-0.961 |
8.383 |
-0.873 |
||
0.046 |
-0.873 |
0.102 |
Оценка погрешности аппроксимации.
Рассчитаем по формуле (3.4) значения аппроксимирующей функции в?заданных точках (i=?1,?…,?5) и соответствующие отклонения д (табл. 3.3). В соответствии с?табл. 3.3 построим графики исходной и аппроксимирующей функций (рис.?3.1).
Таблица(3.3)
№ |
?(x) |
д=?(x)-y |
x |
y |
|
1 |
-0,723 |
1,277 |
3,000 |
3,220 |
|
2 |
-4,685 |
-0,685 |
4,000 |
4,210 |
|
3 |
-8,746 |
-1,746 |
5,000 |
4,850 |
|
4 |
-12,972 |
-0,972 |
6,000 |
5,630 |
|
5 |
-17,467 |
3,533 |
7,000 |
4,770 |
|
6 |
-22,408 |
-1,408 |
8,000 |
4,200 |
Максимальное отклонение при 0.522 X=1.000, значение критерия аппроксимации 0.639
4. Код программы
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define n 6
#define m 3
void vvod(float E[n])
{
for(int i=0;i<n;i++)
{
scanf("%f",&E[i]);
}
printf("\n");
}
float Fl(int i, float f)
{
if (i==0)
return 1;
if (i==1)
return f;
if (i==2)
return exp(2*f);
else return 0;
}
void koeff(float A[(m)][(m)],float X[n],float Y[n],float B[(m)])
{
for(int k=0;k<m;k++)
{
B[k]=0;
for(int i=0;i<n;i++)
{
B[k]=B[k]+Y[i]*Fl(k,X[i]);
}
for(int l=0;l<m;l++)
{
A[k][l]=0;
for(int i=0;i<n;i++)
{
A[k][l]=A[k][l]+Fl(k,X[i])*Fl(l,X[i]);
}
}
}
}
void prguss(float A[m][m],float B[m],float E[m][m])
{ float Q;
for(int i=0;i<=(m-2);i++)
{
for(int l=(i+1);l<=(m-1);l++)
{
Q=A[l][i]/A[i][i];
A[l][i]=0;
for(int j=(i+1);j<m;j++)
{
A[l][j]=A[l][j]-Q*A[i][j];
}
for(int k=0;k<m;k++)
{
E[l][k]=E[l][k]-Q*E[i][k];
}
}
}
}
void obguss(float A[m][m],float R[m][m],float E[m][m],float B[m],float C[m])
{
float Sum;
for(int k=0;k<m;k++)
{
for(int l=0;l<m;l++)
{
R[k][l]=E[k][l]/A[k][k];
}
}
for(int i=(m-2);i>=0;i--)
{
for(int l=0;l<m;l++)
{
Sum=E[i][l];
for(int j=i+1;j<m;j++)
{
Sum=Sum-A[i][j]*R[j][l];
}
R[i][l]=Sum/A[i][i];
}
}
}
void rkoefC(float R[m][m],float C[m],float B[m])
{
for(int i=0;i<=(m-1);i++)
{
C[i]=0;
for(int k=0;k<=(m-1);k++)
{
C[i]=C[i]+R[i][k]*B[k];
}
}
}
void obrmat(float E[m][m],float R[m][m],float B[m],float C[m],float A[m][m])
{
for(int i=0; i<m;i++)
{
for(int j=0;j<m;j++)
{
if(i==j)
{
E[i][j]=1;
}
else
{
E[i][j]=0;
}
}
}
prguss(A,B,E);
obguss(A,R,E,B,C);
rkoefC(R,C,B);
}
float approcs(float C[m],float Yl[n],float D[n],float X[n],float Y[n])
{
float Kr;
int k;
Kr=0; k=0;
for(int i=0;i<n;i++)
{
Yl[i]=C[0]*Fl(k,X[i])+C[1]*Fl((k+1),X[i])+C[2]*Fl((k+2),X[i]);
D[i]=fabsf(Y[i]-Yl[i]);
Kr=Kr+pow(D[i],2);
}
return Kr;
}
void kappr(float Y[m],float Yl[n],float D[n],float *Dmax,int *IM)
{
*Dmax=fabsf(D[0]);
*IM=0;
for(int i=1;i<n;i++)
{
if(fabsf(D[i])>*Dmax)
{
*Dmax=fabsf(D[i]);
*IM=i;
}
}
}
void vyvod(float E[n])
{
for(int i=0;i<n;i++)
{
printf("%.3f ",E[i]);
}
printf("\n");
}
void vyvod1(float E[m])
{
for(int i=0;i<m;i++)
{
printf("%.3f ",E[i]);
}
printf("\n");
}
int main()
{
float X[n],Y[n], A[m][m],E[m][m],B[m],R[m][m],C[m],Yl[n],D[n],Dmax,Kr;
int IM;
printf("vvedite X\n");
vvod(X);
printf("vvedite Y\n");
vvod(Y);
koeff(A,X,Y,B);
obrmat(E,R,B,C,A);
vyvod1(C);
Kr=approcs(C,Yl,D,X,Y);
kappr(Y,Yl,D,&Dmax,&IM);
printf("Znachenie appr f(x):\n");
vyvod(Yl);
printf("Znachenie otkloneniy:\n");
vyvod(D);
printf("Max pri =%.3f pri X=%.3f \n",Dmax,X[IM]);
printf("Znachenie kriter=%.3f\n",Kr);
getch ();
return 0;
}
5. Результаты машинного счета
Коэффициенты с1 -1.259 с2 3,669 с3 -3.579
Значения аппроксимирующей функции |
Значения отклонений |
|
-2.321 |
0.321 |
|
-3.725 |
0.275 |
|
-6.637 |
0.363 |
|
-12.032 |
0.032 |
|
-21.522 |
0.522 |
|
-37.764 |
0.236 |
Максимальное отклонение при 0.522 X=1.000, значение критерия аппроксимации 0.639
Вывод
Поставленные задачи в начале работы выполнены, даны получение в ручном счете не расходятся с данными полученными с помощью программы.
Выполняя эту работу я научился использовать среду программирования для решения математических задач: а именно овладел аппроксимацией методом неполных квадратов, научился решать систему уравнений методом обратной матрицы, закрепил навыки структурного программирования и навыки передачи параметров.
Был получен базовый комплект знаний по документированию программного обеспечения, согласно принятым государственным стандартам.
Размещено на Allbest.ru
...Подобные документы
Решение задач прикладного программирования. Оформление разработанных алгоритмов в виде графических схем. Написание программ с использованием подпрограмм, их отладка. Блок-схемы и листинг программ. Наборы тестов для отладки разработанных программ.
курсовая работа [575,8 K], добавлен 06.12.2013Теоретические и практические аспекты решения прикладных задач с применением функций и процедур структурного (модульного) программирования. Особенности разработки схемы алгоритма и программы для вычисления массива z на языке Turbo Pascal 7.0, их описание.
курсовая работа [241,7 K], добавлен 11.12.2009Особенности программирования на языке Паскаль в среде Турбо Паскаль. Линейные алгоритмы, процедуры и функции. Структура данных: массивы, строки, записи. Модульное программирование, прямая и косвенная рекурсия. Бинарный поиск, организация списков.
отчет по практике [913,8 K], добавлен 21.07.2012Обработка сложных структур данных как одна из наиболее распространенных возможностей применения языка программирования С++. Преимущества использования подпрограмм. Передача параметров, одномерных и двумерных массивов, функции и их возврат в функцию.
курсовая работа [1,1 M], добавлен 24.11.2013Программирование на алгоритмическом языке Turbo Pascal на примере разработки алгоритма и программы расчета временной функции. Выбор, обоснование методов решения. Схемы алгоритмов основной программы и подпрограмм. Распечатка исходных и вычисленных величин.
реферат [154,8 K], добавлен 15.03.2012Различные способы обработки информации и программирование в среде Pascal. История создания языка. Блок схема с использованием заголовка функций задания. Описание подпрограмм. Сущность структурного программирования в аспекте написания алгоритмов программ.
курсовая работа [331,9 K], добавлен 18.01.2016Создание схем алгоритмов и составление программы на языке Pascal для вычисления значений заданных функций. Сущность и порядок нахождения значения определенного интеграла. Анализ работы подпрограмм. Разработка тестов для проверки правильности алгоритмов.
контрольная работа [831,0 K], добавлен 24.11.2013Характеристика основных способов вычисления определителя матрицы с помощью языка программирования СИ. Выбор инструментальных и аппаратных средств, его обоснование. Общая структура и принцип действия программного модуля, описание блок-схем алгоритмов.
курсовая работа [262,4 K], добавлен 08.06.2010Программный комплекс для разработки программы транслирующей программу с языка Pascal на язык С++. Построение логической и арифметической модели решения. Разработка компилятора для программы. Методы отладки программы и создание для нее документации.
курсовая работа [742,6 K], добавлен 03.07.2011Изучение некоторых аспектов языка Ассемблера и ЭВМ в целом. Построение алгоритмов решения поставленной задачи на языках программирования Си, Ассемблер УМ и IBM PC. Составление блок-схем решений и написание программ на каждом из перечисленных языков.
курсовая работа [691,5 K], добавлен 20.10.2014Изучение функций и возможностей среды разработки языка программирования Pascal. Рассмотрение работы с одномерными и двумерными массивами, со строками и числами. Математическая формулировка задач. Разработка алгоритмов, описание структуры программ.
курсовая работа [879,8 K], добавлен 11.02.2016Предмет исследования – современные методы разработки программ таких, как объектно-ориентированное программирование и визуальное проектирование, а также структурное и модульное программирование. C++ - универсальный язык программирования. Ключевые понятия.
курсовая работа [1,1 M], добавлен 10.01.2009Исследование особенностей разработки линейных алгоритмов и их реализации в среде Delphi. Составление тестов для проверки программы. Характеристика основных элементов интерфейса, компонентов, значения их свойств. Построение графической схемы алгоритма.
лабораторная работа [316,6 K], добавлен 08.11.2012Особенности разработки и реализации обучающей программы и схемы алгоритмов на языке программирования С++. Понятие равномерной и неравномерной дискретизации. Представление информации (составление кода) в виде таблицы перекодировки или многочлена.
курсовая работа [704,6 K], добавлен 06.03.2013Характеристика предприятия ТОО "Com Sales Group". Составление программ на языке программирования. Составление алгоритмов, разработка численных методов решения задач. Методы откладки программ. Анализ технологии машинной обработки экономической информации.
отчет по практике [1,3 M], добавлен 19.04.2016Схема разбора арифметического и логического выражения. Внешняя спецификация конвертора и алгоритм перевода программ на языке Паскаль в текст на языке Си. Назначение подпрограмм, особенности констант и переменных. Код программы и ее тестирование.
курсовая работа [567,5 K], добавлен 03.07.2011Структурное программирование, схема алгоритма. Программа на языке Си для int, float. Подпрограмма ввода и вывода целых чисел на Ассемблере IBM. Тестирование и отладка, инструкция пользователя. Язык программирования Си (для int и float), этапы трансляции.
курсовая работа [1,5 M], добавлен 21.10.2014Методы реализации алгоритмов сортировки и алгоритмов поиска на языках программирования высокого уровня. Программирование алгоритмов сортировки и поиска в рамках создаваемого программного средства на языке Delphi. Создание руководства пользователя.
курсовая работа [1,7 M], добавлен 16.04.2012Составление алгоритмов и программ для вычисления значений неизвестных: программирование формул; операторы ввода и вывода; условный оператор; цикл с предусловием и с постусловием, с заданным числом повторений; графические средства; тестирование программы.
курсовая работа [1,5 M], добавлен 13.03.2011Проектирование игры "Жизнь" и ее реализация в среде разработки Visual Studio 2010, версия .Net Framework 4.0. Особенности языка программирования C#, основных принципов ООП на языке C#. Проектирование пользовательского интерфейса. Описание алгоритмов.
курсовая работа [990,0 K], добавлен 18.04.2013