Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Programación informática, Apuntes de Informática

Base a la programacion, temas, funcionamiento realidad

Tipo: Apuntes

2019/2020

Subido el 19/08/2020

raul-maldonado-2
raul-maldonado-2 🇻🇪

1 documento

1 / 42

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Victoria Prieto (Vicky)
INFORMÁTICA (MATLAB)
Programas resueltos
- Hechos en clase
- Ejercicios resueltos
- Programas de examen
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a

Vista previa parcial del texto

¡Descarga Programación informática y más Apuntes en PDF de Informática solo en Docsity!

Victoria Prieto (Vicky)

INFORMÁTICA (MATLAB)

Programas resueltos

- Hechos en clase

- Ejercicios resueltos

- Programas de examen

En este “libro” encontraréis una colección de aproximadamente 80

programas resueltos en MATLAB.

Entre ellos se encuentran todos los programas resueltos en clase por

el profesor en el curso 2015/16, además de los ejercicios de boletín propuestos y otros ejercicios adicionales de examen, organizados por orden alfabético (tal y como los encontré en mi carpeta).

Todos estos programas son los que hice de cara al examen, espero que os sirvan para aprobar.

-Vicky-

function r=busqueda_lineal_todos(v,x) %Devuelve en r un ector con todas las posiciones donde haya coincidencia. %r=1 si no hay ninguna L=length(v); r=[]; %vector vacío inicialmente cont=1; for i=1:L if v(i)==x %r=[r i]; %añadimos una componente más al vector (esta sería una %forma de hacerlo) r(cont)=i; cont=cont+1; %Segunda forma de hacerlo end end end

ANAGRAMA

%Ejercicio 3.5: Identificación de anagramas

function anagrama(cad1,cad2) r=identificaSimbolo(cad1,cad2); if r== disp('Es un anagrama'); else disp('No es un anagrama'); end end

function [r]=identificaSimbolo(cad1,cad2) N=length(cad1); M=length(cad2); i=1; j=1; r=0; %Suponemos inicialmente que no hay coincidencia alguna for i=1:N for j=1:M if cad1(i)==cad2(j) r=1; end end end end

ÁREA DEL CÍRCULO

%Cálculo del área círculo

function area_circulo r=input('Radio del círculo: '); a=area(r); fprintf('El área es %f\n',a); end

function A=area(radio)

A=3.1415radioradio; end

BUSCA-CADENA

%Ejercicio 3.6: Búsqueda de una cadena dentro de otra

function [pos]=busca_cadena(buscada,texto) N=length(texto); M=length(buscada); r=0; cont=0; i=1; pos=[]; while i<=N && r== k=i; for j=1:M if buscada(j)==texto(i) cont=cont+1; pos=[pos,i]; end if cont==M r=1; else pos=[]; end i=k+1; end end

BÚSQUEDA

% Búsqueda binaria function busqueda_algoritmo v=[5 -2 0 3 7 9 9]; x=input('x= '); r=busqueda_binaria(v,x); %r=posicion del elemento buscado en el vector v. =0 si no lo encuentra disp(r); end

function r=busqueda_binaria(v,x) %Suponemos vector v ordenado de menor a mayor L=length(v); i=1; j=L; while i<=j %mientras i sea menor que j, el vector puede seguir dividiendose m=fix((i+j)/2); %fix permite truncar if v(m)==x r=m; %La hemos encontrado i=j+1; %Para forzar salida del bucle elseif v(m)>x j=m-1; %Nos quedamos con la mitad izquierda de v elseif v(m)<x

function c=cont_n(i,n) v=zeros; v=transf_vect(i); %Función que nos transforma el número i en un vector N=length(v); c=0; for i=1:N if n==v(i) c=c+1; end end end

function v=transf_vect(i) m=10; cont=1; while fix(i/m)~= cont=cont+1; m=m10; end N=cont; %Dimensión del vector que queremos crear m=(10^(N-1)); v=zeros; j=0; while m>= j=j+1; if j<=N v(j)=fix(i/m); i=i-v(j)m; end m=m/10; end end

CADENA GUIONES

%Función que, recibiendo una cadena de caracteres, recorre la cadena %sustituyendo por guiones cada espacio en blanco

function rellenar_guiones s=input('Cadena= ','s'); %se utiliza 's' para que pueda leer los caracteres re=rellena(s); %función que devuelve la cadena con guiones fprintf('Cadena con guiones=%s\n',re); % el "%s" se usa para que devuelva caracteres end

function re=rellena(s) N=length(s); for i=1:N if s(i)== re(i)=95; else re(i)=s(i); end end end

