Контрольная работа: Аппроксимация функций 2
Название: Аппроксимация функций 2 Раздел: Рефераты по математике Тип: контрольная работа | ||||||||||||||||||||||||||||||||||
ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ РОССИЙСКОЙ ФЕДЕРАЦИИ ОМСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ Кафедра «Авиа- и ракетостроение» Специальность 160801- «Ракетостроение» Расчетно-графическая работа по дисциплине «Основы САПР» Аппроксимация функций Омск 2006 Введение Цель работы: Ознакомиться с методами интерполяции и аппроксимации функций Задания: Задание 1. Построить таблицу конечных разностей. Выполнить экстраполяцию на два узла от начала и от конца таблицы. Задание 2. Построить интерполяционный многочлен Лагранжа и с его помощью найти значения функции в узлах, соответствующих полушагу таблицы. Задание 3. Найти значение f(x) с помощью формул Ньютона интерполирования вперед и назад. Задание 4. Выполнить квадратичную сплайн-интерполяцию (по 6 узлам). Проконтролировать полученные оценки для промежуточных узлов. Задание 5. Считая выбранную таблицу заданной для диапазона от 0 до 2, выполнить среднеквадратическую аппроксимацию тригонометрическим многочленом (отрезком ряда Фурье) третьей степени. Исходные данные: x=[11.0 11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 12]; y=[-0.00023,1.080087,2.064282,2.854531,3.37121,3.560925,3.402017,2.90698,2.121544,1.120452,0.000357]; 1. Построение массива конечных разностей. Выполнение экстраполяции Массив конечных разностей рассчитываем по формуле: . for i=1:10 for j=1:11-i y(i+1,j)=y(i,j+1)-y(i,j); end end Результат расчёта:
Экстраполяция на два узла от начала и конца таблицы с помощью многочлена Лагранжа. n=11; % Степень многочлена i=0; for p=10.8:0.1:12.2 i=i+1; x1(i)=p; ff(i)=Lagrange(x,y,p,n); end for j=1:11 yy(j)=y(1,j); end subplot(2,1,1); plot(x,yy,'.-'); ylabel('y'); xlabel('x'); grid on; title('Первоначальные данные') subplot(2,1,2); plot(x1,ff,'.-'); ylabel('y'); xlabel('x'); grid on; title('Экстраполяция') Получим:
Рис. 1. Экстраполяция на два узла многочленом Лагранжа 2. Нахождение значения приближенной функции с помощью многочлена Лагранжа Запишем интерполяционный многочлен Лагранжа: , где х – произвольная координата на заданном интервале. _____________________________________________________________ function [x]=Lagrange(x,y,a,n) for i=1:n for j=1:n s(i,j)=1; end end ss=1; for j=1:n for i=1:n if j~=i s(j,i)=(a-x(i))/(x(j)-x(i)); end end end ss=prod(s,2); L=0; for k=1:n L=L+y(1,k)*ss(k); end x=L; _____________________________________________________________ i=0; for p=11:0.01:12 i=i+1; x1(i)=p; ff(i)=Lagrange(x,y,x1(i),n); end subplot(2,1,2); plot(x1,ff,'.-'); ylabel('y'); xlabel('x'); grid on; title('ИнтерполяциямногочленомЛагранжа') Рис. 2. Интерполяция многочленом Лагранжа 3. Определение значения функции с помощью формул Ньютона а) Интерполяционная формула Ньютона для интерполирования вперёд: где - промежуток между последовательными узлами интерполирования, (в рассматриваемом случае промежуток постоянен); n– степень многочлена; . _____________________________________________________________ function [x]=Nuton_vp(k,x,y,n); n=round(k)+1; % Степень многочлена if n==12 n=11; end t=(k-1)/1; t1(1)=1; for j=2:n t1(j)=t-(j-2); end t2=cumprod(t1); for j=1:n Pn(j)=y(j,1)*t2(j)/FACTORIAL(j-1); end x=sum(Pn,2); _____________________________________________________________ n=11; i=0; for p=11:0.05:12 i=i+1; a=0.5+i*0.5; x1(i)=p; ff(i)=Nuton_vp(a,x,y,n); end % Построениеграфика subplot(2,1,2); plot(x1,ff,'.-'); ylabel('y'); xlabel('x'); grid on title('Интерполяция многочленом Ньютона вперёд') Рис. 3. Интерполяция многочленом Ньютона вперёд б) Формула Ньютона для интерполяции назад: _____________________________________________________________ function [x]=Pnz(k,x,y); n=12-round(k)+1; % Степень многочлена ifn==12 n=11; end t=(k-11)/1; t1(1)=1; for i=2:n t1(i)=t+(i-2); end t2=cumprod(t1); for i=1:n Pn(i)=y(i,12-i)*t2(i)/FACTORIAL(i-1); end x=sum(Pn,2); _____________________________________________________________ i=0; for p=11:0.05:12 i=i+1; a=0.5+i*0.5; x1(i)=p; ff(i)=Nuton_nz(a,x,y); end % Построениеграфика subplot(2,1,2); plot(x1,ff,'.-'); ylabel('y'); xlabel('x'); grid on title('Интерполяция многочленом Ньютона назад') Рис. 4. Интерполяция многочленом Ньютона назад 4. Квадратичная сплайн-интерполяция Для того, чтобы выполнить квадратичную сплайн-интерполяцию по 6-ти узлам, необходимо задаться пятью уравнениями. Рис. 5. К выводу коэффициентов при сплайн-интерполяции При квадратичном сплайне уравнения будут иметь вид: , . На эти уравнения наложены следующие граничные условия: , , , . Вычислим производную : , . (1) Определим при : , . (2) В рассматриваемом примере . С учетом этого, а также с учетом выражения (2) и условия , запишем следующую зависимость: , . Из условия и выражения (1) получим: . Составим систему уравнений: Решая эту систему, получим следующие зависимости для вычисления коэффициентов: _____________________________________________________________ function [k]=Spl(aa,n,x,y); c(1)=0; b(1)=10*y(1,2)-10*y(1,1)-0.1*c(1); for k=1:n-2 b(k+1)=0.2*c(k)+b(k); c(k+1)=100*y(1,k+2)-100*y(1,k+1)-10*b(k+1); end j=floor(10*aa-109); if j==6 j=5; end k=y(1,j)+b(j)*(aa-x(j))+c(j)*(aa-x(j))^2; _____________________________________________________________ n=6; clear yy; clear ff; clear x1; clear x1 for i=1:11 a=10.95+i*0.05; ff(i)=Spline(a,n,x,y); x3(i)=10.95+0.05*i; end for j=1:6 yy(j)=y(1,j); x1(j)=x(j); end % Построение графика subplot(2,1,1); plot(x1,yy,'o-'); ylabel('y'); xlabel('x'); grid on title('Первоначальные данные') subplot(2,1,2); plot(x3,ff,'.-');ylabel('y'); xlabel('x'); grid on title('Интерполяция сплайнами') Рис. 6. Интерполяция квадратичным сплайном 5. Среднеквадратичная аппроксимация тригонометрическим многочленом третьей степени Тригонометрический многочлен ищется в виде: . Коэффициенты вычисляются по следующим формулам: , , , . где n– степень многочлена (в данном случае принимается n=3); - число узловых точек. _____________________________________________________________ function [x]=Furie(aa,x,y); for i=1:11 xpi(i)=i*2*pi/11; a=(aa-10.9)*10*2*pi/11; end n=3; a0=sum(y,2)/11; for i=1:3 for j=1:11 ak(i,j)=y(1,j)*cos(i*xpi(j)); bk(i,j)=y(1,j)*sin(i*xpi(j)); end end aksum=2*sum(ak,2)/11; bksum=2*sum(bk,2)/11; Tna=a0(1)+aksum(1)*cos(a)+bksum(1)*sin(a)+aksum(2)*cos(2*a)+bksum(2)*sin(2*a)+aksum(3)*cos(3*a)+bksum(3)*sin(3*a); x=Tna; _____________________________________________________________ for i=1:100 k(i)=10.99+i*0.01; ff(i)=Furie(k(i),x,y); end for j=1:11 yy(j)=y(1,j); end subplot(2,1,2); plot(x,yy,'o-',k,ff,'.-');ylabel('y');xlabel('x');grid on; title('Аппроксимация тригонометрическим многочленом'); Рис. 7. Аппроксимация тригонометрическим многочленом Список использованных источников 1. Самарский А.А., Гулин А.В. Численные методы. М.: Наука, 1989. 2. Демидович Б.П., Марон И.А. Основы вычислительной математики. М.: Физматгиз, 1966. 3. Калиткин Н.Н. Численные методы. М.: Наука, 1978. 4. Демидович Б.П., Марон И.А., Шувалова Э.З. Численные методы анализа. М.: Наука, 1967. 5. Бахвалов Н.С. Численные методы. М.: Наука, 1987. 6. Марчук Г.И. Методы вычислительной математики. М.: Наука, 1989. 7. Волков Е.А. Численные методы. М.: Наука, 1987. |