Está en la página 1de 22

Departamento de Energetica y Mecanica

AREA MECANICANICA COMPUTACIONAL

TEMA SOLUCION DE PROBLEMAS BASICOS DE INGENIERIA MECANICA MEDIANTE EL PROGRAMA MATLAB

PRESENTADO AL PROFESOR EDIGUER ENRIQUE FRANCO

PRESENTADO POR MARIO GUTIERREZ COD.2056369 ESTUDIANTE INGENIERIA MECANICA UNIVERSIDAD AUTONOMA DE OCCIDENTE SANTIAGO DE CALI SEPTIEMBRE 17 2013

Problema 1. Aproximar la funcion cos(x), usando la serie de Mclaurin.

Escriba un programa en matlab que muestre los resultados del valor ajustado y los errores absolutos y relativos porcentuales si se toman entre 1 y 10 trminos de la serie. Repita el ejercicio anterior para la siguiente serie:

Planteamiento del problema: Se debe resolver para cada funcin la serie de mclaurin, esta debe arrojar los valores de error absoluto y relativo, entonces para ello segn la serie de mclaurin: Antes de desarrollar el algoritmo debo hallar las derivadas respecto de cada termino y evaluarlas en 0: f(x)=cos(x) = f(0)=cos(0) = 1 f(x)=-sen(x) = f(0)=-sen(0) = 0 f(x)=-cos(x) = f(0)=-cos(0) = -1 f(x)=sin(x) = f(x)=sin(0) = 0 En adelante se repiten cclicamente los valores hallados, ahora aplico la ecuacin de la serie:

Desarrollo en Matlab A continuacin se encuentra descrito paso a paso el cdigo desarrollado para la solucin de la primera funcin: clc, clear, close all % Adiciono Decimales format long % itero desde n = 0 a n = 9 n = 0 : 9; % Este es el punto a evaluar x = 0.3*pi; % Estos son los valores evaluados de las derivadas respecto a 0 d = [1 0 -1 0 1 0 -1 0 1 0]; % Ecuacion de la secuencia segun la formula seq = d .* x.^n ./(factorial(n));

% Adicionalmente se suma para llegar a la aproximacion de mclaurin va = sum(seq); % Hallo el valor real vr = cos(x); % Porcentaje de error absoluto pea=((va-vr)*100)/vr; Resultados Valor absoluto va= 0,587785403659118 Valor real vr= 0,587785252292473 Porcentaje de error pea= 2,57520316902239e-05 Ahora para la segunda serie: f(x) = 1 / (1-x) = f(0)= 1/1-0 = 1 f(x) = 1 / (x^2-2x+1) = f(0) = 1 / (0^2-2*0+1) = 1 f(x) =(2-2x)/(x^4-4x^3+6x^2-4x+1) = f(0) = (2-2*0)/(0^4-4*0^3+6*0^2-4*0+1)=2 f(0) = 6 f(0) = 24 Ahora aplico la ecuacin de la serie:

Desarrollo en Matlab A continuacin se encuentra descrito paso a paso el cdigo desarrollado para la solucin de la segunda funcin: clc, clear, close all % Adiciono Decimales format long % itero desde n = 0 a n = 9 n = 0 : 4; % Este es el punto a evaluar x = 0.1; % Estos son los valores evaluados de las derivadas respecto a 0 d = [1 1 2 6 24]; % Ecuacion de la secuencia segun la formula seq = d .* x.^n ./(factorial(n)); % Adicionalmente se suma para llegar a la aproximacion de mclaurin va = sum(seq); % Hallo el valor real vr = 1/(1-x); % Porcentaje de error absoluto pea=((va-vr)*100)/vr;

Resultados Valor absoluto va= 1,11110000000000 Valor real vr= 1,11111111111111 Porcentaje de error pea= 0,00100000000000655 Problema 2. Escriba un script de matlab que solucione el siguiente problema de materiales:

Planteamiento del Problema Para solucionar el problema debemos dividir el cono en varias secciones cilndricas, estas tendrn diferentes radios, reas y distancias a partir del 0, como lo muestra el siguiente esquema:

Las tareas que debe cumplir el algoritmo son: Hallar la distancia desde x=0 Li Hallar el radio r correspondiente a cada cilindro Hallar las a correspondientes a cada cilindro Con esta informacin hallada, por ultimo se calcula la sumatoria de la elongacin en cada cilindro y se compara con la elongacin ideal. Esto para divisiones de n=6, n=12 y n=60 cilindros. Entre mas divisiones menor porcentaje de error, es decir mas precisin. Desarrollo en matlab clc, clear, close all

format short % Solicito los datos p=input('Ingrese el valor de la carga axial'); n=input('Ingrese el valor del numero de cilindros n'); L=input('Ingrese el valor de la longitud del cono L'); c=input('Ingrese el valor del radio menor c'); E=input('ingrese el valor del modulo de elasticidad'); % Itero entre los valores ingresados x=1:1:n; j=0; for i=1:length(x); %Hallo la distancia desde 0 de cada Cilindro Li Li(i)=((L/n)/2)+(j*L/n); %Hallo el radio de cada cilindro ri ri(i)=(2*c)-(c*(Li(i)/L)); %Hallo el area de cada cilindro A(i)=ri(i)^2*pi; j=j+1; end %Hallo la elongacion en cada radio for i=1:length(A); elo1(i)=(p*(L/n))/((A(i)*E)); end %Hallo la Elongacion aproximada Elongacion_Aproximada=sum(elo1); %Hallo la elongacion exacta Elongacion_Exacta=(p*L)/(2*pi*E*(c^2)); %Hallo el porcentaje de error Porcentaje_Error=100*((Elongacion_ExactaElongacion_Aproximada)/Elongacion_Aproximada); plot(Li,elo1); Resultados Para n=6 ; p=1 ; L=1 ; c=1 ; E=1 : Elongacion aproximada = 0,158517007709843 Elongacion exacta = 0,159154943091895 Porcentaje de error = 0,402439707428810

0.05 0.045 0.04 0.035 0.03 0.025 0.02 0.015 0.01

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

Para n=12 ; p=1 ; L=1 ; c=1 ; E=1 : Elongacion aproximada = 0,158994193189237 Elongacion exacta = 0,159154943091895 Porcentaje de error = 0,101104260120524
0.025

0.02

0.015

0.01

0.005

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

Para n=60 ; p=1 ; L=1 ; c=1 ; E=1 : Elongacion aproximada = 0,158994193189237 Elongacion exacta = 0,159154943091895

Porcentaje de error = 0,101104260120524


5.5 5 4.5 4 3.5 3 2.5 2 1.5 1 x 10
-3

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

Problema 3. El archivo ensayo1.txb contiene los resultados del ensayo de tensin de una muestra de aluminio, obtenidos en el laboratorio de mecnica de solidos, se requiere obtener el modulo elstico a partir de los datos experimentales, para eso es necesario ajustar una recta en la porcin lineal de la curva esfuerzo-deformacin: a). hacer el ajuste y calcular el coeficiente de determinacin usando las ecuaciones estudiadas en clase. b). hacer el ajuste usando el comando polyfit de matlab. Planteamiento del Problema a) Para realizar el ajuste y solucionar se utilizaran las ecuaciones de regresin lineal vistas en clase, a continuacin se muestran dichas ecuaciones: Suma de los residuos al cuadrado

Sistema lineal de dos ecuaciones y dos incognitas en funcion de x e y

Ecuacin para hallar la constante a1 del sistema:

Ecuacion para hallar la constante a0

Ecuacion para hallar la media

Ecuacion de la suma total de los cuadrados arededor de la media

Ecuacion coeficiente de determinacin

Ademas tomaremos como referencia la tabla ajustada b1.3.txt 0.158553 0.166713 0.174987 0.182693 0.190683 0.198333 0.206323 0.214653 0.222530 0.230180 0.237660 0.244630 0.252110 0.259023 0.266050 0.272907 0.280217 0.287867 0.295460 0.303790 0.312460 0.321357 0.331727 0.342663 0.355187 0.369807 0.022592 0.026405 0.030354 0.034239 0.038140 0.041947 0.045757 0.049694 0.053470 0.057320 0.061164 0.065027 0.068864 0.072790 0.076596 0.080407 0.084262 0.088137 0.091976 0.095856 0.099707 0.103491 0.107396 0.111204 0.115110 0.118930

