Аппроксимация функции методом наименьших квадратов

Автор работы: Пользователь скрыл имя, 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

Вложенные файлы: 1 файл

КУРСОВАЯ РАБОТА ПО АППРОКСИМАЦИИ.doc

— 265.00 Кб (Скачать файл)

 

Вычтем 2 - ую строку из всех строк, которые находятся выше нее. Это действие не противоречит элементарным преобразованиям матрицы.

 

5


0


0


1.51


0


0.93


0


1.07


0


0


0.43


1.1



 

 

Приведем все коэффициенты на главной диагонали матрицы к 1. Поделим каждую строку матрицы на коэффициент этой строки находящийся на главной диагонали, если он не равен 1.

 

1


0


0


0.3


0


1


0


1.15


0


0


1


2.56



 

 
 

Ответ.

Числа получившиеся правее единичной матрицы и будут решением Вашей системы уравнений.

1  =   0.3

2  =   1.15

3  =   2.56


 

 

 

 

    1. Предварительная оценка погрешности ручного счета 

 

         Зная все неизвестные, вычислим аппроксимирующую функцию:

   

φ11) = 0,34*1+1,15*0,0998+2,56*0,904 = 2,768

φ22) = 0,34*1+1,15*0,717+2,56*0,449 = 2,313

φ11) = 0,34+1,107+0,696 = 2,143

φ11) = 0,34+0,992+0,312 = 1,644

φ11) = 0,34+0,047+0,115 = 0,502

Теперь можно подсчитать ошибку аппроксимации:

δi = уi – φii)

δ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+(0,098) = 0,071+0,344+0,02+0,197+0,009 = 0,641

 

 

Текст программы:

 

#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][n],B[n],C[n],D[m],Dmax,I;

    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. Результаты контрольного расчета.

 

 

 

 

 

 

 

Заключение 

 

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

Курсовой  проект выполнен в полном объеме в  соответствии данному техническому заданию.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Список  использованных источников

 

  1. Методические разработки по дисциплине «вычислительная математика и программирование»
  2. Вешев В.А., Доброславский С.В., Розе С.Н. Высшая математика. Производные. Методические указания
  3. Данко П.Е., Попов А.Г., Кожевникова Т.Я. Высшая математика           в упражнениях и задачах. Том 1 and 2

 


Информация о работе Аппроксимация функции методом наименьших квадратов