Программа Aero-PM в настоящее время не имеет средства визуального отображения результатов (только численный вывод в командное окно). Для упрощения отладки, полезно иметь возможность графического отображения линий тока и эквипотенциальных линий. Комплексная скорость и потенциал в Matlab могут быть отображены на двумерных графиках при помощи функций quiver() и contour().
Комплексная скорость и потенциал в Matlab: типы течений
Будут рассмотрены четыре типа течений: однородный поток, угловой поток, источник и дублет. Комплексная скорость обозначена w, комплексный потенциал обозначен W.
1 Однородный поток
Matlab:
wf = @(z)z./z; WF = @(z)z; CVelocityPlot2D( -2-2i, 2+2i, wf, WF, 10, 100);
2 Угловой поток
Matlab:
wf = @(z)z; WF = @(z)(-z.^2)./2; CVelocityPlot2D( -2-2i, 2+2i, wf, WF, 30, 100);
3 Источник
Matlab:
wf = @(z)1./z; WF = @(z)log(.z); CVelocityPlot2D( -2-2i, 2+2i, wf, WF, 10, 100);
4 Дублет
Matlab:
wf = @(z)z.^-2; WF = @(z)-z.^-1; CVelocityPlot2D( -2-2i, 2+2i, wf, WF, 10, 100);
Исходный текст
McBain — Theory of Lift — Introductory Computational Aerodynamics with MATLAB (стр.49-55). В книге функции печати скорости и потенциала разделены.
function CVelocityPlot2D( ll, ur, wf, WF, nodesNumwf, nodesNumWF ) % McBain - Theory of Lift - Introductory Computational % Aerodynamics with MATLAB (стр.49-55) % Пример вызова: % wf = @(z)(abs(z)>1).*(1-z.^-2); % WF = @(z)(abs(z)>1).*(z + 1./z); % CVelocityPlot2D( -2-2i, 2+2i, wf, WF, 10, 100); % Подготовка 2D данных для комплексной скорости. xwf = linspace (real(ll), real(ur), nodesNumwf); ywf = linspace (imag(ll), imag(ur), nodesNumwf); [Xwf, Ywf] = meshgrid(xwf, ywf); Zwf = complex(Xwf, Ywf); wwf = wf(Zwf); % Масштаб стрелок. scaledwf = wwf ./ abs(wwf); % Подготовка 2D данных для комплексного потенциала. xWF = linspace (real(ll), real(ur), nodesNumWF); yWF = linspace (imag(ll), imag(ur), nodesNumWF); [XWF, YWF] = meshgrid(xWF, yWF); ZWF = complex(XWF, YWF); % Печать двух графиков. f = figure(1); figure(f); % Линии тока (комплексной скорости). subplot(1,2,1) quiver(real(Zwf), imag(Zwf), real(scaledwf), -imag(scaledwf)) axis([real(ll), real(ur), imag(ll), imag(ur)],'on', 'equal') box on grid on xlabel('Re(z)=x'); ylabel('Im(z)=y'); title('Поле скорости'); % Изопотенциальные линии. subplot(1,2,2) contour (real(ZWF), imag(ZWF), real(WF(ZWF)), '--') hold on contour (real(ZWF), imag(ZWF), imag(WF(ZWF)), 'k-') axis ([real(ll), real(ur), imag(ll), imag(ur)],'on', 'equal') box on grid on xlabel('Re(z)=x'); ylabel('Im(z)=y'); title('Комплексный потенциал'); hold off end