Contents
Ejercicio 1
Imprimir una tabla formateada (entero y real) del logaritmo natural de los numeros 10, 20, 40, 60 y 80. Sugerencia: usar el comando fprintf y vectores
format short x=[10 20 40 60 80]'; y=[x log(x)]; fprintf(' Numero\tln(Numero)\n'); fprintf('%5d \t %.4f\n',y');
Numero ln(Numero) 10 2.3026 20 2.9957 40 3.6889 60 4.0943 80 4.3820
Ejercicio 2
IMC Tenemos una función en otro fichero donde a la que llamaremos para este ejercicio. La recogemos a continuación:
% function [val msg] = imc(peso, est) % % val=peso/est^2; % if val<16 % msg='Infrapeso:Delgadez Severa'; % elseif val<17 % msg='Infrapeso:Delgadez Moderada'; % elseif val<18.5 % msg='Infrapeso:Delgadez Aceptable'; % elseif val<25 % msg='Peso Normal'; % elseif val<30 % msg='Sobrepeso'; % elseif val<35 % msg='Obeso: Tipo I'; % elseif val<40 % msg='Obeso: Tipo II'; % else % msg='Obeso: Tipo III'; % end % Hacemos un par de pruebas para poder mostrar su funcionamiento: [val,msg]=imc(80,1.60) [val,msg]=imc(90,1.5) [val,msg]=imc(70,1.8) [val,msg]=imc(70,1.93) [val,msg]=imc(40,1.60) [val,msg]=imc(40,1.50) % No se puede mostrar un programa que realice esto de forma reiterada hasta % que se permita finalización.
val = 31.2500 msg = 'Obeso: Tipo I' val = 40 msg = 'Obeso: Tipo III' val = 21.6049 msg = 'Peso Normal' val = 18.7925 msg = 'Peso Normal' val = 15.6250 msg = 'Infrapeso:Delgadez Severa' val = 17.7778 msg = 'Infrapeso:Delgadez Aceptable'
Ejercicio 3
fprintf('10 base 2\t') cambia_base(10,2) fprintf('\n245 base 4\t') cambia_base(245,4) fprintf('\n60 base 7\t') cambia_base(60,7) fprintf('\n689 base 14\t') cambia_base(689,14) fprintf('\n')
10 base 2 1010 245 base 4 3311 60 base 7 114 689 base 14 373
Ejercicio 4
Método de Newton Introducimos la función y su derivada
f=inline('x.^3-sin(x)') df=inline('3*x^2-cos(x)') % Para realizar la tarea deseada se ha escrito una función recursiva que % calcula de manera autónoma el método de Newton. Se recoge a continuación. % function [ ans ] = newtonrec( f , df , x , tol) % %newtonrec Newton recursivo por JMAD % % Función que nos obtiene el valor de una raíz mediante el método de % % newton recogido de forma recursiva % % f es la función; df, su derivada; x, el valor inicial; y tol, el error % fx=f(x); % dfx=df(x); % if abs(fx)<tol % ans = x; % elseif ( abs(dfx)== 0 | fx==0 ) % ans= 'No tiene solución con ese valor inicial'; % else % x=x-fx/dfx; % ans= newtonrec(f,df,x,tol); % end % Introducimos cada valor inicial en la función recursiva xo=[-0.75,-0.5,0,.5,1.4]; x1=newtonrec(f,df,xo(1),10^-10); x2=newtonrec(f,df,xo(2),10^-10); x3=newtonrec(f,df,xo(3),10^-10); x4=newtonrec(f,df,xo(4),10^-10); x5=newtonrec(f,df,xo(5),10^-10); x=[x1,x2,x3,x4,x5]; fx=f(x); resultados=[xo' x' fx'] fprintf('Valor inicial\tValor final\tFunción en ese punto\n') for i=1:5 fprintf(' %.2f \t %.5f \t %2d \n',resultados(i,:)) end
f = Inline function: f(x) = x.^3-sin(x) df = Inline function: df(x) = 3*x^2-cos(x) resultados = -0.7500 -0.9286 -0.0000 -0.5000 0.9286 0 0 0 0 0.5000 -0.9286 0 1.4000 0.9286 0.0000 Valor inicial Valor final Función en ese punto -0.75 -0.92863 -1.265654e-14 -0.50 0.92863 0 0.00 0.00000 0 0.50 -0.92863 0 1.40 0.92863 2.875866e-11
Ejercicio 5
Refrigeración
A = [100 0 0 0 -1 1 0;0 200 0 0 0 -1 1;0 0 50 0 -1 0 0;0 0 0 100 0 -1 0;
0 300 0 0 0 0 -1;1 0 1 0 0 0 0;1 -1 0 -1 0 0 0]
b = [0 0 -50 -50 -50 25 0]'
% Introducidos los datos resolvemos el sistema
X = A \ b
A = 100 0 0 0 -1 1 0 0 200 0 0 0 -1 1 0 0 50 0 -1 0 0 0 0 0 100 0 -1 0 0 300 0 0 0 0 -1 1 0 1 0 0 0 0 1 -1 0 -1 0 0 0 b = 0 0 -50 -50 -50 25 0 X = 1.0e+03 * 0.0054 0.0009 0.0196 0.0045 1.0321 0.4964 0.3179
Ejercicio 6
Diferentes condiciones sobre la matriz del ejercicio anterior
A = [100 0 0 0 -1 1 0;0 200 0 0 0 -1 1;0 0 50 0 -1 0 0;0 0 0 100 0 -1 0; 0 300 0 0 0 0 -1;1 0 1 0 0 0 0;1 -1 0 -1 0 0 0]; % Número de condición numcondicion = cond(A) % Norma 1 n1 = norm(A,1) % Norma 2 n2 = norm(A) % Norma infinito ninf=norm(A,Inf) %Norma frobenius nfrobenius=norm(A,'fro') % Factorización LU [L U] = lu(A) % Volvemos a introducir b por si acaso b = [0 0 -50 -50 -50 25 0]'; % Aplicamos X = U^-1*L^-1*b
numcondicion = 2.6488e+04 n1 = 501 n2 = 360.5570 ninf = 301 nfrobenius = 390.5278 L = 1.0000 0 0 0 0 0 0 0 0.6667 0 0 0 1.0000 0 0 0 1.0000 0 0 0 0 0 0 0 1.0000 0 0 0 0 1.0000 0 0 0 0 0 0.0100 0 0.0200 0 1.0000 0 0 0.0100 -0.0033 0 -0.0100 0.3333 0.0167 1.0000 U = 100.0000 0 0 0 -1.0000 1.0000 0 0 300.0000 0 0 0 0 -1.0000 0 0 50.0000 0 -1.0000 0 0 0 0 0 100.0000 0 -1.0000 0 0 0 0 0 0.0300 -0.0100 0 0 0 0 0 0 -1.0000 1.6667 0 0 0 0 0 0 -0.0311 X = 1.0e+03 * 0.0054 0.0009 0.0196 0.0045 1.0321 0.4964 0.3179
Ejercicio 7
Autovalores y autovectores de la matriz
A = [0 1 -1;-6 -11 6;-6 -11 5] [auto_vectores auto_valores] = eig(A)
A = 0 1 -1 -6 -11 6 -6 -11 5 auto_vectores = 0.7071 -0.2182 -0.0921 0.0000 -0.4364 -0.5523 0.7071 -0.8729 -0.8285 auto_valores = -1.0000 0 0 0 -2.0000 0 0 0 -3.0000
Ejercicio 8
Determinación de valores de tensión en un circuito
A = [1.5-i*2 -.35+i*1.2; -.35+i*1.2 .9-i*1.6] I = [30+i*40;20+i*15] % Resolvemos como en el ejercicio anterior V = A \ I S = V .* conj(I) % Así obtenemos las potencias deseadas
A = -8.5000 5.6500 5.6500 -7.1000 I = 230 95 V = -76.3257 -74.1184 S = 1.0e+04 * -1.7555 -0.7041
Ejercicio 9
La función a la que llamamos para actuar es la siguiente: function [ answer ] = lagrang( cx,cy,x ) suma=0; for j=1:length(cx) prod=1; for i=1:length(cx) if i~=j prod=prod*(x-cx(i))/(cx(j)-cx(i)); end end suma=suma+prod*cy(j); end answer=(suma); end
f = @(x) 1./(1 + 25*x.^2); x=linspace(-1,1,500); y_true=f(x); figure; plot(x,y_true,'r','linewidth',1); hold on; N=10; xint=linspace(-1,1,N); y=f(xint); n1=length(x); yint=zeros(1,n1); for i = 1:n1 yint(i) =lagrang(xint,y,x(i)); end plot(x,yint,'k') hold on; N=20; xint=linspace(-1,1,N); y=f(xint); n1=length(x); yint=zeros(1,n1); for i = 1:n1 yint(i) =lagrang(xint,y,x(i)); end plot(x,yint,'g') hold on; %Equally spaced points N=10; xdata=linspace(-1,1,N); ydata=f(xdata); p=polyfit(xdata,ydata,N-1); y_fit=polyval(p,x); poly10=plot(x,y_fit,'b','linewidth',1); hold on; plot(xdata,ydata,'k.','markersize',12) hold on; N=20; xdata=linspace(-1,1,N); ydata=f(xdata); p=polyfit(xdata,ydata,N-1); y_fit=polyval(p,x); poly20=plot(x,y_fit,'y','linewidth',1); hold on; plot(xdata,ydata,'r.','markersize',12) hold on; % Se recomienda al usuario que si desea verlo mejor tome y modifique el % código que se recoge simplemente comentando las zonas que no desea % observar en pantalla hold off
Ejercicio 10
vientos=xlsread('winddata.xlsx'); plot(vientos(:,4)) hold off
vientos=xlsread('winddata.xlsx'); numeros=0:25; hist(vientos(:,4),numeros) hold off
vientos=xlsread('winddata.xlsx');
numeros2=linspace(0,2*pi,36);
rose(vientos(:,4),numeros2)
Ejercicio 11
Graficar la curva tridimensional Se crea una rejilla de los puntos espaciados como se desea
hold off [x,y]=meshgrid(-4:0.3:4); % Se calculan los valores de la función para esos puntos z=sin(x)*cos(y)*exp(x.^2 + y.^2); % Se grafican y obtiene la solución surf(x,y,z) hold off
Ejercicio 12
Este ejercicio lo resolvemos con una cadena de funciones. Se recogen a continuación:
% function ode % [t, yy] = ode45(@HalfSine, [0 35], [1 0], [ ], 0.15); % plot(t, yy(:,1)) % function y = HalfSine(t, y, z) % h = sin(pi*t/5).*(t<=5); % y = [y(2); -2*z*y(2)-y(1)+h]; % La llamamos para mostrarla ode % La función HalfSine introduce la forma de nuestra ecuación diferencial % mientras que ode llama a ode45, una función del sistema, y dibuja la % gráfica. en proceso obtenemos una matriz resultado yy. La primera columna % de esta función es la función que buscamos y la segunad columna es la % derivada o diferencial. hold off
Ejercicio 13
Vamos a realizar transformadas de fourier
Primer apartado
k = 5; m = 10; fo = 10; Bo = 2.5; N = 2^m; T = 2^k/fo;
ts = (0:N-1)*T/N; df = (0:N/2-1)/T;
SampledSignal = Bo*sin(2*pi*fo*ts)+Bo/2*sin(2*pi*fo*2*ts);
An = abs(fft(SampledSignal, N))/N;
plot(df, 2*An(1:N/2))
hold off
Segundo apartado
k = 5; m = 10; fo = 10; Bo = 2.5; N = 2^m; T = 2^k/fo;
ts = (0:N-1)*T/N; df = (0:N/2-1)/T;
SampledSignal = exp(-2*ts).*sin(2*pi*fo*ts);
An = abs(fft(SampledSignal, N))/N;
plot(df, 2*An(1:N/2))
hold off
Tercer apartado
k = 5; m = 10; fo = 10; Bo = 2.5; N = 2^m; T = 2^k/fo;
ts = (0:N-1)*T/N; df = (0:N/2-1)/T;
SampledSignal = sin(2*pi*fo*ts+5*sin(2*pi*fo/10*ts));
An = abs(fft(SampledSignal, N))/N;
plot(df, 2*An(1:N/2))
hold off
Cuarto apartado
k = 5; m = 10; fo = 10; Bo = 2.5; N = 2^m; T = 2^k/fo;
ts = (0:N-1)*T/N; df = (0:N/2-1)/T;
SampledSignal = sin(2*pi*fo*ts-5*exp(-2*ts));
An = abs(fft(SampledSignal, N))/N;
plot(df, 2*An(1:N/2))
hold off
Ejercicio 14
Graficar ecuacion con coordenadas polares Tomamos un conjunto de ángulos para graficar
tetha=linspace(-pi,pi,100); % Introducimos la ecuación r=2-4*cos(tetha); % Utilizamos la herramienta de matlab para dibujar polar(tetha,r) hold off
Ejercicio 15
Catenaria
y = 15 ; w = 10 ; y0 = 5 ; x = 50 ; % Como utilizamos bisección necesitamos dos valores iniciales. Ta0=1000; Ta1=2000; f=inline('( x ./ 10 ) .* cosh ( ( 10 ./ x ) * 50 ) + 5 - x ./ 10 - 15 ') Ta=secante(Ta0,Ta1,f,10^-16) % Calculamos la Longitud L=2*Ta/w*sinh(2*w*50/Ta) %Graficamos la función x=-50:100; y = ( Ta / 10 ) * cosh ( ( 10 / Ta ) * x ) + 5 - Ta / 10; plot(x,y)
f = Inline function: f(x) = ( x ./ 10 ) .* cosh ( ( 10 ./ x ) * 50 ) + 5 - x ./ 10 - 15 Ta = 1.2663e+03 L = 221.4447