Aplicando la teora vista en clase y las ecuaciones anteriormente mencionadas se procede a realizar el cdigo. Desarrollo en matlab clc, clear, close all %Tomo los datos [x,y]=textread('b1.3.txt'); n = length(x); %Hallo las sumatorias sxy = sum(x.*y); sx = sum(x); sy = sum(y); sx2 = sum(x.^2); %Hallo a1 a1 = (n*sxy-sx*sy)/(n*sx2-sx^2) %Hallo las medias en x e y my = mean(y); mx = mean(x); %hallo a0 a0 = my - mx*a1 %Hallo la suma de los residuos cuadrados w1=(x.*a1)+a0; w2=sum(y-w1); sr=w2*w2'; format long %hallo la suma total de los cuadrados alrededor de la media w3=(y-my); st=sum(w3'*w3) %Hallo el coeficiente de variacion r=sqrt((st-sr)/st) %Reemplazo los valores en la ecuacion del polinomio yaj = a0 + a1*x; %Imprimo los resultados plot(x,y,'o') hold plot(x,yaj) xlabel('Deformacion') ylabel('Esfuerzo') legend('Datos Ingresados','Curva Ajustada') title('Ajuste Tramo Lineal Curva Esfuerzo Deformacion') grid on *antes de ejecutar el cdigo se ajusto el archivo b1.3.txt para que solo tomara los valores de la porcin recta del diagrama esfuerzo deformacin. Resultados

Ajuste Tramo Lineal Curva Esfuerzo Deformacion 0.14 Datos Ingresados Curva Ajustada 0.12

0.1
Esfuerzo

0.08

0.06

0.04

0.02

0.2

0.25 0.3 Deformacion

0.35

0.4

b) De la misma manera que en el punto anterior el listado b1.3.txt se ajusto para tomar la parte lineal del diagrama esfuerzo deformacin, ahora se realizara el ajuste de la curva pero con la herramienta predeterminada del matlab polyfit. Desarrollo en matlab clc, clear, close all %Tomo los datos [x,y]=textread('b1.3.txt'); n=input('Ingrese el grado del Polinomio entre 1 y 10 n='); format long P=polyfit(x,y,1); f=polyval(P,x); %Imprimo los resultados plot(x,y,'o') hold plot(x,f) xlabel('Deformacion') ylabel('Esfuerzo') legend('Datos Ingresados','Curva Ajustada') title('Ajuste Tramo Lineal Curva Esfuerzo Deformacion') grid on

Resultados
Ajuste Tramo Lineal Curva Esfuerzo Deformacion 0.14 Datos Ingresados Curva Ajustada 0.12

0.1
Esfuerzo

0.08

0.06

0.04

0.02

0.2

0.25 0.3 Deformacion

0.35

0.4

Problema 4. El archivo b1.txt contiene un conjunto de datos ( xi,yi) que deben ser ajustados usando un polinomio de tercer grado y= a0+a1x+a2x^2+a3x^3 a). hacer el ajuste usando las ecuaciones estudiadas en clase para el ajuste de un polinomio de orden n. b). hacer el ajuste usando el comando polyfit de matlab. Planteamiento del Problema a) Para este caso de acuerdo a la teoria vista en clase de regresin polinomial la solucin de ajuste para un polinomio de orden n es un sistema de ecuaciones matriciales, como se ve a en la siguiente figura:

En matlab este sistema puede ser representado y resuelto por un sistema matricial como se ve a continuacin:

