Форум кафедры Техники и Электрофизики Высоких Напряжений

Онлайн-сообщество ТВНщиков
Гостям форума:

Добро пожаловать на форум по технике высоких напряжений!
Для получения доступа ко всем разделам необходимо зарегистрироваться


Текущее время: 17 ноя 2018, 13:56

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
СообщениеДобавлено: 19 апр 2009, 00:12 
Не в сети
Site Admin

Зарегистрирован: 03 сен 2008, 16:09
Сообщения: 4258
Откуда: Д-3
Ничего особенного, но может оказаться полезным.

При решении больших расчетных задач, часто требуется строить множество графиков для анализа (и для отчетов тоже). Функция print позволяет сохранять графики программно в файлы, в разных форматах. Наиболее востребованным, конечно, является векторный формат, в частности, Encapsulated Postcript Level 2.

Следующий код в цикле строит графики функций Бесселя I и II рода, порядок функции Бесселя определяется текущим шагом цикла. Графики сохраняются как в векторный EPS, так и в растровый PNG в указанном экранном разрешении 72 dpi (для печати лучше задать 300 dpi).

Код:
x=0:0.01:50;
for I=1:5
    %построение графика функций Бесселя I и II рода
    plot(x, [besselj(I-1,x); bessely(I-1,x)])
    axis([0 50 -3 1])
    title(['Функции Бесселя I и II рода ' num2str(I-1) '-го порядка'])
    xlabel('x');
    ylabel(['J',num2str(I-1),'(x), N',num2str(I-1),'(x)'])
    grid on
    %сохранение графиков в файлы
    epsfilename=strcat('Bessel',num2str(I),'.eps');
    print('-depsc2',epsfilename);
    pngfilename=strcat('Bessel',num2str(I),'.png');
    print('-dpng','-r72',pngfilename);
end

На выходе будет 10 файлов:
Bessel1.eps Bessel2.eps Bessel3.eps Bessel4.eps Bessel5.eps
Bessel1.png Bessel2.png Bessel3.png Bessel4.png Bessel5.png

Bessel1.png выглядит вот так:

Изображение

И, конечно, полезно прочесть help print


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
СообщениеДобавлено: 19 апр 2009, 00:35 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 03 сен 2008, 17:00
Сообщения: 339
Откуда: Д-4а
Печать в файл? А почему не Сохранить как...?

Тогда вместо
Код:
epsfilename=strcat('Bessel',num2str(I),'.eps');
print('-depsc2',epsfilename);

получаем что-то типа
Код:
saveas(gcf, sprintf('Bessel%d.eps', I), 'epsc2')


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
СообщениеДобавлено: 19 апр 2009, 00:42 
Не в сети
Site Admin

Зарегистрирован: 03 сен 2008, 16:09
Сообщения: 4258
Откуда: Д-3
Мне казалось, что через print удобнее объяснить, тем более, что в хелпе к print прописаны все возможные опции, а к saveas - нет. И потом saveas требует хендл, а print нет.

А выигрыша в объеме кода при использовании saveas, кстати, нет. Это просто нормальная альтернатива. У тебя вот имя файла грамотно формируется, не то что у меня =)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
СообщениеДобавлено: 27 окт 2009, 21:38 
Не в сети

Зарегистрирован: 25 сен 2009, 18:42
Сообщения: 99
Откуда: из Электроуглей о_О
Даниил Анатольевич, Это с помощью этой функции вы видео делаете? Сначало, насколько я понимаю, будет много-много картинок. А потом програмно их в видео соединяте? )


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
СообщениеДобавлено: 27 окт 2009, 21:55 
Не в сети
Site Admin

Зарегистрирован: 03 сен 2008, 16:09
Сообщения: 4258
Откуда: Д-3
ivanov07 писал(а):
Даниил Анатольевич, Это с помощью этой функции вы видео делаете? Сначало, насколько я понимаю, будет много-много картинок. А потом програмно их в видео соединяте? )

Можно и так. Но я делаю на лету:
Код:
% создаем объект видео-файла:
mov = avifile('filename.avi', 'fps', 25);  % fps=25 означает 25 кадров в секунду
% запускаем цикл по расчету графиков и добавлению их в видео-файл:
for J=1:N
    % рассчитываем зависимость y от x на текущем шаге
    % ..........
    plot(x,y)     % строим график на текущем шаге
    F = getframe(gcf); % забираем с текущего графика картинку для видео
    mov = addframe(mov,F); % добавляем картинку в видео-файл
end
% закрываем видео-файл, тем самым он записывается на диск:
mov = close(mov);


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB