Графическая функция fplot
Разумеется, MATLAB имеет средства для построения графиков и таких функций, как sin(x)/x, которые имеют устранимые неопределённости. Не обсуждая эти средства подробно, просто покажем, как это делается, с помощью другой графической команды – fplot:
fplot('f(x)', [xmin xmax]).
Она позволяет строить функцию, заданную в символьном виде, в интервале изменения аргумента х от xmin до xmax без фиксированного шага изменения х:
fplot(‘sin(x)/x’,[-10 10]).
Один из вариантов её применения демонстрирует рис. 3.18. Хотя в процессе вычислений предупреждение об ошибке (деление на 0) выводится, но график строится правильно, при х=0 sin x/x=l. Обратите также внимание на две используемые команды: clear (очистить) – очистка графического окна и grid on (сетка) – включение отображения сетки, которая строится пунктирными линиями.
На рис. 3.18 представлено также меню File (Файл) окна графики. Нетрудно заметить, что оно содержит типовые файловые операции. Однако они относятся не к файлам документов, а к файлам графиков. В частности, можно присваивать имя записываемым на диск рисункам с графиками.
Рис. 3.18. Построение графика sin(x)/x функцией fplot
Интерполяции и аппроксимации данных
Для анализа экспериментальных данных, которые представлены в виде таблиц и задают зависимость одних физических величин от других, применяют такие средства, как интерполяция, сглаживание и аппроксимация.
Если имеются некоторые табличные данные, возникает задача – найти непрерывную кривую, которая наилучшим образом соответствовала бы заданной экспериментальной зависимости. Обычно такие данные удобно интерпретировать в виде полиномиальной функции или сплайна.
Программа MATLAB содержит встроенные функции для аппроксимации и интерполяции экспериментальных данных.
Полиномиальная аппроксимация
Построить аппроксимирующий полином заданной степени, который приближает функцию одной переменной, заданную таблицей значений, позволяет функция polyfit. Эта функция реализует так называемый метод наименьших квадратов. Она имеет следующий синтаксис:
р=polyfit(x,y,n),
где у – это вектор значений функции; х – вектор значений аргумента, n – порядок аппроксимирующего полинома; а р – полученный в результате вектор коэффициентов аппроксимирующего полинома длиной n+1.
Допустим, имеется массив значений аргумента:
х=[1 2 3 4 5 6 7 8 9 10]
и массив соответствующих им значений измеряемой величины:
у=[3 4 6 6.5 7 7.5 9 11 10 9]
Применим к этим данным функцию polyfit при n = 1, n = 2 и n = 3:
>> x=[1 2 3 4 5 6 7 8 9 10];
>> y=[3 4 6 6.5 7 7.5 9 11 10 9];
>> p1=polyfit(x,y,1)
p1 =
0.7818 3.0000
>> p2=polyfit(x,y,2)
p2 =
-0.0814 1.6777 1.2083
>> p3=polyfit(x,y,3)
p3 =
-0.0176 0.2086 0.3398 2.7167.
В результате мы получили три вектора p1, р2 и p3, первый из которых содержит коэффициенты аппроксимирующей прямой 0,7818х + 3, второй – коэффициенты аппроксимирующей квадратной параболы –0,0814х2 – 1,6777x + 1,2083, а третий – коэффициенты аппроксимирующей кубической параболы –0,0176х3 + 0,2086x2 + 0,3398x +2,7167.
Аналогичным образом можно аппроксимировать данные полиномами четвёртой степени, пятой, шестой и т.д.
Для наглядности построим график исходной зависимости и графики аппроксимирующих полиномов (рис. 3.19). Для вычисления значений полиномов воспользуемся функцией polyval:
>> x=[1 2 3 4 5 6 7 8 9 10];
>> y=[3 4 6 6.5 7 7.5 9 11 10 9];
>> title('Полиномиальная аппроксимация')
>> xlabel('x'); ylabel('y'); hold on
>> plot(x,y,'ko')
>> p1=polyfit(x,y,1);
>> p2=polyfit(x,y,2);
>> p3=polyfit(x,y,3);
>> t=0.5:0.05:12;
>> y1=polyval(p1,t);
>> y2=polyval(p2,t);
>> y3=polyval(p3,t);
>> plot(t,y1,'k-',t,y2,'k--',t,y3,'k:'),grid on
>> legend('табличные данные','прямая','парабола','кубическая парабола')
Рис. 3.19. Пример аппроксимации полиномами
Выполнение приближения методом наименьших квадратов не всегда дает хороший результат. При увеличении степени полинома качество приближения может ухудшаться.
Достарыңызбен бөлісу: |