Universidad Idustrial De Santander Escuela de Ingenier´ıa de Petr´ oleos Curso: M´ etodos N´ umericos para Ingenier´ıa Asunto: Material de preparaci´ on parcial I Profesor: Eduardo Carrillo Zambrano PhD Nombre: Jonathan Budez Vergara
Modelos matem´ aticos y diferencias finitas 1. La ecuaci´on (1) es un modelo que relaciona la aceleraci´on de un cuerpo que cae con las fuerzas que act´ uan sobre ´el. Una modificaci´on de esta ecuaci´on diferencial, es la relaci´on no lineal mostrada en (2): c dv =g− v dt m 0 2 FU = −c v
(1) (2)
donde c0 = a un coeficiente de arrastre de segundo orden (Kg/m). Usando la relaci´on, utilice las diferencias finitas con los valores (ti = 0), un tama˜ no de paso de 2 s, g = 9.8 m/s2 , m = 68.1 Kg, 0 vi = 0 m/s y un valor de c = 0.23 Kg/m. Desarrollo: FU = −c0 v 2 c0 dv = g − v2 dt m dv vi+1 − vi c0 = = g − v2 dt ti+1 − ti m 1ra iteracion: vi+1 − vi = (g −
c0 2 m v )(ti+1
− ti )
vi+1 = vi + (g −
c0 2 m v )(ti+1
− ti )
ti+1 − ti = 2 s
vi = 0
vi+1 = 0 + (9.8 − 0.23 68.1 (0))(2) m vi+1 = 19.6 s
m s
2da iteracion: vi+1 = 19.6 + (9.8 − m vi+1 = 39.06 s
0.23 68.1 (19.6))(2)
m s
Podemos usar como herramienta un programa que nos permita hacer las iteraciones calculando su respectivo error, el planteamiento l´ogico (diagrama de flujo) se muestra a continuaci´on, seguido del c´odigo del programa hecho en Fortran.
Inicio ? g, c0 , h, vi , m, tol
? E=1 i=0
-
? @ |E| > tol @ @ @ Si ? vi+1 = vi + (g −
No
? i, E, vi
c0 2 v )(h) m i
vi+1 − vi E = vi+1
? Fin
vi = vi+1
i=i+1
c
Los comandos “character(len=20)nombre” son utilizados para que el programa busque los datos en archivo (open(unit=120,file=TRIM(nombre),action=‘read’,status=‘old’)), de igual manera este tambi´en tiene un uso en impresi´on, el cual consiste en un archivo creado por el usuario con el nombre que desea para que sus datos queden almacenados en este (open(unit=120,file=TRIM (nombre),action=’write’,status=’replace’)).
program aproximacion integer::i real*8::g,c,h,vi,m,tol,e,temp,vj character(len=20)nombre write(*,*)’Escriba el nombre del archivo’ read(*,*)nombre open(unit=100,file=TRIM(nombre),action=’read’,status=’old’) read(100,*)g read(100,*)c read(100,*)h read(100,*)vi read(100,*)m read(100,*)tol close(100) e=1.0 i=0 write(*,*)’Escriba el nombre del archivo a guardar’ read(*,*)nombre open(unit=120,file=TRIM(nombre),action=’write’,status=’replace’) do while(abs(e)>tol) vj=vi+(g-(c/m)*(vi))*(h) e=abs((vj-vi)/vj) vi=vj i=i+1 write(120,*)e,vj,i end do close(120) end program aproximacion 2. La cantidad de contaminante radiactivo uniformemente distribuido en un reactor cerrado est´a medida por concentraciones c (becquerel/litro, o Bq/L). El contaminante decrece a una velocidad de ca´ıda proporcional a esa concetraci´on; Esto es:
Velocidad de ca´ıda = −kc donde k = a una constante por unidad de d´ıa−1 . El balance de masa se representa como: dc = −kc dt Cambio de masa = Decremento por decaimiento, Use los m´etodos num´ericos para resolver la ecuaci´on de t = 0 a 1d, con k = 0.1d−1 .Y emplee un tama˜ no de paso de ∆t = 0.1.La concentraci´on de t = 0 es 10 Bq/L.
Desarrollo: dc = −kc dt ci+1 − ci = −kc ti+1 − ti ci+1 = ci − kc(ti+1 − ti ) El diagrama de flujo para este problema es similar al anterior, y se muestra a continuaci´on
Inicio ? ci , k, ∆t
? ti = 1
-
@
? @ ti ≤ 1@
No
@ Si ?
? ci+1
ti+1 = ti + ∆t ci+1 = ci − kci (ti+1 − ti )
? Fin
ti = ti + ∆t ci = ci+1
c
program aproximacion2j real::ci,ti,dt,k,tf,cj write(*,*)’digite los datos’ read(*,*)ci read(*,*)k read(*,*)dt ti=0.0 do while (ti<=1) tf=ti+dt cj=ci-(k*ci*(tf-ti)) ti=ti+dt ci=cj write(*,*)ci,’[Bq/Lt]’ end do end program aproximacion2j
3. Usando los t´erminos de la serie de Taylor, aproxime la funci´on f (x) = sen(x) en x0 = π/4 con base en el valor de la funci´on f y sus derivadas en el punto x1 = π/6. Empiece con solo el termino n=0 agregando sucesivamente un t´ermino hasta que el error porcentual sea menor que la tolerancia, tomando 5 cifras significativas. Rta// f (xi+1 ) = f (xi ) + f (xi )(xi+1 − xi ) + f (xi ) (xi+12!−xi ) + ... + f (n) (xi+1n!−xi ) 0
00
2
n
A partir de la serie de taylor creamos un algoritmo en lenguaje fortran que siga el procedimiento iterativo y arroje los resultados mostrados a continuaci´on (Tabla1):
program aproximacionseno integer::n,m,j,y,w real::xo,xi,tol,h,f,e,dev,r,g,a,fact character(len=20)::nombre write(*,*)’Escriba el nombre del archivo’ read(*,*)nombre open(unit=120,file=TRIM(nombre),action=’read’,status=’old’) read(120,*)n read(120,*)xo read(120,*)xi close(120) tol=((0.5)*(10**(2-n)))/100 h=xo-xi f=0.0 e=1.0 m=0 dev=0.0 w=0 y=0 g=sin(xi) write(*,*)’Escriba el nombre del archivo a guardar’ read(*,*)nombre open(unit=100,file=TRIM(nombre),action=’write’,status=’replace’) do while(e>tol) r=((dev)*(h**m))/(fact) g=g+r e=abs((g-f)/(g)) f=g m=m+1 a=m-(int(m/2))*2 if(a==0)then fact=1.0 do j=1,m,1 fact=(fact)*j end do dev=(sin(xi))*((-1)**(w+1))
w=w+1 else fact=1.0 do j=1,m,1 fact=(fact)*j end do dev=(cos(xi))*((-1)**(y+2)) y=y+1 end if write(100,*)m,e,f end do close(100) end program aproximacionseno Iteraciones 1 2 3 4 5 6 7
Error 1.0000 0.31198 2.4147 × 10−2 3.6632 × 10−3 1.38412 × 10−4 1.2560 × 10−5 3.37171 × 10−7
Sen(x0 ) 0.50000 0.72672 0.70950 0.70700 0.70710 0.70711 0.70711
Tabla 1: Resultados ejercicio 3 4. Se planea construir una estanter´ıa de libros cuya altura se encuentra entre 8 12 ” y 11” con una longitud de 29”. La estanter´ıa est´a construida en madera cuyo Modulo de Young es de 3.667 M si con un grosor de 3/8” y un ancho de 12”. Encontrar la m´axima deflexi´on vertical de la estanter´ıa dada por: v(x) = 0.42493 × 10−4 x3 − 0.13533 × 10−8 x5 − 0.66722 × 10−6 x4 − 0.018507x Donde x es la posici´on a lo largo de la viga. Por lo tanto para encotnrar la m´axima deflexi´on se dv necesita saber cu´ando f (x) = dx = 0 y hace la prueba de la segunda derivada (Figura 1). x
Figura 1: Estanteria
La ecuaci´on que da la posici´on x donde la deflexi´on es m´axima esta dada por: −0.67665 × 10−8 x4 − 0.26689 × 10−5 x3 + 0.12748 × 10−3 x2 − 0.018507 = 0 Use el m´etodo de Newton-Raphson para encontrar la posici´on x donde la deflexi´on es m´axima. Utilice tres iteraciones para llegar a la ra´ız de la ecuaci´on anterior. Calcule el error relativo absoluto al final de cada iteraci´on y el n´ umero correcto de cifras significativas al final de cada iteraci´on. Rta/ El codigo del ejercicio anterio java se presenta a continuaci´on junto a los resultados (Tabla 2). public static void main(String[] args) { int i; double xi,v,dv,xs,p,r,e; Scanner reader = new Scanner (System.in); System.out.println("Escribe el valor xi"); xi=reader.nextDouble(); i=0; p=0; e=1; while(i<100 & e>0.0001){ v=(-0.67665e-8)*(Math.pow(xi,4))-(0.26689e-5)*(Math.pow(xi,3)) +(0.12748e-3)*(Math.pow(xi,2))-(0.018507); dv=(2.54958e-4)*(xi)-(2.7066e-8)*(Math.pow(xi,3))-(8.00658e-6)*(Math.pow(xi,2)); xs=xi-(v/dv); r=(xs-p)/xs; e=Math.abs(r); p=xs; xi=xs; i=i+1; System.out.println(i); System.out.println(xs); } // TODO code application logic here } Iteraciones 1 2 3 4
Raiz 16.53810976770325 14.55228293681113 14.57245274464426 14.57245222059074
Error % 100 13.646153249733878 0.1384105214583078 3.596193058770515 × 10−6
Tabla 2: Resultados ejercicio 4