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