Достоинства MATLAB
MATLAB
языки
vs программирования
Быстрое создание
интерфейса
Визуализация
Куча встроенной математики,
особенно матричной
Открытая архитектура
http://www.mathworks.com/matlabcentral/fileexchange/
Недостаток: быстродействие
Num=500000;
MATLAB просто циклом:
24992 с=6.9 ч
for i=1:Num+1
x(i)=(i-1)*2*pi/Num;
y(i)=sin(x(i));
end
если до того: 6 с
x=zeros(1, Num+1);
y=zeros(1, Num+1);
через операции над векторами:
0.22 c
x=0:2*pi/Num:2*pi;
y=sin(x;)
Fortran: 0.12 с
allocate(x(1:Num+1))
allocate(y(1:Num+1))
do i=1, Num+1
x(i)=(i-1.0)*2.0*pi/Num
y(i)=sin(x(i))
end do
deallocate(x)
deallocate(y)
с оптимизацией: 0.08 с
Ниша: небольшая прикладная программа
Рекомендуемая литература
1) Help!!! (и демки)
2) Н.Н. Мартынов “MATLAB X.X”
Условные операторы
Циклы
a = zeros(m, n);
for i = 1:m
for j = 1:n
a(i, j) = i+j ;
end
end
while (1+eps) > 1
eps = eps/2;
end
Ввод чисел из файла
fid=fopen('XP.txt', 'rt');
for i=1:M
XP(i)=fscanf(fid, '%f', 1);
fgets(fid);
end
fclose(fid);
Запись чисел в файл
fid1=fopen('Results\QXL.txt', 'wt');
for i=1:Num-1
fprintf(fid1, '%10.6f\n', QXL(i));
end
fclose(fid1);
switch k
if i == j
case 1
a(i,j) = 2;
a=1;
elseif abs(i-j) == 1
b=2;
a(i,j) = 1;
case 2
else
a=2;
a(i,j) = 0;
b=1;
end
otherwise
for i=1:M
a=0;
if b(i)==0
b=0;
break;
end
end
a(i)=1/b(i); Логические
&—и
end
| — или
Прочее
~ — не
вызов внешней
clc
процедуры:
^
!myprogram.exe
.*
size(A) и length(b) отладка!
feof(fid) tic toc
Элементарная культура программы:
структура "лесенка":
for j = 1:n
a(i, j) = i+j ;
end
пробелы после запятых (и пустые строки в логичных местах):
hT=line(X(1:N), T*T0, 'EraseMode', 'xor', 'LineWidth', 2, 'Color', 'k');
значащие имена переменных:
strRMaxShow=get(hEdRMaxShow, 'String');
комментарии, где нужно и не лень: end%if stopflag==0
никаких "магических чисел" в программе!:
if B==2
alpha=alpha+((0.5-rand(1))/50;)
elseif B==3
alpha=alpha+sin(100*t)/5;
end
никаких длиннющих строк и формул, выходящих за пределы экрана:
integral=integral+(RoRiad(j+1)-RoRiad(j)RoTeorRiad(j+1)+RoTeorRiad(j))*XRiad(j)*besselj(1,
muB(k+1)*XRiad(j)/L)*h/(L^2*(XRiad(j+1)-XRiad(j)));
Графики функций одного переменного
Типичный пример,
функция задана численно:
function graphex
X=0:0.1:2*pi;
Y=sin(X);
hPlot=plot(X, Y, 'g:');
set(hPlot, 'LineWidth', 3);
axis([0 2*pi -1 1.1]);
hold on;
Y2=cos(X);
plot(X, Y2, 'r-');%либо сразу plot)X, Y, 'g:', X, Y2, 'r-')
title('Who wanted to know what are sin and cos like?', 'FontSize', 16);
set(gca, 'FontSize', 16);
xlabel('x-coordinate');
ylabel('Trigonometric functions');
legend('sin', 'cos', 'Location', 'SouthWest');
htextSin=text(2.4, 0.8, '\leftarrow sin(x)');
set(htextSin, 'FontSize', 16);
htextCos=text(5, 0.4, 'cos(x)\rightarrow', 'FontSize', 16,...
'HorizontalAlignment', 'right');
set(gcf, 'Color', [1 1 1]);
Чуть посложнее,
несколько подграфиков,
графики в логарифмическом масштабе,
две оси ординат:
function graphex2
X=0:0.5:100;
Y=exp(X);
subplot(1, 2, 1);
semilogy(X, Y, 'r-', 'LineWidth', 3);%еще semilogx и loglog
title('Y=exp(X) in semilog scale');
X2=0:100;
T=295-7*exp(-X2/5);
X3=0:2:100;
Phi=0.6+0.4*exp(-X3/10);
subplot(1, 2, 2);
[hDoubleAxes, hPlot1, hPlot2]=plotyy(X2, T, X3, Phi);
set(get(hDoubleAxes(1),'Ylabel'), 'String', 'Temperature, K', 'FontSize', 12);
set(hDoubleAxes(1), 'YLim', [288 295], 'YTick', 288:295, 'FontSize', 12);
set(hPlot1, 'Color', 'b', 'LineStyle', '-', 'LineWidth', 3);
set(get(hDoubleAxes(2),'Ylabel'),'String','Relative humidity', 'FontSize', 12);
set(hPlot2, 'Color', 'g', 'LineStyle', ':', 'LineWidth', 3);
set(hDoubleAxes(2), 'YLim', [0.5 1], 'YTick', 0.5:0.1:1, 'FontSize', 12);
set(gcf, 'Color', [1 1 1]);
Кое-что из области социологии:
function graphsociol
X=1:12;
Y=rand(size(X));
figure('Color', 'w');
bar(X, Y, 'r');
Y=rand(length(X), 3);
figure('Color', 'w');
bar(X, Y);
set(gca,'XTickLabel',{'Jan';'Feb';'Mar';'Apr';...
'May';'June';'July';'Aug';'Sep';'Oct';...
'Nov';'Dec'}, 'FontSize', 12);
colormap(flag(3));
Y=round(5+1.5*randn(90, 1));
figure('Color', 'w');
hist(Y, 1:10);
figure('Color', 'w');
Y=[21, 10, 10, 5, 54];
pie(Y, [0, 0, 0, 1, 0], {'ICEF', ...
'Foreigners', 'RES', 'MSU', 'HSE'});
colormap(jet(5));
Графики аналитических функций и функций, заданных в других m-файлах:
function graphAnalyt
subplot(1, 2, 1);
ezplot('cos(t)', 'sin(3*t)', [0 2*pi]);
axis([-1 1 -1 1]);
subplot(1, 2, 2);
f1='x.^2+y.^4+y-1';
hMyEZPlot=ezplot(f1, [-2 2 -2 2]);
set(gca, 'DataAspectRatio', [1 1 1]);
set(hMyEZPlot, 'LineWidth', 4);
figure;
f2=@MyFAnalyt;%или анонимная функция f2=@(x) x.^2;
fplot(f2, [-pi, pi]);%сравнить с ezplot(f2, [-pi, pi]);
function y=MyFAnalyt(x)
if abs(x)<pi/2
y=sin(x);
else
y=2*sign(x)-2*x/pi;
end
Указание погрешности,
график в полярных координатах:
function graphex3
X=[0, 1.5, 3.3, 5.6, 7.7, 12, 14.5, 16];
Y=rand(size(X));
ErrY=0.3*rand(size(X));
subplot(2, 1, 1);
errorbar(X, Y, ErrY, 'r-', 'LineStyle', 'none', 'Marker', '^',...
'MarkerSize', 9, 'MarkerFaceColor', 'b', 'MarkerEdgeColor', 'b');
Phi=0:0.01:2*pi;
Rad=sin(3*Phi)+3*cos(2*Phi);
subplot(2, 1, 2);
hPolPlot=polar(Phi, Rad);
set(hPolPlot, 'Color', [0.6 0.3 0.1], 'LineWidth', 3);
set(gcf, 'Color', [1 1 1]);
Рисование замкнутых фигур:
function ClosedShapes
N=5;
t=(0:1/N:1)*2*pi;
x=sin(t);
y=cos(t);
c=t;
fill(x, y, c);
axis square;
set(gca, 'XTick', [ ], 'YTick', [ ]);
hold on;
plot(x, y, 'r', 'LineWidth', 3);
figure;
line(x, y, 'Color', 'b');
© Copyright 2026 Paperzz