Para ajustar esta curva en matlab primero se cargan los datos del listado b1.2.txt, se organiza la matriz aplicando las ecuaciones mencionadas en el punto anterior y posteriormente se soluciona el sistema. Desarrollo en matlab clc, clear, close all [x,y]=textread('b1.2.txt'); n=length(x); sx = sum(x); sy = sum(y); sxy = sum(x.*y); sx2 = sum(x.^2); sx3 = sum(x.^3); sx4 = sum(x.^4); sx5 = sum(x.^5); sx6 = sum(x.^6); sxy = sum(x.*y); a = (x.^2)* y'; sx2y = sum(diag(a)); b = (x.^3)* y'; sx3y = sum(diag(b)); m1=[ n sx sx2 sx3 ; sx sx2 sx3 sx4 ; sx2 sx3 sx4 sx5 ; sx3 sx4 sx5 sx6 ]; m2=[ sy ; sxy ; sx2y ; sx3y ]; format short z=(m1\m2) a0=z(1,1); a1=z(2,1); a2=z(3,1); a3=z(4,1); fz=a0+a1*x+a2*(x.^2)+a3*(x.^3); plot(x,y,'o'); hold

plot(x,fz) xlabel('x') ylabel('y') legend('Datos Ingresados','Curva Ajustada') title('Ajuste Curva Polinomio de Tercer grado') grid on Resultados
x 10
4

Ajuste Curva Polinomio de Tercer grado Datos Ingresados Curva Ajustada

-2

-4 -1

-0.5

0.5 x

1.5

2.5 x 10
4

b) De la misma manera que en el punto anterior el listado b1.2.txt se ajusto para la toma de datos, ahora se realizara el ajuste de la curva pero con la herramienta predeterminada del matlab polyfit.

Desarrollo en matlab clc, clear, close all [x,y]=textread('b1.2.txt'); n=input('Ingrese el grado del Polinomio entre 1 y 10 n=');

P=polyfit(x,y,n); f=polyval(P,x); plot(x,y,'o'); hold plot(x,f) xlabel('x') ylabel('y') legend('Datos Ingresados','Curva Ajustada') title('Ajuste Curva con Polyfit') grid on Resultados
x 10
4

Ajuste Curva con Polyfit Datos Ingresados Curva Ajustada

-2

-4 -1

-0.5

0.5 x

1.5

2.5 x 10
4

Problema 5. La siguiente ecuacin: Posee una raz en el rango entre 0 y 4pi. Hallar manualmente dicha raz haciendo 5 iteraciones de mtodo de Newton-Raphson, comenzando en x = 9. Planteamiento del problema Para hallar las races de la ecuacin debemos aplicar la teora vista en clase de la teora de newton raphson, en la cual se definen rectas con pendientes sucesivas para acercarse a la raz de la funcion, la ecuacin de newton raphson se define como:

Desarrollo en matlab clc, clear, close all x0=input('Ingrese el valor inicial: '); tol=input('Ingrese el porcentaje de error: '); f=input('Ingrese la funcin: '); i=1; fx(i)=x0; syms x; f1=subs(f,x,fx(i)); z=diff(f); d=subs(z,x,fx(i)); ea(1)=100; while abs(ea(i))>=tol; fx(i+1)=fx(i)-f1/d; f1=subs(f,x,fx(i+1)); d=subs(z,x,fx(i+1)); ea(i+1)=abs((fx(i+1)-fx(i))/fx(i+1)*100); i=i+1; end fprintf('i fx(i) Error aprox (i) \n'); for j=1:i; fprintf('%2d \t %11.7f \t %7.3f \n',j-1,fx(j),ea(j)); end Resultados i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 fx(i) Error aprox (i) 9.0000000 100.000 7.0267270 28.082 5.2225081 34.547 6.9715629 25.088 5.0746440 37.380 6.6562766 23.762 3.7926236 75.506 5.4643079 30.593 7.6803054 28.853 6.4029580 19.949 0.8964617 614.248 -0.1648859 643.686 -30.1581940 99.453 -34.9945582 13.820

14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

-38.6756042 9.518 -34.7284976 11.366 -45.3725970 23.459 -42.7010142 6.256 -46.2161825 7.606 -44.2517367 4.439 -32.9133208 34.449 -30.1541435 9.150 -34.9708342 13.773 -38.8375246 9.956 -35.4407474 9.584 -37.9300639 6.563 -25.3478941 49.638 -12.6230020 100.807 -3.4197212 269.124 -5.3675293 36.289 -5.4137071 0.853 -5.4150359 0.025 -5.4150370 0.000

