





Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Ejercicios resueltos bucles matlab
Tipo: Ejercicios
1 / 9
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!






B=rand(5,5) %El comando rand(m,n) genera una matriz de valores %aleatorios entre 0 y 1 de dimensión m x n B = 0.4733 0.9172 0.5678 0.9340 0. 0.3517 0.2858 0.0759 0.1299 0. 0.8308 0.7572 0.0540 0.5688 0. 0.5853 0.7537 0.5308 0.4694 0. 0.5497 0.3804 0.7792 0.0119 0. B(1:2:length(B),:) ans = 0.4733 0.9172 0.5678 0.9340 0. 0.8308 0.7572 0.0540 0.5688 0. 0.5497 0.3804 0.7792 0.0119 0. Para este caso en concreto, el comando da el resultado correcto, puesto que length(A) nos da la dimensión más grande de A. Si A es cuadrada, esa dimensión es la misma. Sin embargo, en el caso de que la matriz NO sea cuadrada, y la dimensión mayor no sea la de las filas, como nos pasó en el seminario, length no nos devolverá la dimensión de las filas, sino de las columnas, por lo que fallará (probadlo en MATLAB para ver el problema). La forma correcta de asegurarnos de que utilizamos las filas cuando queramos las filas, y las columnas cuando queramos columnas, es usando size(A,dim), donde dim=1 proporcionará las filas y dim= las columnas: A=rand(4,5) %matriz no cuadrada A = 0.5472 0.8407 0.9293 0.6160 0. 0.1386 0.2543 0.3500 0.4733 0. 0.1493 0.8143 0.1966 0.3517 0. 0.2575 0.2435 0.2511 0.8308 0. Impar=A(1:2:size(A,1),:) %size(A,1) nos da el número de filas totales Impar = 0.5472 0.8407 0.9293 0.6160 0. 0.1493 0.8143 0.1966 0.3517 0.
x=ones(4,1) x = 1 1 1 1 y=zeros(1,3) y = 0 0 0 z=diag([3,-2,7],0) %Usamos diag(v,0) para colocar el vector v %en la diagonal principal de una matriz de %tamaño length(v) x length(v) z = 3 0 0 0 - 2 0 0 0 7 yz=[y;z] %Concatenamos la fila y con la matriz z , usando ; yz = 0 0 0 3 0 0 0 - 2 0 0 0 7 xyz=[x,yz] %Concatenamos la columna x con la matriz y z , usando , xyz = 1 0 0 0 1 3 0 0 1 0 - 2 0 1 0 0 7
function [x,y,z]=sem1esfera(a1,a2,w1,w2,phi,theta,tf) t=[0:0.01:tf]; x=cos(a1t.^2+w1t+phi).cos(a2t.^2+w2+theta); %componente a y=cos(a1t.^2+w1t+phi).sin(a2t.^2+w2+theta); %componente,. z=sin(a1t.^2+w1t+phi);
function [x,y,z]=sem1esfera(a1,a2,w1,w2,phi,theta,tf) t=[0:0.01:tf]; x=cos(a1t.^2+w1t+phi).cos(a2t.^2+w2+theta); %componente a y=cos(a1t.^2+w1t+phi).sin(a2t.^2+w2+theta); %componente,. z=sin(a1t.^2+w1t+phi); plot(t,x,t,y,t,z) %dibujamos las 3 variables respecto ylabel('Distancia') %a t, plot(x1,y1,x2,y2,x3,y3,…) xlabel('Tiempo') legend('x','y','z')
function [x,y,z]=sem1esfera(a1,a2,w1,w2,phi,theta,tf) t=[0:0.01:tf]; x=cos(a1t.^2+w1t+phi).cos(a2t.^2+w2+theta); %componente a y=cos(a1t.^2+w1t+phi).sin(a2t.^2+w2+theta); %componente,. z=sin(a1t.^2+w1t+phi); subplot(2,1,1) %añadimos esta instrucción de cara a %generar el segundo gráfico plot(t,x,t,y,t,z) %dibujamos las 3 variables respecto ylabel('Distancia') %a t, plot(x1,y1,x2,y2,x3,y3,…) xlabel('Tiempo') legend('x','y','z') subplot(2,1,2) %cambiamos de subplot en uso plot3(x(1),y(1),z(1),'bo') %pintamos el primer punto de la hold on %trayectoria, y le pedimos que no se
%borre cuando comience el bucle for i=1:length(t) %generamos un bucle con el vector tiempos x2(i)=cos(a1t(i)^2+w1t(i)+phi)cos(a2t(i)^2+w2+theta); y2(i)=cos(a1t(i)^2+w1t(i)+phi)sin(a2t(i)^2+w2+theta); z2(i)=sin(a1t(i)^2+w1t(i)+phi); %calculamos cada elemento de los vectores x,y,z uno a uno, no %hace falta. plot3(x2,y2,z2,'k-') pause(0.001) %pause para que no dibuje todo de golpe xlim([min(x)-0.25,max(x)+0.25]) %establecemos límites ylim([min(y)-0.25,max(y)+0.25]) %para que los ejes no zlim([min(z)-0.25,max(z)+0.25]) %se muevan end plot3(x2(length(x2)),y2(length(y2)),z2(length(z2)),'ro') %trazamos el último punto de la trayectoria
π 2 , φ 0 = π 2 , α 2 = π, ω 2 = 0, θ 0 = π 4 En la ventana de comandos, introducimos:
a1=0; w1=pi/2; phi=pi/2; a2=pi; w2=0; theta=pi/4; [x,y,z]=sem1esfera(a1,a2,w1,w2,phi,theta,10); Este comando nos genera los vectores solución x,y,z, que para nuestra elección arbitraria de tf=10 tienen dimensión 1x1001, y dos gráficos:
hold on plot3(x(1),y(1),z(1),'bo') hold on for i=1:length(t) x2(i)=cos(a1t(i)^2+w1t(i)+phi).cos(a2t(i).^2+w2+theta); y2(i)=cos(a1t(i).^2+w1t(i)+phi).sin(a2t(i).^2+w2+theta); z2(i)=sin(a1t(i).^2+w1t(i)+phi); plot3(x2,y2,z2,'k-') pause(0.001) xlim([min(x)-0.25,max(x)+0.25]) ylim([min(y)-0.25,max(y)+0.25]) zlim([min(z)-0.25,max(z)+0.25]) if z2(i)<0 %establecemos la condición que finaliza el bucle break end end plot3(x2(length(x2)),y2(length(y2)),z2(length(z2)),'ro') Observamos que ha aparecido nuestra esfera, y que el gráfico se ha detenido una vez ha atravesado el ecuador. El punto de finalizado no se ve, pues la esfera es opaca. Si giramos el gráfico, nuestro código habrá marcado en rojo el punto final sobre el ecuador.
5. Crea un script que, al ejecutarlo, nos pida un número. A continuación, el script calculará los términos de Fibonacci hasta encontrarse con los dos más próximos a dicho número (el que está por encima, y el que está por debajo del valor dado). Seguidamente, el script debe preguntar si queremos que nos indique el término menor más próximo, o el mayor más próximo. Si como parámetro inicial recibe un número negativo, el programa debe dar un mensaje de error, indicando que la serie de Fibonacci no contiene números negativos. Si el número dado pertenece a la serie de Fibonacci, el programa debe indicárnoslo con un mensaje por pantalla. n=input('Dame un número\n'); if n<0 %Antes de operar, establecemos el error de números< error('La serie de Fibonacci no tiene números negativos') elseif n== fprintf('El 0 es e primer término de la serie de Fibonacci\n') return %Dado que el 0 es el 1er término, no necesitamos el bucle end F(1)=0; %primeros términos de la serie F(2)=1; i=2; while F(i)<n %Cálculo de Fib hasta que el término sea mayor o igual que n i=i+1; F(i)=F(i-1)+F(i-2); end Fmayor=F(i); %Definimos el superior y el inferior a n Fmenor=F(i-1); if F(i)==n %Si n pertenece a la serie fprintf('%d Es un número de la serie de Fibonacci\n',n) else %Si n no pertenece a la serie, debemos distinguir entre menor y %mayor b=input('Si quieres el menor más próximo, pulsa 1, si quieres el mayor más próximo, pulsa 2 \n'); if b==1; fprintf('El número de la serie de Fibonacci menor que %d más proximo es %d\n',n,Fmenor) elseif b==2; fprintf('El número de la serie de Fibonacci mayor que %d más proximo es %d\n',n,Fmayor) else %En caso de que no seleccionen ninguna de las opciones correctas fprintf('Ese no es un número válido') end end