|
|
Глава 8. Обработка данных |
n |
|
bij = ∑ϕi(xk )ϕj (xk ) (индексы i, j = 1,2,...,m ). Вектор C в правой части |
k =1 |
n |
состоит из элементов ci |
= ∑ykϕi(xk ). Таким образом, для поиска аппрок- |
|
|
k =1 |
симирующей зависимости в случае линейной функции f (x,a1,a2,...,am ) для определения оптимальных параметров a1 , a2 , ..., am достаточно методов линейной алгебры. В общем случае поиск параметров a1 , a2 , ..., am аппроксимирующей зависимости формулируется как задача поиска абсолютного
n
минимума для выражения ∑(yk − f(xk,a1,a2,...,am ))2 .
k =1
На заметку
В линейном случае задача решается проще и быстрее. В этом отношении лучше и приятнее иметь дело с линейной задачей. К счастью, нередко нелинейную задачу можно переформулировать так, что она станет линейной. Для линейной задачи на будущее договоримся называть параметр ak (k = 1,2,...,m ) коэффициентами аппроксимирующего выражения, а функции ϕk (x) (k = 1,2,...,m ) базисными функциями аппроксимирующего выражения.
Далее рассмотрим, как эти задачи решаются в Matlab. Один из самых простых случаев – аппроксимация на основе полинома. Для решения такой задачи используем встроенную функцию polyfit(). Аргументами функции передаются массивы узловых точек и значений в этих узловых точках табулируемой функции, а также степень аппроксимирующего полинома. Пример использования функции polyfit() приведен в документе на рис. 8.7.
На основе набора базовых точек создается два аппроксимирующих полинома – четвертой и второй степени. Кривые для обоих полиномов, вместе с исходными базовыми точками, отображаются на графике. Весь командный код такой (жирным шрифтом выделен ввод пользователя):
>> k=0:10; |
|
|
|
|
>> y=cos(pi*k/5)./(1+k); |
|
|
|
>> p=polyfit(k,y,4) |
|
|
|
p = |
-0.0097 |
0.1315 |
-0.6747 |
0.9880 |
0.0002 |
>>x=0:0.01:10;
>>plot(k,y,'rs','LineWidth',2)
>>grid on
>>hold on
>>q=polyfit(k,y,2)
q =
>> plot(x,polyval(p,x),'b-','LineWidth',2)