UNIVERSIDAD DE CONCEPCIÓN FACULTAD DE INGENIERÍA AGRÍCOLA DEPTO. DE AGROINDUSTRIAS Juan Carlos Sandoval Avendaño PAUTA PRUEBA N° 2 LENGUAJE DE PROGRAMACIÓN INGENIERÍA CIVIL AGRÍCOLA NOMBRE :___________________________________________ PTOS. :________ TIEMPO MÁXIMO : 1 HORA 40 MINUTOS FECHA : Lu 03/07/06 (1) El método de Newton-Raphson resuelve ecuaciones no lineales de la forma 0 ÐBÑ œ !ß para lo cual es preciso conocer un valor aproximado de la raíz. Este método parte con una aproximación inicial B! y genera la sucesión 0 ÐB Ñ ˜B8 ™ definida por B8 œ B8" w 8" ß 8 œ "ß #ß $ß ÞÞÞÞÞÞ 8− 0 ÐB8" Ñ El proceso de generación de aproximaciones sucesivas se detiene cuando +Ñ kB8 B8" k %ß donde % es un número positivo pequeño ,Ñ El número de iteraciones excede a un número de iteraciones máximo dado. Prepare un programa en pascal que: +Ñ Muestre por pantalla, considerando 1 decimal, la solución de la ecuación /B =/8ÐBÑ œ "ß usando el método de Newton-RaphsonÞ Los valores de % ß B! y el número de iteraciones máximo deben ser ingresados por el usuario. ,Ñ Genere un archivo de texto con la siguiente información (debe incluir los valores y expresiones correspondientes): VALOR DE EPSILON: NÚMERO DE ITERACIONES MÁXIMO: ITERACIÓN VALOR ! B! " B" # B# Þ Þ Þ Þ (30 puntos) Solución: Program Newton_Raphson; Type vector=array[0..1000] of real; Var n : integer; x : vector; eps : real; Ar : Text; NMaxIter : integer; 1 Function f(x:real):real; begin f:=exp(x)*sin(x)-1; end; Function fp(x:real):real; begin fp:=exp(x)*(sin(x)+cos(x)); end; Begin Write('Ingrese epsilon : '); Readln(eps); Write('Ingrese x0 : '); Readln(x[0]); Write('Ingrese el número máximo de iteraciones : '); Readln(NMaxIter); Assign(Ar,'NEWTON.TXT'); Rewrite(Ar); Writeln(Ar,'VALOR DE EPSILON: ',eps:0:10); Writeln(Ar,'NÚMERO DE ITERACIONES MÁXIMO: ',NMaxIter); Writeln(Ar,'ITERACIÓN ',' ':6,'VALOR'); n:=0; Writeln(Ar,' ':4,n,' ':8,x[n]:0:10); Repeat n:=n+1; x[n]:=x[n-1]-f(x[n-1])/fp(x[n-1]); Writeln(Ar,' ':4,n,' ':8,x[n]:0:10); until (abs(x[n]-x[n-1])<eps) or (n>NMaxIter); Writeln('La solución aproximada es : ',x[n]:0:1); Close(Ar); End. (2) +Ñ Escriba una unidad en pascal que permita calcular la suma y el producto de dos matrices de orden 3, triangulares inferior. Además esta unidad debe calcular el determinante de una matriz triangular inferior de orden 3Þ ,Ñ Use la unidad de la parte +Ñ para calcular y mostrar por pantalla la matriz ÐE FÑ † Eß usando formato matricial, donde +3 4 œ 3 4 y ,3 4 œ 3 4 à 3ß 4 œ "ß #ß $Þ (30 puntos) Solución: 2 +Ñ UNIDAD MATRICES.PAS Unit Matrices; Interface Const n=3; Type Matriz=array[1..n,1..n] of real; Procedure Suma(A,B:matriz;var C:matriz); Procedure Producto(A,B:matriz;var C:matriz); Function Determinante(A:matriz):real; Implementation Procedure Suma(A,B:matriz;var C:matriz); var i,j : 1..n; begin for i:=1 to n do for j:=1 to n do C[i,j]:=A[i,j]+B[i,j]; end; Procedure Producto(A,B:matriz;var C:matriz); Var i, j , k : 1..n; begin for i:=1 to n do for j:=1 to n do begin C[i,j]:=0; for k:=1 to n do C[i,j]:=C[i,j]+A[i,k]*B[k,j]; end; end; Function Determinante(A:matriz):real; Var Prod : real; i:1..n; begin Prod:=1; for i:=1 to n do Prod:=Prod*A[i,i]; Determinante:=Prod; end; End. 3 ,Ñ PROGRAMA QUE USA LA UNIDAD ANTERIOR: Program UsoMatrices; Uses Matrices, Crt; Var i, j : 1..n; A, B , C, P : matriz; Begin ClrScr; for i:=1 to n do for j:=1 to n do begin A[i,j]:=i+j; B[i,j]:=i-j; end; Suma(A,B,C); Producto(C,A,P); for i:=1 to n do for j:=1 to n do begin GotoXY(4+(j-1)*8,2+(i-1)*2); Write(P[i,j]:0:2); end; End. 4