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

}


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


 

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

43479. Сестринский процесс при остром гастрите 787.25 KB
  Практически половина населения Земли страдает заболеваниями желудочно-кишечного тракта. Статистика убедительно показывает, в структуре желудочно-кишечных заболеваний гастрит составляет более 80%. Сегодня этим серьёзным заболеванием страдают не только взрослые, но и дети школьного возраста.
43480. Анализ финансового состояния предприятия. Методические указания 429.5 KB
  Результаты анализа оформляются в виде аналитической записки которая как правило включает следующие основные разделы: общая оценка динамики и структуры статей бухгалтерского баланса; анализ финансового состояния и платежеспособности по данным баланса; анализ ликвидности баланса; анализ финансовых коэффициентов; определение неудовлетворительной структуры баланса неплатежеспособных предприятий. Общая оценка динамики и структуры статей бухгалтерского баланса Исходную информацию для проведения внешнего анализа финансового...
43481. ОПРЕДЕЛЕНИЕ ПАРАМЕТРОВ ПРИРОДНОГО ГАЗА В МАГИСТРАЛЬНОМ ТРУБОПРОВОДЕ И РАССТОЯНИЯ МЕЖДУ КОМПРЕССОРНЫМИ СТАНЦИЯМИ 120.5 KB
  ОПРЕДЕЛЕНИЕ ПАРАМЕТРОВ ПРИРОДНОГО ГАЗА В МАГИСТРАЛЬНОМ ТРУБОПРОВОДЕ И РАССТОЯНИЯ МЕЖДУ КОМПРЕССОРНЫМИ СТАНЦИЯМИ Постановка задачи Объект исследования термодинамическая система участок газопровода между двумя компрессорными станциями по которому осуществляется подача природного газа рис. Необходимо определить изменение термодинамических параметров газа р Т ρ w по длине трубопровода.1 Принципиальная схема газопровода Исходные данные: D диаметр трубопровода м; начальная скорость течения газа м с; р1 давление...
43482. Бухгалтерский учет. Методические указания 329.5 KB
  Золотухин Приводятся методические указания и требования к выполнению курсовой работы и подготовке к экзаменам по дисциплине Бухгалтерский финансовый учет для студентов всех форм обучения специальности 080109Бухгалтерский учет анализ и аудит . Представлен перечень теоретических вопросов по вариантам и заданий для написания курсовой работы и подготовке к экзаменам исходные данные списки рекомендуемой литературы и Интернетсайтов. Курсовая работа включает в себя исходные данные и методические указания по выполнению курсовой работы.
43484. Расчет усилителя звуковой частоты на основе микросхемы TDA 2009 350 KB
  Для разработки данного усилителя мощности следует произвести предварительный расчёт и оценить количество и тип основных элементов. После этого следует выбрать интегральную микросхему и, при необходимости, принципиальную схему предварительного усилительного каскада.
43485. Организация работы вагоносборочного участка по ремонту цистерн для перевозки спирта 466 KB
  Особое внимание уделяется оптимизации межремонтных периодов и сроков службы вагонов повышению качества ремонтных работ внедрению новых и совершенствование существующих форм организации производства созданию поточноконвейерных линий по ремонту вагонов и их отдельных частей. Большое внимание уделяется развитию технической базы для текущего ремонта вагонов. Создаются крупные механизированные пункты подготовки вагонов к перевозкам совершенствуется работа пунктов технического обслуживания расположенных на сортировочных и участковых станциях....
43486. Оптимизация портфеля ценных бумаг 609.5 KB
  Краткое описание задачи Портфель ценных бумаг. При инвестировании в ценные бумаги обычно инвестор сталкивается с различными целями инвестирования. Поэтому лицу осуществляемому инвестиции на рынке ценных бумаг сложно выбрать объект инвестирования так как вложения в отдельные активы имеют высокую доходность а соответственно и высокий риск либо относительно невысокий риск и низкую доходность. Для достижения оптимального соотношения доходности и риска инвесторы формируют портфель ценных бумаг содержащий в себе различные виды ценных...