COMPARACIÓN ALGORITMOS

% comparación de tiempo de ejecución de dos algoritmos N=1000;

% Algoritmo A: mostrar por pantalla número de 1 a N for i=1:N %creamos el vector en el que cada componente coincide con su posición v(i)=i end for i=1:N disp(v(i)); end t1=toc; %La complejidad del primero es mayor porque es como mínimo de 2N, pues %hay realizar dos iteraciones

%Algoritmo B: Mostrar por pantalla número 1 a N for i=1:N disp (i); end t2=toc; fprintf('Algoritmo A=%f seg\n', t1) fprintf('Algoritmo B=%f seg\n', t2)

%La complejidad de este problema es mucho menor, tan solo tiene que %realizar una iteración

COMPARACIÓN TRES VALORES

% Ejercicio 1.3: Determinar si hay valores iguales

a=input('Introduzca primer valor(a): '); b=input('Introduzca segundo valor(b): '); c=input('Introduzca tercer valor(c): '); cont=0; if a==b cont=cont+1; end if a==c cont=cont+1; end if b==c cont=cont+1; end if cont>= disp('los tres son iguales'); elseif cont== disp('hay dos valores iguales'); elseif cont< disp('no hay valores iguales'); end

DETERMINA TIPO DE TRIÁNGULO

%Ejercicio 2.8: Identificación del tipo de triángulo

function determina_triangulo a=input('a= '); b=input('b= '); c=input('c= '); %Comprobamos que es un triángulo if (a+b)>c && (a+c)>b && (b+c)>a %Comprobamos si es equilátero if a==b && a==c disp('Es un triángulo equilátero'); elseif a==b || a==c || b==c disp('Es un triángulo isósceles'); else disp('Es un triángulo escaleno'); end else disp('No es un triángulo'); end end

DETERMINA SI ES PRIMO

% Determinar si un número es primo n=input('Introduce n: '); d=2; while mod(n,d)~= d=d+1; end if d==n disp('Es primo'); else disp('No es primo'); end

ECUACIÓN DE SEGUNDO GRADO

% Ejercicio 1.4: Ecuación de segundo grado

a=input('Introduzca coeficiente a: '); b=input('Introduzca coeficiente b: '); c=input('Introduzca coeficiente c: '); %calculamos el discriminante d=bb-4ac; if d< disp('Soluciones complejas'); d=-d; im=sqrt(d)/(2a); re=-b/(2a); fprintf('x1=%.2f\n+i%.2f\n',re,im); fprintf('x2=%.2f\n-i%.2f\n',re,im); else x1=(-b+sqrt(d))/(2a); x2=(-b-sqrt(d))/(2*a);

if x1==x disp('Solución doble'); fprintf('x=%.2f\n',x1); elseif (x1==0 & x2==-0)|(x1==-0 & x2==0) disp('Solución doble'); disp('x=0'); else fprintf('x1=%.2f\n',x1); fprintf('x2=%.2f\n',x2); end end

EJ. EULER I

% Integración numérica. Aproximación de integrales definidas por el método de Euler

function ej_Euler_I a=input('a= '); b=input('b= '); n=input('n= '); %Pedimos el número de intervalos A=Euler_I(a,b,n); disp(A); end

%----------------------------- function A=Euler_I(a,b,n) a=0; d=(b-a)/n; A=0; for k=0:n- A=A+df(a+dk); end end

%----------------------------------

function y=f(x) y=x^2; end

%%%%Hacerlo también mediante el método de los trapecios

%%%%Hacer la combinación con la interpolación

EJ. EULER II (MÉTODO DE LOS TRAPECIOS)

% Integración numérica. Aproximación de integrales definidas por el método de Euler con trapecios

function ej_Euler_II a=input('a= '); b=input('b= '); n=input('n= '); %Pedimos el número de intervalos A=Euler_I(a,b,n); disp(A);

yast=a*xast+b; end end

EJ. MÍNIMOS CUADRADOS

%Ejemplo mínimos cuadrados

function ej_minimos_cuadrados %Datos de ejemplo (aproximadamente sobre y=2*x+1) x=[0 1 2 3 4 5]; y=[0.8 3.2 4.7 6.9 9.3 11.6]; %Calculamos coeficientes de regresión [a,b]=min_cuad(x,y); %Representación gráfica plot(x,y,'k.',[x(1) X(N)],[ax(1)+b,ax(N)+b],'b') end

%-----------------------------

