You are on page 1of 9

18/10/2017

function [m,p]=minpos(v)
%[m,p]=minpos(v)
%devuelve el minimo y la posicion
m=v(1); p=1; %supongo que el minimo es el primer valor
for i=2:length(v)
if v(i)<=m
m=v(i); %nuevo minimo
p=1;
end
end

>> edit minpos.m


>> help minpos
[m,p]=minpos(v)
devuelve el minimo y la posicion
>> [minimo,posicion]=minpos([2 3 -1 4 -5 2 5])
minimo = -5
posicion = 1
function [m,p]=minpos(v)
%[m,p]=minpos(v)
%devuelve el minimo y la posicion
m=v(1); p=1; %supongo que el minimo es el primer valor
for i=2:length(v)
if v(i)<=m
m=v(i); %nuevo minimo
p=1;
elseif v(i)==m
p=[p i];
end
end

ACABAR

BUCLE ANIDADO: Producto de todos los elementos de una matriz


function p=prodmat(A)
%producto de los elementos de una matriz
[m,n]=size(A);
p=1;
for i=1:m
for j=1:n
p=p*A(i,j);
end
end

BUCLE ANIDADO: Producto de dos matrices


function C=prodmat(A,B)
%producto de dos matrices
[mA,nA]=size(A); [mB,nB]=size(B)
if nA~=mB error('Dimensiones incorrectas'); end
for i=1:mA %Filas de la matriz C
for j=1:nB %Columnas de la matriz C
C(i,j)=A(i,:)*B(:,j);
end
end
function C=prodmat(A,B)
%producto de dos matrices
[mA,nA]=size(A); [mB,nB]=size(B);
if nA~=mB error('Dimensiones incorrectas'); end
for i=1:mA %Filas de la matriz C
for j=1:nB %Columnas de la matriz C
C(i,j)=0;
for k=1:nA
C(i,j)=C(i,j)+A(i,k)*B(k,j)
end
end
end

>> prodmat([1 2 3],[2 5; 1 2])


??? Error using ==> prodmat at 4
Dimensiones incorrectas

NOTA: El bucle se ejecuta tantas veces como marcamos en i:[], y en un bucle anidado se ejecuta i
veces por j veces.

Entender los resultados de un bucle

BUCLES WHILE: Se ejecutan mientras se cumpla una condición. Black


Jack.
num2str(suma): Cambia un numero a una cadena, para poder combinar
texto y un numero

‘return’ sale de la función; ‘break’ sale del bucle

