51485

ИНТЕРПОЛЯЦИЯ

Лабораторная работа

Информатика, кибернетика и программирование

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

Русский

2014-02-11

114 KB

1 чел.

Министерство образования и науки Украины

Приазовский государственный технический университет

Факультет информационных технологий

Кафедра автоматизации технологических процессов и производств

ОТЧЕТ

по лабораторной работе № 3

«ИНТЕРПОЛЯЦИЯ»

по дисциплине «Адаптивные системы АУТП»

Выполнил

студ. гр. КИТ-11-М    (подпись, дата)   Бабаенко Д.А.

Принял

профессор     (подпись, дата)   Зайцев В.С.

Мариуполь, 2011


Лабораторная работа № 3

Цель работы: изучить способы интерполяции функций, реализовать метод наименьших квадратов для интерполяции заданной выборки.

Ход работы:

Соответственно номеру варианта имеем выборку чисел:

X

1

2

3

4

5

6

7

Y

1.92

2.19

1.67

2.20

2.27

2.21

2.40

Задание 1:  занесем в окно MatLab следующий код программы:

%  interpolation

% method of splines

x=[1 2 3 4 5 6 7];

y=[1.92 2.19 1.67 2.20 2.27 2.21 2.40];

plot(x,y,'ko')

xi=[x(1):0.01:x(length(x))];

ynear=interp1(x,y,xi,'nearest');

yline=interp1(x,y,xi,'linear');

yspline=interp1(x,y,xi,'spline');

hold on