function min_cuad(x,y) N=length(x); %Cálculo de sumatorios sxk=0; syk=0; sxkyk=0; sxk2=0; for k=1:N sxk=sxk+x(k); syk=syk+y(k); sxkyk=sxkyk+x(k)y(k); sxk2=sxk2+x(k)x(k); end %Se calculan los coeficientes usando los sumatorios calculados y aplicando las fórmulas correspondientes a=(Nsxkyk-sxksyk)/(Nsxk2-sxksxk); b=(syk-a*sxk)/N; end

EJEMPLO EDO

%Ejemplo ingtegración de EDOs: %Problema: dx(t)/dt=-2*x(t); x(0)=

function ejemplo_edo tfinal=input('tfinal '); %Instante de tiempo en el que queremos finalizar la simulación h=input('h= '); [t,x]= Euler_II(tfinal,h );%Deberá devolver dos vectores, el del tiempo y el de x plot(t,x); %Gráfica end

%----------------------- function [t,x]=Euler_II(tfinal,h) %Condiciones iniciales

t(1)=0; %Consideramos que el vector de tiempo comienza en 0 x(1)=1; %Condición inical en x(0), en MATLAB no podemos poner x(0) porque no hay componente 0 de un vector k=1; while t(k)<tfinal x(k+1)=x(k)+h(-2x(k)); t(k+1)=t(k)+h; k=k+1; end end

EJEMPLO EDO PROYECTIL

%Ejemplo EDO Euler: proyectil que cae al suelo en vertical

%F=ma %-mg=m(d^2x(t))/dt^ %d^2x(t)/dt^2=-g %x(0)= %dx(t)/dt)=vo=10 m/s en t=

%Este problema no se puede plantear como el de la taza de café, ya que es %de segundo orden, sino que habrá que plantearlo como un sistema de dos %ecuaciones de primer orden

%----> dv(t)/dt=-g && dx(t)/dt=v(t) %----> condiciones iniciales: x(0)=0; v(0)=vo;

%Ejemplo integración : proyectil que cae sin rozamiento

function ejemplo_edo_proyectil tfinal=input('tfinal '); %Instante de tiempo en el que queremos finalizar la simulación h=input('h= '); x=input('T0= '); [t,T]= Euler_II(tfinal,h,T0 );%Deberá devolver dos vectores, el del tiempo y el de x plot(t,T); %Gráfica end

%----------------------- function [t,x]=Euler_II(tfinal,h) %Condiciones iniciales t(1)=0; %Consideramos que el vector de tiempo comienza en 0 x(1)=0; %Condición inical en x(0), en MATLAB no podemos poner x(0) porque no hay componente 0 de un vector v(0)=10; %(m/s) Velocidad inicial k=1; flag=0; while t(k)<tfinal v(k+1)=v(k)+h(-9.81) x(k+1)=x(k)+h(v(k)); t(k+1)=t(k)+h; % Si queremos guardar tiempo hasta que T<40ºC if flag == 1 && x(k)<= fprintf('T=40º en t=%f\n',t(k));

%de segundo orden, sino que habrá que plantearlo como un sistema de dos %ecuaciones de primer orden

%----> dv(t)/dt=-g && dx(t)/dt=v(t) %----> condiciones iniciales: x(0)=0; v(0)=vo;

%Ejemplo integración : proyectil que cae sin rozamiento

function ejemplo_edo_tiro_vertical tfinal=input('tfinal '); %Instante de tiempo en el que queremos finalizar la simulación h=input('h= '); [t,x]= Euler_II(tfinal,h );%Deberá devolver dos vectores, el del tiempo y el de x plot(t,T); %Gráfica end

%----------------------- function [t,x]=Euler_II(tfinal,h) %Condiciones iniciales t(1)=0; %Consideramos que el vector de tiempo comienza en 0 x(1)=0; %Condición inical en x(0), en MATLAB no podemos poner x(0) porque no hay componente 0 de un vector v(0)=10; %(m/s) Velocidad inicial k=1; flag=0; % while t(k)<tfinal while x(k)>=0 %Si tenemos otras condiciones que nos hagan parar antes v(k+1)=v(k)+h(-9.81) x(k+1)=x(k)+h(v(k)); t(k+1)=t(k)+h; k=k+1; end

EJEMPLO EDO TIRO VERTICAL ROZAMIENTO

%Ejemplo EDO Euler: proyectil que cae al suelo en vertical con rozamiento

%F=ma %-mg=m(d^2x(t))/dt^ %d^2x(t)/dt^2=-g %x(0)= %(dx(t)/dt)=vo=10 m/s en t=

%Este problema no se puede plantear como el de la taza de café, ya que es %de segundo orden, sino que habrá que plantearlo como un sistema de dos %ecuaciones de primer orden

