Автор работы: Пользователь скрыл имя, 22 Сентября 2013 в 19:55, курсовая работа
Аппроксимация (от лат. approximated - приближаюсь) – замена одних математических объектов другими, каким-то образом близкими к исходным. Аппроксимация разрешает исследовать числовые характеристики и качественные свойства объекта, сводя задачу к изучению более простых или более удобных объектов (например, таких, характеристики которых легко вычисляются или свойства которых уже известны). В теории чисел изучаются диофантовы приближения, в частности приближения иррациональных чисел рациональными. В геометрии и топологии рассматриваются аппроксимации кривых, поверхностей, пространств и отображений. Некоторые разделы математики целиком посвящены аппроксимации, например приближение функций.
Введение ………………………………………………………………………………………………………………………………………… 3
Глава I. Теоретическая часть
Постановка цели и задачи проекта …………………………………………………………… 5
Представление исходных данных …………………………………………………………………. 5
Описание критерия аппроксимации и способы его минимизации ... 6
Описание метода определения и вычисления параметров аппроксимирующей функции ………………………………………………………………………………………… 7
Глава II. Вычисления параметров аппроксимирующей функции
Исходные данные ………………………………………………………………………………………………..… 8
Критерий аппроксимации и условия его минимума …………………………… 8
Формирование системы нормальных уравнений …………………………………. 10
Вычисление коэффициентов системы нормальных уравнений ……. 10
Решение системы нормальных уравнений …………………………………………….... 11
Предварительная оценка погрешности ручного счета …………….…… 13
Глава III. Алгоритмизация ………………………………………………………………………………………………….... 14
Глава IV. Исходный текст программы ……………………………………………………………………...…… 14
Глава V. Результаты контрольного расчета ……………………………………………………..…… 17
Приложение А. Основной алгоритм ………………………………………………………………………………... 18
Приложение Б. Алгоритм решения системы уравнений …………………………………..…. 20
Приложение В. График ………………………………………………………………………………………………………….. 22
Заключение ………………………………………………………………………………………………………………………………... 24
Список использованных источников …………………………………………………………………………..… 25
Вычтем 2 - ую строку из всех строк, которые находятся выше нее. Это действие не противоречит элементарным преобразованиям матрицы.
|
Приведем все коэффициенты на главной диагонали матрицы к 1. Поделим каждую строку матрицы на коэффициент этой строки находящийся на главной диагонали, если он не равен 1.
|
Ответ.
Числа получившиеся правее единичной матрицы и будут решением Вашей системы уравнений.
x 1 = 0.3 |
x 2 = 1.15 |
x 3 = 2.56 |
Зная все неизвестные, вычислим аппроксимирующую функцию:
φ1 (х1) = 0,34*1+1,15*0,0998+2,56*0,904 = 2,768
φ2 (х2) = 0,34*1+1,15*0,717+2,56*0,449 = 2,313
φ1 (х1) = 0,34+1,107+0,696 = 2,143
φ1 (х1) = 0,34+0,992+0,312 = 1,644
φ1 (х1) = 0,34+0,047+0,115 = 0,502
Теперь можно подсчитать ошибку аппроксимации:
δi = уi – φi (хi)
δ1 =2,5 – 2,768 = 0,268; δ2 = 2,9 – 2,313 = 0,587;
δ3 = 2-2,143 = -0,143; δ4 = 1,2 – 1,644 =0,444
δ5 = 0,6 – 0,502 = 0,098
Теперь можно рассчитать уже критерий:
I = (0,268)2
+(0,587)2+(-0,143)2+(0,444)2+(
Текст программы:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define eps 0.01f
#define m 5
#define n 3
int Gauss(float A[n][n], float B[n], float *C)
{
int i, j, k;
float M[3][3], t;
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
M[i][j] = A[i][j];
}
}
for(i = 0; i < n; i++)
{
C[i] = B[i];
}
for(i = 0; i < n; i++)
{
j = i;
while(!M[j][i])
{
if(j++ >= n) return 1; //det = 0
}
for(k = 0; k < n; k++)
{
t = M[i][k];
M[i][k] = M[j][k];
M[j][k] = t;
}
t = C[i];
C[i] = C[j];
C[j] = t;
for(j = 0; j < n; j++)
{
if(j == i) continue;
t = M[j][i] / M[i][i];
for(k = i + 1; k < n; k++)
{
M[j][k] -= M[i][k] * t;
}
C[j] -= C[i] * t;
}
}
for(i = 0; i < n; i++)
{
C[i] /= M[i][i];
}
return 0;
}
int PrintMatrix(float *M, char *Name, int x, int y)
{
int i, j, AdrIJ = 0;
printf("Array %s:\n", Name);
for(i = 0; i < y; i++)
{
for(j = 0; j < x; j++)
{
printf("%5.3f\t", M[AdrIJ++]);
}
putchar(10);
}
putchar(10);
return 0;
}
int main()
{
int i,j,k, Imax;
float X[m],Y[m],F[n][m],FI[m],x,A[n]
printf("vvedite:\n");
for (i=0; i<m; i++)
{
printf("X[%i]= ",i+1);
scanf("%f",&X[i]);
printf("Y[%i]= ",i+1);
scanf("%f",&Y[i]);
}
for (i=0; i<m; i++)
{
x=X[i];
F[0][i]=1;
F[1][i]=sin(x);
F[2][i]=exp(-x);
}
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
A[i][j] = 0;
for (k=0; k<m; k++)
{
A[i][j] += F[i][k] * F[j][k];
}
}
}
for(k=0; k<n; k++)
{
B[k]=0;
for (i=0; i<m; i++)
{
B[k]=B[k]+Y[i]*F[k][i];
}
}
Gauss(A, B, C);
for (i=0; i<m; i++)
{
x = X[i];
FI[i] = C[0] * (1) + C[1] * sin(x) + C[2] * (exp(-x));
D[i]=fabs(Y[i]-FI[i]);
}
Dmax=D[0];
Imax=0;
for (i=0; i<m; i++)
{
if (fabs(D[i])>fabs(Dmax))
{
Dmax=D[i];
Imax=i;
}
}
I=0;
for (i=0; i<m; i++)
{
I += D[i]*D[i];
}
PrintMatrix(*A, "A", n, n);
PrintMatrix(B, "B", n, 1);
PrintMatrix(C, "C", n, 1);
PrintMatrix(FI, "FI", m, 1);
PrintMatrix(D, "D", m, 1);
printf("Dmax = %5.3f\nImax = %i\n", Dmax, Imax+1);
printf("I = %5.4f\n", I);
system ("pause");
return 0;
}
Глава V. Результаты контрольного расчета.
Заключение
В ходе
выполнения курсовой работы были проведены
расчеты, которые показали, что аппроксимация
заданной функции произошла успешно,
без критических отклонений. По расчетным
значениям можно проводить
Курсовой проект выполнен в полном объеме в соответствии данному техническому заданию.
Список использованных источников
Информация о работе Аппроксимация функции методом наименьших квадратов