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

}


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


 

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

71086. Варочное оборудование 53.5 KB
  Режим 3 котлы типа КЭ доведение содержимого варочного сосуда до кипения на полной мощности затем автоматическое переключение на 1 6 часть мощности а в случае снижения давления в пароводяной рубашке до нижнего заданного предела переключение на 1 2 мощности нагрева. В настоящее время на предприятиях...
71087. Жарочно-пекарное оборудование 47 KB
  Сковороды фритюрницы жаровни жарочные и пекарные шкафы грили печь конвейерная жарочная ПКЖ печь шашлычная аппараты непрерывного действия предназначены для жарения и выпечки. Классификация Жарочные шкафы предназначены для жарки мясных и рыбных продуктов а также для запекания овощных и крупяных блюд.
71088. Водогрейное оборудование 57 KB
  Поэтому на предприятиях общественного питания требуется большое количество горячей воды и кипятка что вызывает необходимость использования различных видов водогрейного оборудования. Поэтому на предприятиях общественного питания требуется большое количество горячей воды и кипятка что вызывает необходимость...
71089. Оборудование для раздачи пищи. Мармиты 51 KB
  Оборудование для раздачи пищи на предприятиях общественного питания предназначено для кратковременного хранения и демонстрации продукции, хранении столовой посуды, комплектации обедов и их отпуска потребителям. Разнообразие вырабатываемой продукции (первые, вторые блюда, закуски, напитки) различия их по форме...
71090. Основы холодильной техники. Компрессоры 50.5 KB
  Холодильной машиной называется совокупность устройств необходимых для непрерывного отвода тепла от охлаждаемой среды при низкой температуре и передаче его окружающей среде при высокой температуре. Существующие холодильные машины подразделяются на две группы: компрессорные: работающие с затратой механической энергии...
71091. Контрольно-кассовые машины на предприятиях общественного питания 37 KB
  Устройство ввода представляет собой клавиши для набора сумм, номера счетчика секции, номера и пароля кассира, клавиши сброса коррекции аннулирования предварительного и общего итога, программирования заголовка чека. Устройство индикации состоит из двух индикаторов для кассира и покупателя и показывает суммы...
71092. Весоизмерительное оборудование 53.5 KB
  Электромеханические весы работают на основе преобразования механического воздействия силы тяжести взвешиваемого груза в пропорциональный ей электрический сигнал который выражается цифровым индексом измеряемой массы. Самым распространенным видом электронных весов являются электронно-тензометрические весы...
71093. Охрана труда. Правовые основы охраны труда 66.5 KB
  В условиях становления рыночной экономики и социальной нестабильности обостряется проблема соблюдения прав работников на нормальные условия и охрану труда. В Российской Федерации в последние годы практически во всех отраслях народного хозяйства наблюдалась тенденция ухудшения условий труда, увеличения числа аварий...
71094. Отчет о финансовых результатах 59.42 KB
  Наиболее значимой отчетной формой о финансовых результатах отчетного периода является отчет о финансовых результатах (прибылях и убытках). Формирование и представление указанных показателей в бухгалтерской отчетности может осуществляться различными способами.