Вот один из способов, которым вы можете анимировать это, используя функцию POLYFIT для подгонки параболы к x
и y
, функцию POLYVAL для оценки вашего полинома на множестве значений x
и команды SET для изменения объектов графика вместо необходимости их повторного построения:
load objects.mat %# Load the data
x = objects(:,1); %# Get the x data
y = objects(:,2); %# Get the y data
N = numel(x); %# The number of points
hPoints = plot(x(1),y(1),'r*'); %# Plot first point as a red asterisk,
%# saving the handle
hold on; %# Add to the plot
hFitLine = plot(x,nan(N,1),'b-'); %# Initialize the plot for the fit line,
%# saving the handle and using NaN for
%# the y values so it doesn't appear yet
axis([min(x) max(x) min(y) max(y)]); %# Set the axis limits
for k = 1:N
set(hPoints,'XData',x(1:k),'YData',y(1:k)); %# Update the points
if k >= 15 %# Plot a fit line starting at k = 15
p = polyfit(x(1:k),y(1:k),2); %# Fit a parabola with points 1 through k
yFit = polyval(p,x); %# Evaluate the polynomial at all x
set(hFitLine,'YData',yFit); %# Update the fit line
end
drawnow(); %# Force the plot to refresh
pause(0.25); %# Pause for a quarter second
end
Замечание о графике MATLAB ...
Каждый раз, когда выдается команда построения (например, PLOT ), тогда один или несколько обрабатывают графические объекты создаются на текущих осях. Эти объекты имеют «дескриптор» или числовой идентификатор, который действует как ссылка на объект графика и который может использоваться для доступа и изменения свойств объекта. Команды GET и SET могут использоваться для доступа и изменения, соответственно, свойств графических объектов с помощью их дескрипторов, которые обычно возвращаются в качестве выходных аргументов из команд построения.
Каждый тип дескриптора графического объекта имеет набор свойств. Команда PLOT создает объект lineseries
с рядом свойств, которые можно найти здесь . Например, свойство 'XData'
хранит значения x нанесенных точек, а свойство 'YData'
хранит значения y. Вы можете изменить координаты x и y нанесенных точек, изменив эти свойства объекта lineseries
.
При анимации графики в MATLAB обычно эффективнее сначала создать объект и обновить его свойства во время анимации, а не создавать, удалять, а затем воссоздавать объект во время анимации. В приведенном выше коде объект графика для отдельных точек создается перед циклом анимации, а дескриптор этого объекта сохраняется в переменной hPoints
. Объект графика для параболической линии также создается перед циклом анимации, а его дескриптор сохраняется в hFitLine
. Затем команда SET используется в цикле для изменения этих двух объектов графика.
Поскольку параболическая линия сначала должна быть невидимой, установка начальных значений y на все NaN приводит к тому, что строка не будет отображаться (хотя объект все еще существует). Вы также можете сделать строку невидимой, установив для 'Visible'
свойство значение 'off'
.