|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Пример выполнения заданияПо заданным n точкам построить линейную и квадратичную аппроксимации по методу наименьших квадратов. Нарисовать график. Сравнить решение с полиномом Лагранжа. Очищаем память от предыдущих задач. Задаём формат отображения чисел с 5 знаками. Вводим исходные данные: вектор-столбцы x и y. С помощью команды polyfit (см. главу 1) находим коэффициенты линейной, квадратичной аппроксимации и интерполирующего полинома Лагранжа. clear all % очищаем память format short % формат отображения чисел с 5 знаками x=[0.215;0.22;0.225;0.23] % вводим x y=[4.62261;4.65855;4.51919;4.46422] % вводим y n=length(x); % длина векторов исходных данных p1=polyfit(x,y,1) % коэф. линейной аппроксимации p2=polyfit(x,y,2) % коэф. квадратичной аппроксимации p=polyfit(x,y,n-1) % коэф. интерпол.полинома x = 0.2150 0.2200 0.2250 0.2300 y = 4.6226 4.6586 4.5192 4.4642 p1 = -12.2906 7.3008 p2 = -909.1000 392.2589 -37.6769 p = 1.0e+005 * 3.4625 -2.3203 0.5180 -0.0385 Построим теперь аппроксимирующий квадратичный полином путём непосредственной минимизации функции (7.5). Опишем символические переменные для аргумента и коэффициентов аппроксимации. Переведём координаты точек x и y в символические выражения. Вычислим функцию L. Продифференцируем её по всем аргументам. Составим систему уравнений и решим её. Подставим полученные значения в выражение для функции L. syms xs a0 a1 a2 % описали символические переменные xk=sym(x); yk=sym(y); % преобразовали в символические ys=a2*xs^2+a1*xs+a0; % квадратичный полином ysk=subs(ys,xs,xk); % подставили x(k) L=simple(sum((ysk-yk).^2)); % составили L и упростили dLda0=diff(L,a0); dLda1=diff(L,a1); dLda2=diff(L,a2); Eq0=[char(dLda0) '=0']; % составляем уравнения Eq1=[char(dLda1) '=0']; Eq2=[char(dLda2) '=0']; Sol=solve(Eq0,Eq1,Eq2); % решаем систему уравнений ys=vpa(subs(ys,{a2,a1,a0},{Sol.a2,Sol.a1,Sol.a0}),8) ys = -909.10000*xs^2+392.25890*xs-37.676922 Если Вы всё проделали правильно, то коэффициенты полученного квадратичного полинома должны совпасть с p2. Нарисуем теперь графики полученных функций. Зададим аргументы так же, как мы это делали в главе 1. Вычислим ординаты всех полиномов по команде polyval. Нарисуем непрерывной линией красного цвета квадратичную аппроксимацию, штриховой линией фиолетового цвета – линейную аппроксимацию, а полином Лагранжа изобразим пунктирной линией синего цвета. Экспериментальные точки покажем круглыми маркерами чёрного цвета. Зададим границы по оси абсцисс. Подпишем заголовок и оси координат. xleft=x(1)-(x(2)-x(1)); % левая точка xright=x(n)+(x(n)-x(n-1)); % правая точка xpl=[xleft:(xright-xleft)/1000:xright]; % абсциссы y1=polyval(p1,xpl); % линейная аппроксимация y2=polyval(p2,xpl); % квадратичная аппроксимация ylagr=polyval(p,xpl); % полином Лагранжа plot(xpl,y2,'-r',xpl,y1,'--m',xpl,ylagr,':b',x,y,'or') xlim([xleft xright]) title('\bfMinimal square approximation') xlabel('x') ylabel('y(x)') Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.) |