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();

}


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


 

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

8069. Цель воспитания и задача воспитания. Реализация целей воспитания в деятельности работника в сфере культуры 25.24 KB
  Цель воспитания и задача воспитания. Реализация целей воспитания в деятельности работника в сфере культуры Одной из фундаментальных проблем в педагогической науке является проблема целеполагания. Существуют разные подходы к определению цели воспитан...
8070. Понятие и характеристика общих закономерностей воспитательного процесса 27.11 KB
  Понятие и характеристика общих закономерностей воспитательного процесса Эффективность воспитания зависит от следующих факторов: От сложившихся воспитательных отношений. Воздействие на ребенка осуществляется через его отношение к окружающему, в...
8071. Понятие принцип воспитания. Характеристика основных принципов воспитания 31.02 KB
  Понятие принцип воспитания. Характеристика основных принципов воспитания Принципы воспитательного процесса (принципы воспитания) - это общие исходные положения, в которых выражены основные требования к содержанию, методам, организации воспитате...
8072. Финансовая устойчивость организации на примере ОАО КАМАЗ 138.4 KB
  Введение Финансовая устойчивость - составная часть общей устойчивости предприятия, сбалансированность финансовых потоков, наличие средств, позволяющих организации поддерживать свою деятельность в течение определенного периода времени...
8074. Разработка бизнес-плана горнолыжного курорта в Приэльбрусье 364.5 KB
  Разработка бизнес-плана горнолыжного курорта в Приэльбрусье Введение Каждый предприниматель, начиная свою деятельность, должен ясно представлять потребность на перспективу в финансовых, материальных, трудовых и интеллектуальных ресурсах, источники и...
8075. Бізнес-план для діяльності виробничого підприємства ТОВ КРУЧА 692.5 KB
  ВСТУП Актуальність теми дослідження. З кожним роком зростає роль економічного аналізу господарської діяльності підприємств як складової системи економічної інформації та управління. Управління підприємством вимагає систематичної, точної і достовірно...
8076. Бизнес план компьютерного клуба интернет кафе 281.5 KB
  Введение. Бизнес-план - это документ, отражающий основные стороны деятельности предприятия: производственные, коммерческие, социальные. Бизнес-план составляется на два-три года с разбивкой по годам, а первый год по месяцам, регулярно корректиру...
8077. Обгрунутвання бізнес плану присвячений розробці випуску нового виду продукції підприємства ЗАТ Мясокомбінат Товстун 352.5 KB
  ВСТУП Вирішивши зайнятися бізнесом, підприємець повинен ретельно спланувати його організацію. Мова йде про бізнес-плани, з яких у всьому світі прийнято починати будь-яке комерційне захід. В умовах ринку подібні плани необхідні всім: банкірам і потен...