plot(xi,ynear,'k',xi,yline','k:',xi,yspline,'k-.')

title('different ways of interpolation of functions')

xlabel('\itx')

ylabel('\ity')

legend('tabulare function', 'nearest', 'linear', 'spline',4)

p4=polyfit(x,y,4)

p5=polyfit(x,y,5)

p6=polyfit(x,y,6)

Результатом работы будут следующие графики:

Рисунок 1 – Результат выполнения задания 1


Задание 2:  занесем в окно
MatLab следующий код программы:

%  interpolation

d=[1 2 3 4 5 6 7];

g=[1.92 2.19 1.67 2.20 2.27 2.21 2.40];

p1=polyfit(d,g,1);

p2=polyfit(d,g,2)

p3=polyfit(d,g,3);

p4=polyfit(d,g,4)

p5=polyfit(d,g,5);

p6=polyfit(d,g,6);

x=(0.1:0.02:7);

v=0.0117*x.^2-0.0190*x+1.9657;

s=-0.0027*x.^4+0.0385*x.^3-0.1708*x.^2+0.2973*x+1.8057;

hold on;

plot(x,v,x,s,d,g,'ko')

Результатом работы будут следующие графики:

Рисунок 2 – Результат выполнения задания 2


Реализовав алгоритм интерполяции на языке С++, получаем следующие результаты ее работы:

Рисунок 3 – Результат работы программы

Как видно на рисунке, результаты расчетов Мatlab и программы совпадают. Текст программы приведен в приложении 1.


Приложение 1

#include <stdio.h>

#include <conio.h>

#include <process.h>

#include <math.h>

float *a, *b, *x, *y, **sums;

int N, K;

//N - number of data points

//K - polinom power

//K<=N

char filename[256];

FILE* InFile=NULL;

void count_num_lines(){

  //count number of lines in input file - number of equations

  int nelf=0;       //non empty line flag

  do{

      nelf = 0;

      while(fgetc(InFile)!='\n' && !feof(InFile)) nelf=1;

      if(nelf) N++;

  }while(!feof(InFile));

}

void freematrix(){

  //free memory for matrixes

  int i;

  for(i=0; i<K+1; i++){

      delete [] sums[i];

  }

  delete [] a;

  delete [] b;

  delete [] x;

  delete [] y;

  delete [] sums;

}

void allocmatrix(){

  //allocate memory for matrixes

  int i,j,k;

  a = new float[K+1];

  b = new float[K+1];

  x = new float[N];

  y = new float[N];

  sums = new float*[K+1];

  if(x==NULL || y==NULL || a==NULL || sums==NULL){

      printf("\nNot enough memory to allocate. N=%d, K=%d\n", N, K);

      exit(-1);

  }

  for(i=0; i<K+1; i++){

      sums[i] = new float[K+1];

      if(sums[i]==NULL){

   printf("\nNot enough memory to allocate for %d equations.\n", K+1);

      }

  }

  for(i=0; i<K+1; i++){

      a[i]=0;

      b[i]=0;

      for(j=0; j<K+1; j++){

   sums[i][j] = 0;

      }

  }

  for(k=0; k<N; k++){

      x[k]=0;

      y[k]=0;

  }

}

void readmatrix(){

  int i=0,j=0, k=0;

  //read x, y matrixes from input file

  for(k=0; k<N; k++){

      fscanf(InFile, "%f", &x[k]);

      fscanf(InFile, "%f", &y[k]);

  }

  //init square sums matrix

  for(i=0; i<K+1; i++){

      for(j=0; j<K+1; j++){

   sums[i][j] = 0;

   for(k=0; k<N; k++){

       sums[i][j] += pow(x[k], i+j);

   }

      }

  }

  //init free coefficients column

  for(i=0; i<K+1; i++){

      for(k=0; k<N; k++){

   b[i] += pow(x[k], i) * y[k];

      }

  }

}

void printresult(){

  //print polynom parameters

  int i=0;

  printf("\n");

  for(i=0; i<K+1; i++){

      printf("a[%d] = %f\n", i, a[i]);

  }

}

/*void testsolve(){

  //test that ax=y

  FILE* OutFile;

  int i=0, j=0;

  float sum, s, begin, end, step;

  begin = x[0][1];

  end = x[N-1][1];

  step = (end-begin)/20;

  printf("\n");

  for(i=0; i<N; i++){

      sum = 0;

      for(j=0; j<N; j++){

   sum += x[i][j]*a[j];

      }

      printf("%f\t%f\n", s, y[i]);

  }

  OutFile = fopen("test.txt", "wt");

  for(s = begin; s<=end; s+=step){

      sum = 0;

      for(j=0; j<N; j++){

   sum += pow(s, j)*a[j];

      }

      fprintf(OutFile, "%f\t%f\n", s, sum);

  }

  fclose(OutFile);

}*/

/*void printresult(){

  int i=0;

  printf("\n");

  printf("Result\n");

  for(i=0; i<N; i++){

      printf("A%d = %f\n", i, a[i]);

  }

}*/

void diagonal(){

  int i, j, k;

  float temp=0;

  for(i=0; i<K+1; i++){

      if(sums[i][i]==0){

   for(j=0; j<K+1; j++){

       if(j==i) continue;

       if(sums[j][i] !=0 && sums[i][j]!=0){

    for(k=0; k<K+1; k++){

        temp = sums[j][k];

        sums[j][k] = sums[i][k];

        sums[i][k] = temp;

    }

    temp = b[j];

    b[j] = b[i];

    b[i] = temp;

    break;

       }

   }

      }

  }

}

void cls(){

  for(int i=0; i<25; i++) printf("\n");

}

void main(){

  int i=0,j=0, k=0;

  cls();

  do{

      printf("\nInput filename: ");

      scanf("%s", filename);

      InFile = fopen(filename, "rt");

  }while(InFile==NULL);

  count_num_lines();

  printf("\nNumber of points: N=%d", N);

  do{

      printf("\nInput power of approximation polinom K<N: ");

      scanf("%d", &K);

  }while(K>=N);

  allocmatrix();

  rewind(InFile);

  //read data from file

  readmatrix();

  //check if there are 0 on main diagonal and exchange rows in that case

  diagonal();

  fclose(InFile);

  //printmatrix();

  //process rows

  for(k=0; k<K+1; k++){

      for(i=k+1; i<K+1; i++){

   if(sums[k][k]==0){

       printf("\nSolution is not exist.\n");

       return;

   }

   float M = sums[i][k] / sums[k][k];

   for(j=k; j<K+1; j++){

       sums[i][j] -= M * sums[k][j];

   }

   b[i] -= M*b[k];

      }

  }

  //printmatrix();

  for(i=(K+1)-1; i>=0; i--){

      float s = 0;

      for(j = i; j<K+1; j++){

   s = s + sums[i][j]*a[j];

      }

      a[i] = (b[i] - s) / sums[i][i];

  }

  //InFile = fopen(filename, "rt");

  //readmatrix();

  //fclose(InFile);

  //printmatrix();

  //testsolve();

  printresult();

  getch();

  freematrix();

}


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


 

А также другие работы, которые могут Вас заинтересовать

78870. Феноменологическая программа исследования знания 32.5 KB
  Феномен и логос учение о феноменах явлениях это обозначение философского движения появившегося в начале 20 века а также своеобразной практики осмысления пытающейся проникнуть к истокам человеческого опыта и познания. Ее отличительными чертами являются: нацеленность на вскрытие и приведение к непосредственной очевидности тех пластов нашего опыта которые в обыденной жизни остаются незримыми зачастую будучи основанием зримых; экспликация и истолкование смыслового содержания этого опыта и его сущностных структур; преимущественно...
78871. Герменевтический подход в социально-гуманитарном познании 29 KB
  Рикер понимает теорию операций понимания в их соотношении с интерпретацией текстов; слово герменевтика означает не что иное как последовательное осуществление интерпретации. Таким образом нужно установить соотношение между понятиями интерпретации и понимания. Цель понимания совершить переход от этого выражения к тому что является основной интенцией знака и выйти вовне через выражение. Согласно Дильтею виднейшему после Шлейермахера теоретику герменевтики операция понимания становится возможной благодаря способности которой наделено...
78872. Марксистский подход к исследованию социальной реальности 31.5 KB
  Базис или способ производства материальных благ или экономическая формация = производительные силы производственные отношения. Производительные силы ресурсы и средства обеспечивающие процесс производства. Производственные отношения выражается в различных формах собственности на средства производства. Классы в узком смысле слова социальные группы различающиеся по отношению к средствам производства.
78873. Образ науки в постмодернизме 13.99 KB
  Постмодернизм эту проблему пытается решить посвоему быть может осознавая себя не как конец философии а как переходное состояние между закатом и рассветом. На первый план в этой философии выходят проблемы языка новой субъективности иронии культуры цитат и кавычек. Понимание мира как хаоса сопряжено в философии постмодернизма с отказом от установки на целостность закономерность мира. Картина реальности в философии постмодерна состоит из симулякров не имеющих оснований во внешней реальности симулякры точные копии оригинал...
78874. Роль социально-гуманитарных наук в процессе соц трансформаций 13.58 KB
  Напротив ей присуща роль разрушителя мнимого всезнания и фиктивной уверенности. Используя науку по образу обыденного сознания мир с ее помощью заколдовывается вновь. Задача же социального теоретика на сегодняшний день состоит не только в производстве нового знания доставляющего новые возможности но и в разрушении фиктивных ожиданий обыденного сознания от сферы управления. Только разрушая мнимое всезнание наука может осуществить свою функцию производства нового знания.
78875. Жизнь как кактегория наук об обществе и культуре 13.83 KB
  Для Дильтея философия это рефлексия жизни на самое себя а переживание чувство жизни жизненный опыт жизненное отношение обозначают внутреннее восприятие нашей души самодостоверность внутреннего опыта единственный прочный и неприкосновенный фундамент. Он руководствовался главным принципом познать жизнь из нее самой и стремился представить мышление и познание как внутренне присущие жизни полагая что в ней самой формируются объективные структуры и связи с помощью которых осуществляется ее саморефлексия. Не менее значимым...
78876. Проблема истины в социально-гуманитарных науках 13.21 KB
  Проблема истины в социально-гуманитарных науках. При рассмотрении проблемы истины важно уяснить специфику ее классической неклассической и пост-неклассической трактовки а также особенности современного понимания ряда частных вопросов: ситуативность и объективный характер истин социально-гуманитарных наук; их взаимосвязь с социальной реальностью; экзистенциально-антропологический подход к истине в гуманитарном знании. Классическая концепция во-первых понимает под истиной соответствие наших знаний объекту; во-вторых предполагает возможность...
78877. Соц философия и ее методологическое значение для соц-гум наук 13.38 KB
  Соц философия и ее методологическое значение для соцгум наук Социальная философия составная часть любой философской системы важнейшая философская дисциплина которая оказывала огромное влияние на эволюцию общественного сознания и социальной практики на всех этапах исторического развития общества. Значение социальной философии как общей методологии познания общественных явлений определяется следующими тремя основными функциями: вопервых социальная философия ориентирует познание с субъектной стороны то есть ценностей потребностей целей...
78878. Природа ценности и их роль в социально-гуманитарных науках 14.19 KB
  Риккертом теория ценностей которого включает ряд моментов значимых для понимания ценностей в науках о культуре и историческом знании. Философ исходит из того что ценности это самостоятельное царство соответственно мир состоит не из субъектов и объектов но из действительности как изначальной целостности человеческой жизни и ценностей. Признание самостоятельного мира ценностей это метафорически выраженное стремление понять утвердить объективную внесубъектную природу ценностей способ выражения его независимости от обыденной...