Как создавать фильмы для каждого поколения цикла for в сюжете Matlab

Я хочу построить сферическую функцию в виде поверхности или контурного графика, а также положение и значение пригодности лучшего человека, которые оцениваются сферической функцией данных, сгенерированных из распределения Гаусса, наложенного на него. Сюжет будет меняться в каждом поколении, поэтому я получаю фильм. Кроме того, на другом рисунке я хочу построить контур сферической функции, наложенный на всю популяцию, полученную из распределения Гаусса, с сохраненными подходящими особями, окрашенными в красный цвет. Это из поколения в поколение должно давать другое кино.

Это в основном реализация алгоритма оценки распределения (EDA). Кто-нибудь знает, как это сделать?

ИЗМЕНИТЬ

K= 4 
for l = 1 : K 
contour(X,Y,ph); 
hold on 
plot(bestId, 'rx'); 
end 

Приведенный выше код должен накладывать контурный график и BestId. Для каждого цикла l генерируется bestId и накладывается на контурный график. Эта генерация BestInd должна выполняться для каждого l. но среди поколений bestId от 1 до 4 есть лучшее из них и мы должны получить то после четвертого поколения, на которое накладывается контурный график. Теперь я хочу, чтобы это поколение было фильмом для достижения итерации от 1 до 4, чтобы я мог видеть, как генерируются лучшие идентификаторы, пока не будет достигнут лучший (оптимальный). это то, что я имел в виду под фильмом в Matlab. Любая идея о том, как это можно сделать?


person user2179716    schedule 30.05.2013    source источник
comment
Я ничего не знаю о том, что вы хотите сделать, но я знаю, что вы можете записывать кадры фигур в видеофайл. Я предлагаю вам взглянуть на VideoWriter (особенно последний сам пояснительный пример) и getframe.   -  person p8me    schedule 30.05.2013
comment
@pm89 спасибо за ответ. Знаете ли вы об алгоритме оценки распределения (EDA)? Я пытаюсь понять это, реализуя его.   -  person user2179716    schedule 30.05.2013
comment
@pm89 спасибо за ваше предложение.   -  person user2179716    schedule 30.05.2013
comment
@ user2179716: Я думаю, что VideoWriter вам, вероятно, подойдет. Пожалуйста, прочтите FAQ StackOverflow о том, как спрашивать разумно ограниченные, конкретные вопросы (по одному тоже хорошо).   -  person horchler    schedule 30.05.2013
comment
@ Mahm00d, я уже посмотрел на MATEDA, но его сложно понять, поэтому я решил попробовать реализовать себя для понимания.   -  person user2179716    schedule 30.05.2013
comment
@horchler вы меня бросили в этом вопросе? Пожалуйста, мне нужна помощь. Я совершенно не знаю, как с этим быть.   -  person user2179716    schedule 01.06.2013
comment
Я думаю, вам нужно задать новый вопрос. Предоставьте код того, что вы пробовали, чтобы создать базовый фильм (возможно, начните с Пример файла AVI из анимации здесь). Опишите, что не работает или что вы не понимаете. Опишите, какое поведение или результат вы ожидаете. Не вдавайтесь в технические детали EDA и т. д., если речь идет о создании видео. Кроме того, убедитесь, что вам нужен фильм, а не анимация — см. .   -  person horchler    schedule 01.06.2013


Ответы (1)


Для создания ролика, отражающего изменения фигур, я использую комбинацию класса avifile и функций getframe() и addframe().

Вот пример

aviobj = avifile('example.avi','compression','None');

t = linspace(0,2.5*pi,40);
fact = 10*sin(t);
fig=figure;
[x,y,z] = peaks;
for k=1:length(fact)
    h = surf(x,y,fact(k)*z);
    axis([-3 3 -3 3 -80 80])
    axis off
    caxis([-90 90])

    F = getframe(fig);
    aviobj = addframe(aviobj,F);
end
close(fig);
aviobj = close(aviobj);

Вы можете найти больше информации здесь

http://www.mathworks.nl/help/matlab/ref/avifile.html

http://www.mathworks.nl/help/matlab/ref/movie.html

http://www.math.canterbury.ac.nz/%7Ec.scarrott/MATLAB_Movies/movies.html

--Редактировать после обсуждения в комментариях------------------

pm89 предложил другой способ в комментариях. Класс VideoWriter кажется более современным и актуальным. Пример использования можно найти в конце страницы ниже

http://www.mathworks.nl/help/matlab/ref/videowriterclass.html

person freude    schedule 30.05.2013
comment
Я бы все же предложил VideoWriter, поскольку avifile будет удален после 2013a. - person p8me; 30.05.2013
comment
Я знал это. В этом случае вы правы. Я только что показал то, что я привык использовать - person freude; 30.05.2013
comment
Таким образом, с некоторым фрагментом кода, который имеет цикл, данные на графике должны меняться каждый раз, когда цикл выполняется, с этим у нас может быть своего рода фильм. Достигнет ли вышеуказанное предложение цели? мы можем перейти в чат для более подробной информации - person user2179716; 30.05.2013
comment
Да, это будет. Вы можете найти пример под названием AVI File from Animation в конце страницы mathworks. nl/help/matlab/ref/videowriterclass.html - person freude; 30.05.2013
comment
Если вы не хотите сохранять кадр на каждой итерации цикла, вы можете вставить условие внутри цикла, которое позволит вам сохранять кадры для некоторых определенных значений счетчика. - person freude; 30.05.2013
comment
@freude, допустим, у вас есть эта часть кода, которая также находится внутри большего цикла for. K = 4 для l = 1: K subplot (1,2,1); контур(X1,X2,ф); удерживать сюжет (bestId, 'rx'); конец Как вы можете создать фильм на этом. Каждый раз, когда цикл идет, у нас разные позиции bestId, наложенные на контурный график, таким образом, получается фильм. Как этого можно достичь? Можете ли вы изменить его, чтобы он делал то, что мы ожидаем? - person user2179716; 30.05.2013
comment
Вы можете сделать по существу то же самое, что и в предыдущих примерах. Чтобы иметь дело только с одним подзаголовком, вы должны вернуть ему дескриптор, выполнив следующее: h=subplot(1,2,1) Затем вы строите свои графики и делаете F = getframe(h); - person freude; 31.05.2013
comment
@freude, не могли бы вы отредактировать мой код выше и сделать то, что вы здесь говорите, и пусть они увидят. Я пытаюсь следовать тому, что вы сказали здесь, но это не приходит. Может быть, я скучаю по тебе. - person user2179716; 31.05.2013
comment
@freude, мне все еще нужна твоя помощь. Я до сих пор понятия не имею, как это решить - person user2179716; 01.06.2013
comment
Я сделал все, что мог. Моих знаний недостаточно, чтобы дать вам больше информации - person freude; 01.06.2013
comment
@freude мой вопрос ясен? Я ясно изложил свою проблему? или ты просто не в курсе? - person user2179716; 01.06.2013