Raiz=-5.4150370 Problema 6.

Para el siguiente sistema de ecuaciones: Hacer manualmente 4 iteraciones del mtodo de Newton-Raphson para buscar una raz en el intervalo entre -2pi y 2pi. Planteamiento del problema En el caso de un sistema de ecuaciones la solucin consiste en hallar las races o valores de x que satisfagan simultneamente el sistema de ecuaciones, esto se logra aproximando primero las ecuaciones mediante la serie de Taylor, este proceso nos da las siguientes ecuaciones:

En estas se identifica el J como el jacobiano del sistema, este se halla mediante:

Para solucionar este sistema de ecuaciones, primero hallo las derivadas parciales: f=(x^2-cos(y) = df/dx = 2*x = df/dy = sin(y) f=sin(x)+x^2+y^3 = df/dx = cos(x)+2*x = df/dy = 3*y^2

Ya con estas hallo el jacobiano y aplico las ecuaciones de newton raphson. Desarrollo en matlab % V al o r e s i n i c i a l e s xa = 1; ya = 1; % Numero de i t e r a c i o n e s itnum = 5; % Encabezado de l o s r e s u l t a d o s disp ( '-------------------------' ) disp ( ' | n | xb | yb | ' ) disp ( '-------------------------' ) for i=1: itnum % Funcion u y s u s d e ri v a d a s p a r c i a l e s u = xa ^2 - cos(ya); du_dx = 2* xa ;

du_dy = sin(ya); % Funcion v y s u s d e ri v a d a s p a r c i a l e s v = sin(xa) + xa^2 + ya^3; dv_dx = cos(xa)+2*xa; dv_dy = 3*ya^2; % Determinante d el Jacobiano det_J = du_dx * dv_dy - du_dy-dv_dx ; % Ecuaciones de Newton?Raphson xb = xa - ( u * dv_dy - v* du_dy ) / det_J ; yb = ya - ( v * du_dx - u* dv_dx ) / det_J ; % V i s u al i z a c i o n de r e s u l t a d o s disp ( strcat ( ' | ' , num2str ( i ) , ' | ' , num2str ( xb ) , ' | ' , num2str ( yb ) , ' | ' ) ) % A si gn aci on de v al o r e s para l a s i g u i e n t e i t e r a c i o n xa = xb ; ya = yb ; end disp ( '-------------------------' )

Resultados ------------------------| n | xb | yb | ------------------------|1 |1.3865 |-0.72451 | |2 |-0.31205 |-2.4285 | |3 |0.21032 |-1.6082 | |4 |1.352 |-0.9947 | |5 |0.45444 |-1.192 | -------------------------

Problema 7. Dado el siguiente sistema de ecuaciones diferenciales ordinarias de primer orden:

Hallar la solucin usando el mtodo de Euler en el rango entre x=0 y y=1, con un tamao de 0.2 y condiciones iniciales y(0)=2 y z(0)=4. Planteamiento del problema Se utilizara el mtodo de Euler que consiste en utilizar la misma ecuacin diferencial como pendiente para extrapolar un nuevo punto de solucin.

Donde

Desarrollo en matlab
dx=0.2; xe=[0:dx:1]; y=2; z=4; n=length(xe); for i=2:n o = -2*y + 4*exp(xe(i-1)); y= y+ phi*dx o= -y*z^2/3; z= z+ o*dx end

Resultados y=2 z = 1.8667 y = 2.1771 z = 1.3609 y = 2.4997 z = 1.0523 y = 2.9575 z = 0.8340 y = 3.5550 z = 0.6691

Problema 8. En una investigacin militar se necesita determinar la velocidad mxima en cada libre, o velocidad final Vf, alcanzada por un nuevo diseo de bomba de 125 kilogramos. Para hacer esto se decide solucionar numricamente la ecuacin diferencial de la cada libre:

Para determinar la fuerza de arrastre se hicieron pruebas en un tnel de viento con una bomba a escala natural para medir la fuerza de arrastre en funcin de la velocidad, estos fueron los resultados:

Muestre los siguientes resultados: a) Graficos de la fuerza de arrastre respecto de la velocidad fa(v) y velocidad respecto del tiempo v(t). b) El valor de la velocidad final de cada libre c) El tiempo aproximado al que se llega al 95% de la velocidad final. d) Muestre el cdigo realizado para solucionar el problema, con comentarios de la solucin. Planteamiento del problema Primero debemos hacer regresin polinomial para ajustar una cuadrtica y hallar la funcin respectiva con base en la tabla de datos obtenida experimentalmente en el tnel de viento, la solucin y planteamiento de esta regresin se encuentra detallada en el punto 4 de este trabajo. Luego de hallar estos valores, se observa que se debe dar solucin a una ecuacin diferencial de segundo orden, para ello se debe hacer uso del mtodo Runge Kutta para hallar el valor de la velocidad mxima en cada libre, para ello primero se definen las condiciones de frontera y constantes conocidas: a) Cuando x=0 ; entonces y=0 b) g=9.81 mt/sg c) m=125 Kgs. Ya con estos valores definidos procedo a plantear las ecuaciones sugeridas por el mtodo RK2