function suma=blackjack(valmax)
%version simplificada del blackjack o 21
%Hay que aproximarse a valmax sin pasarse
suma=0;
while suma<=valmax
disp(['Tu suma es ',num2str(suma),' y el maximo es
',num2str(valmax)]);
res=input('Quieres otra carta? 1=SI');
if res~=1 disp('TE HAS PLANTADO'); return; end
carta=ceil(10*rand);
disp(['Has sacado un ',num2str(carta)]);
suma=suma+carta;
end
disp('TE PASASTE!!!')

>> blackjack(30);
Tu suma es 0 y el maximo es 30
Quieres otra carta? 1=SI1
Has sacado un 10
Tu suma es 10 y el maximo es 30
Quieres otra carta? 1=SI1
Has sacado un 2
Tu suma es 12 y el maximo es 30
Quieres otra carta? 1=SI1
Has sacado un 10
Tu suma es 22 y el maximo es 30
Quieres otra carta? 1=SI1
Has sacado un 10
TE PASASTE!!!
25/10/17
 Break : rompe un bucle
 Continue: vuelve al principio del bucle
 Return: vuelve al pricipio de la función

j=0; >> edit ejemplo


for i=1:5 >> ejemplo
if j==3 continue; end %Cuando 5 5
j vale 3 no pasa a la siguiente
linea del bucle >> ejemplo
j=j+1;
5 4
end
disp([i j])
>> ejemplo
5 3

GRÁFICOS
Plot(x,y,’estilo’)
Utilizando el puntero dentro de la figura se puede cambiar el formato de la gráfica
Con el comando ‘’hold’’ se puede mantener una curva y crear otra en la misma figura
 Xlabel(‘ ‘): le pone rotulo al eje x
 Ylabel(‘ ‘): le pone rotulo al eje y
 Title(‘ ‘): le pone titulo a la figura
 Legend(‘ ‘) crea una leyenda con nombres para las curvas
 Xlim([a a]): pone limites al eje x
 Ylim([a a]): pone limite al eje y
 Subplot(filas,columnas,graficoenelquetrabajo): crea una figura con varios graficos
 Clf: bora una figura
 Quiver(origen del vector x, origen del vector y, dirección x, dirección y, escala del vector
opcional)

>> x=linspace(-pi,pi);
>> y=x.*cos(x)-sin(x);
>> plot(x,y)
>> x=linspace(-pi,pi,5);
>> y=x.*cos(x)-sin(x);
>> figure
>> plot(x,y)
>> x=linspace(-pi,pi,25);
>> y=x.*cos(x)-sin(x);
>> plot(x,y,'r--^')
>> hold off
>> hold on
>> y2=x.*cos(x)-sin(x);
>> plot(x,y2,'b-x')
>> grid on
>> %añade una rejilla en la figura
>> hold on
>> plot(x,y2,'b-x')
>> y2=x.*sin(x)-cos(x);
>> plot(x,y2,'b-x')
>> xlim([-5 5])
>> ylim([-1 4])
>> title('mi figura')
>> xlabel('Eje X')
>> ylabel('Eje Y')
>> legend('Curva 1','Curva 2')
>> plot(x,y2,'b-x')
>> y=[1e-3 2 1 1e5 200 .00001];
>> hold off
>> plot(y,'b')
>> plot(log(y),'b')
>> semilogy(y,'bx')
>> hold on
>> plot(log(y),'r^')
>> %Cambia el orden de la escala para poder apreciar los valores
>> subplot(3,2,1)
>> subplot(3,2,5)
>> plot(x,y2,'b-x')
>> for=1:6; subplot(3,2,i); title(['grafico ',num2str(i)]); end
for=1:6; subplot(3,2,i); title(['grafico ',num2str(i)]); end

Error: The expression to the left of the equals sign is not a valid
target for
an assignment.

>> for i=1:6; subplot(3,2,i); title(['grafico ',num2str(i)]); end


>> subplot(3,2,5)
>> hold on
>> plot(x,-y2,'r-o')
>> %te lo aplica al grafico activo, al ultimo subplot
>> subplot(3,2,3)
>> plot(x,-y2,'r-o')
>> %quita el titulo porque sin hold on no mantiene nada
EJEMPLO: Círculo

R=2; >> x=linspace(-2,2,20);


theta=linspace(0,2*pi,100); >> y=sqrt(4-x.^2);
x=R*cos(theta); >> plot(x,y)
y=R*sin(theta); >> hold on
plot(x,y) >> y2=-sqrt(4-x.^2);
>> plot(x,y2)
>> edit ejemplo
>> ejemplo
%Posicion de un solo punto
R=2; theta=linspace(0,2*pi,100);
x=R*cos(theta); y=R*sin(theta);
plot(x,y);
xp=R*cos(pi/4); yp=R*sin(pi/4);
hold on;
plot(xp,yp,'ro','MarkerSize',12)

%Animacion con varios puntos


R=2;
theta=linspace(0,10*pi,100); %si
cambias 2*pi por otro numero
dará más o menos vueltas
x=R*cos(theta); y=R*sin(theta);
plot(x,y);
for t=theta
xp=R*cos(t); yp=R*sin(t);
plot(x,y); %curva entera
hold on
plot(xp,yp,'r-
o','MarkerSize',12); %particula
quiver(xp,yp,-
R*sin(t),R*cos(t)); %velocidad
xlim([-4 4]); ylim([-4 4]);
%si no lo fijo va cambiando la
escala de los ejes
axis square %mantiene la
proporcion cuadrada de los ejes
pause(0.1) %medio segundo de
pausa
hold off
end

%Animacion de una espiral


R=2; vz=0.5; theta=linspace(0,6*pi,100); %si cambias 2*pi por otro
numero dará más o menos vueltas
x=R*cos(theta); y=R*sin(theta); z=vz*theta;
plot3(x,y,z); %con el circulito puedes cambiar la perspectiva en la
figura
for t=theta
xp=R*cos(t); yp=R*sin(t); zp=vz*t;
plot3(x,y,z); %curva entera
hold on
plot3(xp,yp,zp,'r-o','MarkerSize',12); %particula
quiver3(xp,yp,zp,-R*sin(t),R*cos(t),vz,'r'); %velocidad
xlim([-4 4]); ylim([-4 4]); %si no lo fijo va cambiando la escala
de los ejes
axis square %mantiene la proporcion cuadrada de los ejes
pause(0.1) %medio segundo de pausa
hold off
end
x=linspace(-pi,pi,30);
y=linspace(-2*pi,2*pi,50);
[X Y]=meshgrid(x,y); %construye una matriz con todas las combinacines
de x y
z=cos(X).*sin(Y);
mesh(X,Y,z)

x=linspace(-pi,pi,10);
y=linspace(-pi,pi,20);
[X Y]=meshgrid(x,y); %construye una matriz con todas las combinacines
de x y
z=X.*sin(Y);
surf(X,Y,z)
x=linspace(-pi,pi,10);
y=linspace(-pi,pi,20);
[X Y]=meshgrid(x,y); %construye una matriz con todas las combinacines
de x y
z=X.*sin(Y);
contour(X,Y,z,15)
%15 es el numero de lineas que quiero y con colourbar veo los niveles

You might also like