F4 Grafik i Matlab

Matlab har ett stort antal funktioner för att skapa grafik (rita kurvor, ytor och andra grafiska objekt).

Några vanliga funktioner:

plot, plot3 : Rita figurer i 2- resp 3- dimensioner

bar, histogram, stem : Stapeldiagram, histogram

meshgrid, surf, contour : För 3-dimensionella ytor och nivåkurvor

fill, fill3 : Skapa ifyllda strukturer i 2- resp 3- dimensioner

imagesc : För att illustrera matriser

Sedan tillkommer diverse 'hjälpfunktioner' för att administrera och fixa till figurerna, T.ex.

figure, clf, hold on, hold off,

subplot

title, xlabel, ylabel, axis

text, gtext, grid on, grid off

Vilka av kommandona har du stött på i lab 1 och lab 2 ? (Lab1: uppgift 2, Lab2: uppgifterna 3-6).

Contents

Rita en triangel

figure(1);                % gör figur 1 aktuell
clf                       % ta bort allt innehåll från figur 1
x=[0.2, 0.8, 0.5, 0.2]    % x-koordinater
y=[0.1, 0.3, 0.7, 0.1]    % y-koordinater
plot(x,y,'o-')            % plot(x,y)

% Blir automatiska axlar
x =
    0.2000    0.8000    0.5000    0.2000
y =
    0.1000    0.3000    0.7000    0.1000
axis equal  % Kvadratiskt koordinatsystem
axis equal, axis([-0.1, 1.2, 0, 1])  % Lite luft runt triangeln

Text i figuren

txt = '(x_1,y_1)';       % (latex och tex stöds)
text(x(1)+0.1,y(1),txt); % texten placeras i (.3,.1)
txt = '(x_2,y_2)';
text(x(2)+0.1,y(2),txt);
txt = '(x_3,y_3)';
text(x(3)+0.1,y(3),txt);

Titel

title('En triangel');

Samma text men med for-loop

TXT = ['(x_1,y_1)'; '(x_2,y_2)'; '(x_3,y_3)'];
for i = 1:3
   txt = TXT(i,:);
   text(x(i)+0.1,y(i),txt,'Color','green');
end

% Color är attribut.
% Man anger paren 'attribut',attributvärde

Placera ut texten med musen istället

TXT = ['(x_1,y_1)'; '(x_2,y_2)'; '(x_3,y_3)'];
figure(1); clf;
plot(x,y,'o-');
axis equal, axis([-0.1, 1.2, 0, 1]);

for i = 1:3
    txt = TXT(i,:);
    gtext(txt,'FontSize',14)
end

% FontSize är ett attribut
h=plot(x,y,'r','LineWidth',2,'MarkerSize',10,'Marker','d');

% get(h)  för att visa vilka attribut som finns
% set(h,'attribut',attributvärde) för att sätta attribut till ett visst
% värde
%
% Man kan också använda sk. punktnotation och skriva
% h.attributnamn = attributvärde
%
% h.Marker = '<';
% h.MarkerSize = 10;
% h.LineWidth = 'yellow';

Fyll i triangeln med färg

hold on  % Vi ska rita mer
fill(x,y,[0.6 0.8 1])  % RGB för mesblått

% Färg i RGB anges med tre tal; Andel Rött,Grönt,Blått
% 1 är maximalt av färgen, 0 är inget av färgen.
% [1,1,1] blir vitt (maximalt av alla färger)
% [0,0,0] blir svart (inget av någon färg)
% [1,0,0] blir rött (maximalt rött, inget grönt, inget blått)

Rotera triangeln

Nu ritar vi om i ett större koordinatsystem

 clear all; clf; close all; clc

x=[0.2, 0.8, 0.5, 0.2];  % radvektorer
y=[0.1, 0.3, 0.7, 0.1];

fill(x,y,[0.6, 0.8, 1],'edgecolor',[0, 0, 1],'linewidth',2)
hold on
plot(x,y,'ro','linewidth',2,'markersize',5)
axis equal, axis([-1, 1, -1, 1])  % större ritområde
P=[x;y];              % matris med två rader
v=pi/3;               % rotation pi/3 moturs
A=[cos(v) -sin(v); sin(v) cos(v)]
A =
    0.5000   -0.8660
    0.8660    0.5000
clc
% Rita den roterade triangeln
Ph=A*P
xh=Ph(1,:);
yh=Ph(2,:);

fill(xh,yh,[1 0.8 1],'edgecolor',[0 0 1],'linewidth',2) % rosa triangel
hold on
plot(xh,yh,'ro','linewidth',2,'markersize',5)
Ph =
    0.0134    0.1402   -0.3562    0.0134
    0.2232    0.8428    0.7830    0.2232
for i=1:10
    Ph=A*P;
    xh=Ph(1,:);
    yh=Ph(2,:);
    fill(xh,yh,[1/i, i/10, 1/i],'EdgeColor',[0 0 1],'LineWidth',2)
    hold on
    plot(xh,yh,'ro','LineWidth',2,'MarkerSize',5)
    P=Ph;
   pause(1)
end

Rita en sluten kurva

Börja rita en cirkel med radie 3

t = linspace(0,2*pi);
r = 3;
x = r*cos(t); y = r*sin(t);
clf; plot(x,y); axis equal

Låt radien bero av vinkeln, r(t) = (2+sin(3t))/sqrt(1+exp(cos(t)))

t = linspace(0,2*pi);
r = (2+sin(3*t))./sqrt(1+exp(cos(t)));
x = r.*cos(t);
y = r.*sin(t);

clf
plot(x,y); axis equal

Hur många gånger skär kurvan enhetscirkeln?

hold on
xc = cos(t); yc = sin(t);
plot(xc,yc);  % enhetscirkeln

Vilka vinklar skär kurvan enhetscirkeln ?

clf;
t = linspace(0,2*pi);
r = (2+sin(3*t))./sqrt(1+exp(cos(t)));
plot(t,r,'color','blue'); hold on;
plot(t,ones(1,100),'red');

f = @(t)(2+sin(3*t))./sqrt(1+exp(cos(t)))-1;
v1 = fzero(f,2);

hold on; plot(v1,1,'o')

% I uppgift 4 lab 2 ritar man slutna kurvor.