Posteriormente despus de aplicar las ecuaciones se itera y se hallan los valores pedidos.

Desarrollo en matlab
clc, clear, close all %Primero se cargan los datos suministrados de la tabla de arrastre para %ajustar la cuadratica y obtener la funcion %Cargo los datos [y,x]=textread('Arrastre.txt'); n=length(x); %hallo las sumatorias sx = sum(x); sy = sum(y); sxy = sum(x.*y); sx2 = sum(x.^2); sx3 = sum(x.^3); sx4 = sum(x.^4); a = (x.^2)* y'; sx2y = sum(diag(a)); b = (x.^3)* y'; %Escribo las matrices m1=[ n sx sx2 ; sx sx2 sx3 ; sx2 sx3 sx4 ]; m2=[ sy ; sxy ; sx2y ]; format short z=(m1\m2); a0=z(1,1); a1=z(2,1); a2=z(3,1); %Armo la funcion y sus valores fz=a0+a1*x+a2*(x.^2); %ahora aplico el Metodo RK2 %Defino el incremento, entre mayor sea mas preciso sera el resultado, para %este caso: dx = 0.005; %Determino los valores aproximados de la soluicion x xi = [0:dx:60]; %Defino el numero de puntos np = length(xi); %defino la constante de gravedad g(mt/sg^2) g = 9.81; %Defino las propiedades dadas del objeto, en este caso la bomba de masa(Kgs.): m = 125; %Determino las condiciones iniciales, para este caso cuando V=0 entonces %X=0 y0 = 0; y1 = y0; %Aplico las iteraciones for i=2:np %Aplico las ecuaciones RK2 para hallar las constantes %despejando la ecuacion diferencial dada, tenemos para K1:

k1 = g - (a0 + a1*y1+ a2*y1^2)/m; %para K2: k2 = g - (a0 + a1*(y1+dx)+ a2*(y1+dx)^2)/m; %por Heun (a1=a2=1/2), tenemos: y2 = y1 + (k1/2 + k2/2)*dx; y3(i) = y2; y1 = y2; %Se halla el punto maximo de la funcion if round(y3(i-1))==round(y3(i)); M = y3(i); end end %Ahora hallo la velocidad final Vf=M %Busco el tiempo aproximado para llegar a 95% de la velocidad final t=(xi(find(y3>0.95*M,1))) %Ahora Imprimo los resultados subplot(2,1,1); plot(y,x,'o') title('Fuerza de Arrastre Segun Tabla') hold plot(fz,x) ylabel('V (m/s)') xlabel('Fuerza de Arrastre (N)') grid on subplot(2,1,2); plot(xi,y3,'k-') xlabel('t (sg)') ylabel('V (m/s)') title('Funcin')

Resultados Velocidad final Vf=560.9962 Tiempo en llegar al 95% de la velocidad final Vf, t=56.95
Fuerza de Arrastre Segun Tabla 8000 6000

V (m/s)

4000 2000 0

50

100 150 200 Fuerza de Arrastre (N) Funcin

250

300

600

V (m/s)

400

200

10

20

30 t (sg)

40

50

60