%----> dv(t)/dt=-g-kf/mv(t)|v(t)| && dx(t)/dt=v(t) %----> condiciones iniciales: x(0)=0; v(0)=vo;

%Ejemplo integración : proyectil que cae sin rozamiento

function ejemplo_edo_tiro_vertical_rozamiento

tfinal=input('tfinal '); %Instante de tiempo en el que queremos finalizar la simulación h=input('h= '); [t,x]= Euler_II(tfinal,h );%Deberá devolver dos vectores, el del tiempo y el de x plot(t,T); %Gráfica end

%----------------------- function [t,x]=Euler_II(tfinal,h) %Condiciones iniciales t(1)=0; %Consideramos que el vector de tiempo comienza en 0 x(1)=0; %Condición inical en x(0), en MATLAB no podemos poner x(0) porque no hay componente 0 de un vector v(0)=10; %(m/s) Velocidad inicial k=1; flag=0; % while t(k)<tfinal while x(k)>=0 %Si tenemos otras condiciones que nos hagan parar antes v(k+1)=v(k)+h(-9.81-0.5/5v(k)abs(v(k)) x(k+1)=x(k)+h(v(k)); t(k+1)=t(k)+h; end k=k+1; end

EJEMPLO ORDENACIÓN BURBUJA

%Ordenación burbuja (Bubble sort) %[4,-1,3,2], se comparan dos elementos y se ve si están en orden o no, en %el ultimo caso, se reordena; se repite con todas las parejas posibles. %Tras una primera pasada, el primer elemento coincidirá con el más pequeño.

%Se hacen tantas pasadas -1 como elementos tenga el vector

%PASADA 1: n-1 comparaciones// PASADA 2: n-2 comparaciones// En cada pasada %realizamos una iteración menos

%Ordenación por el método de la burbuja function ejemplo_ordenacion_burbuja v=[4 -1 3 2]; v=ordena_burbuja(v); disp(v); end

function v=ordena_burbuja(v) n=length(v); i=1; while i<=n-1 %Realizamos n-1 pasadas for j-1:-1:i if v(j)>v(j+1) %Si están fuera de orden aux=v(j); %los intercambiamos v(j)=v(j+1);

%v=[2 5 3 6 -1 8 4] %pivote=v((i+j)/2); se comparan los valores del vector con el pivote, %intercambiando si sus valores no están en el orden correcto.

% ATENCIÓN: floor redondea al entero más pequequeño y fix tan solo trunca, % la diferencia se observa en números negativos %Ordenación QuickSort function ejemplo_Quicksort v=[2 5 3 6 -1 8 4]; L=length(v); v=quicksort(v,1,L); disp(v); end

function v=quicksort(v,inicio,fin) %Función recursiva que ordena vector v entre componente inicio y fin i=inicio; j=fin; pos_pivote=fix((i+j)/2); pivote=v(pos_pivote); while i<=j % Buscamos componentes mayores que el pivote a su izquierda while v(i)<pivote i=i+1; end % Buscamos componentes menores que el pivote a su derecha while v(j)>pivote j=j-1; end %Intercambiamos componentes i y j if i<=j aux=v(i); v(i)=v(j); v(j)=aux; i=i+1; j=j-1; end end if inicio<j %Si la mitad inferior mide 2 o más componentes v=quicksort(v,inicio,j); %Ordeno mitad inferior del vector end if i<fin %Si la mitad superior mide 2 o más componentes v=quicksort(v,i,fin); %Ordeno mitad superior del vector end end

ES PALINDROMO

%Ejercicio 3.2: Determina si una cadena es palíndromo

function [r]=es_palindromo(cad) cad_esp=sinEspacios(cad); cad_may=mayusculas(cad_esp); N=length(cad_may); i=0; j=N+1;

r=1; while i<=j i=i+1; j=j-1; if cad_may(i)~=cad_may(j); r=0; break end end if r== disp('Es palíndromo'); else disp('No es palíndromo'); end end

function cad_esp=sinEspacios(cad) N=length(cad); k=0; for i=1:N if cad(i)~=' ' k=k+1; cad_esp(k)=cad(i); end end end

function cad_mayusc=mayusculas(cad) N=length(cad); for i=1:N if cad(i)<='z' && cad(i)>='a' cad_mayusc(i)=cad(i)+'A'-'a'; else cad_mayusc(i)=cad(i); end end end

ES PERFECTO

function [r]=esperfecto(n) n=input('Introduzca n: '); sum=0; for i=1:n- if mod(n,i)== sum=sum+i; end end if sum==n r=1; else r=0; end end