Лекция Интерполация и прекарване на крива през точки



Дата12.03.2017
Размер36.44 Kb.
#16642
ТипЛекция
    Навигация на страницата:
  • Зад.3.1



Лекция 6. Интерполация и прекарване на крива през точки


Известно е, че през три точки може да се прокара крива (полином) от втора степен. Има много начини да се определи този квадратичен полином. По метода на Лагранж полинома се записва по следния начин:



(1)


Тук (x1,y1), (x2,y2), (x3,y3) са точките, през които трябва да мине кривата.

Ще създадем функция interpf( ), която да изчислява точките на интерполиращата крива по метода на Лагранж (1), минаваща през три зададени точки. Реализацията на функцията може да се планира по следния начин:



  • Входни стойности: x=[x1, x2, x3], y=[ y1, y2 , y3], xi

  • Изходни стойности: yi

  • Задача: функцията да изчислява зависимоста yi=f(xi) използвайки полинома на Лагранж.

Записваме функцията в отделен m-файл със същото име като името на функцията т.е. interpf.m.

function yi=interpf(xi,x,y)

yi=y(1)*(xi-x(2))*(xi-x(3))/((x(1)-x(2))*(x(1)-x(3)))...

+y(2)*(xi-x(1))*(xi-x(3))/((x(2)-x(1))*(x(2)-x(3)))...

+y(3)*(xi-x(1))*(xi-x(2))/((x(3)-x(1))*(x(3)-x(2)));

return;


Сега можем да напишем програма, която да използва функцията interpf, като използваме следния план:

  • Потребителят задава точките (x1, y1), (x2, y2), (x3, y3), които трябва да се интерполират с квадратичен полином.

  • Определяме границите на интерполационната крива (от xmin до xmax).

  • Определяме стойностите на yi за желаните интерполационни точки xi като използваме функцията interpf.

  • Построяваме графика на получената интерполационна крива (xi, yi) като маркираме отделно трите задаващи точки.

Програмата можем да запишем като m-файл, interp.m, както следва:
% This program interpolates 3 points using Lagrange

clear all; help interp; %clear memory and print header

disp('Enter data points as x,y pairs(e.g.[1 2])');

for i=1:3

temp=input('Enter data point: ');

x(i)=temp(1);

y(i)=temp(2);

end


%Define range of interpolation

xr=input('Enter range of x values as [x_min x_max]:');

nplot=100; % number of points for interpolation curve

% Calculate curve points

for i=1:nplot

xi(i)=xr(1) + (xr(2)-xr(1))*(i-1)/(nplot-1);

yi(i)=interpf(xi(i), x, y);

end


%plot the curve and mark original data points

plot(x,y,'*',xi,yi,'-');

xlabel('x');

ylabel('y');



Зад.1 Наберете кода и изпълнете програмата за прекарване на крива през три точки. Модифицирайте програмат така, че броя на точките да се задава от клавиатурата.

Сега ще разгледаме по-общо същия проблем. Нека имаме набор от експериментални данни, които трябва да опишем с някакъв теоретично обоснован модел. Ако има несъответствие между експерименталните и теоретичните данни това се дължи или на неточно измерени данни т.е.експериментални грешки или на неподходящо избран т.е. неточен модел.

Ако моделът е линейна функция говорим за линейна регресия. Ако моделът е полином от втора степен казваме че данните се напасват с квадратична регресия и т.н. В MATLAB съществува библиотечна функция polyfit(x,y,d), която връща полином от степен d, който най-добре напасва данните дефинирани с векторите x и y. Както вече споменахме в MATLAB полиномите се представят от вектор с координати равни на коефициентите на полинома.

Ще разгледаме следния пример записан във файла fit1.m. Първо генерираме данни на полином от втора степен, към които добавяме случаен шум. След това използваме функцията polyfit за да се открие полинома, който най-добре моделира данните.

%this program interpolates random quadratic data

x=linspace(0,2,256);%generate x-samples

y=1 - x + 0.5*x.^2; %generate quadratic data points

plot(x,y,’.’);

hold on; %retain graph when next graph is added

yy=y+ 0.15*randn(size(x));%add random noise

plot(x,yy,'.k');

hold on;


p=polyfit(x,yy,2);%find the polynomial coefficients

yyy=polyval(p,x);%evaluate p for every x

plot(x,yyy,'-k');

hold off;



Зад.2 Наберете кода и изпълнете програмата за интерполация през случайни точки.

В следващия пример ще разгледаме Гаусов импулс с постоянна компонента. Моделът се описва от формулата:




(6)
Трябва да оптимизираме 4 параметъра, зададени с вектора р както следва: p=(y0,s,a,x0)

Първо ще дефинираме функцията peak, която изчислява несъответствието между набора от данни и модела при фиксирани параметри:

% this file is peak.m

function mf=peak(p,x,y);

yy=p(1)+p(2)*exp(-p(3)*(x-p(4)).^2);

mf=norm(yy-y);

Тук ако x е вектор x=[x1,x2,…xN] Функцията norm(x) връща резултата:


(7)
Сега можем да напишем програма, в която ще генерираме сигнал плюс случаен шум. След това ще оптимизираме параметрите на модела за максимално съгласуване с данните, ще възстановим сигнала и ще го сравним с оригиналния сигнал.

%this file is fit2.m

x=linspace(0,5,1024);

p=[3;1;4;2.5];%this is the vector of the parameters

ys=p(1)+p(2)*exp(-p(3)*(x-p(4)).^2);%this is the signal

yn=ys+0.5*randn(size(x));%add noise to signal

pp=fminsearch('peak',[2.5;0.5;3;2],[],x,yn);%find vector of optimized parameters

yr=pp(1)+pp(2)*exp(-pp(3)*(x-pp(4)).^2);%model with optimized parameters

plot(x,ys,x,yn,'.',x,yr);

Тук е използвана библиотечната оптимизираща функция fminsearch('peak',[2.5;0.5;3;2],[],x,yn), която търси минимума на функцията peak(p,x,yn) при начални стойности на оптимизираните параметри 2.5, 0.5, 3, 2. Знакът [] указва да се вземат стойностите по подразбиране при определяне критериите за търсене и за спиране процеса на оптимизация. Върнатата стойност рр е вектора на оптимизираните параметри.



Зад.3.1 Наберете кода и изпълнете програмата fit2 за оптимизиране на параметрите.

Зад. 3.2 Модифицирайте програмата fit2 така че да извежда на екрана вектора р с оригиналните параметри и вектора рр с оптимизираните параметри.
Каталог: ~tank -> ComputerDataProcessing
~tank -> Програма за изчисляване на средна стойност
ComputerDataProcessing -> Лекция спектрален анализ на периодични процеси цел на спектралния анализ на сигналите е определянето на
ComputerDataProcessing -> Лекция 5 Основни елементи на програмната среда matlab
ComputerDataProcessing -> Лекция Запознаване със средата на електронните таблици Excel. Работа с данни в работния лист. Въвеждане и използване на формули и функции. Равномерно и Гаусово (нормално) разпределения и основни статистически
ComputerDataProcessing -> Лекция Основи на линейната филтрация. Формиране на
ComputerDataProcessing -> Лекция №4. Апроксимация на зависимост между две величини (апроксимираща крива). Метод на най-малките квадрати. Линейна и квадратична регресия
ComputerDataProcessing -> Лекция 10. Статистически анализ
ComputerDataProcessing -> Лекция Дискретни вероятностни разпределения. Биномно разпределение и разпределение на Поасон. Графични възможности в Excel


Сподели с приятели:




©obuch.info 2024
отнасят до администрацията

    Начална страница