




Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Los mejores documentos en venta realizados por estudiantes que han terminado sus estudios
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Descubre las mejores universidades de tu país según los usuarios de Docsity
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
EJERCICIO CON PROGRAMACION EN OCTAVE
Tipo: Ejercicios
Subido el 10/03/2020
5
(1)5 documentos
1 / 8
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!
% Programa para cálculo de raices con el método de bisección function z=biseccion() disp('Calculo de raíces con bisección'); f=input('Proporcione la ecuación no lineal: ','s'); funcion=inline(f); ezplot(funcion); grid on; xl=input('Proporcione el valor inferior del intervalo, xl = '); xu=input('proporcione el valor superior del intervalo, xu = '); n=input('Proporcione el número de dígitos significativos de precisión, n = '); Es=0.5* 10 ^( 2 - n); fxl=feval(funcion,xl); fxu=feval(funcion,xu); if fxlfxu> 0 disp('Error. La función debe cambiar de signo en el intervalo!!'); else xr= 0 ; ni= 0 ; Ea= 100 ; do xrant=xr; xr=(xl+xu)/ 2 ; fxr=feval(funcion,xr); if fxlfxr< 0 xu=xr; elseif fxlfxr> 0 xl=xr; endif if ni> 0 Ea=((xr-xrant)/xr) 100 ; endif ni++; until(abs(Ea)<Es); endif z=double(xr); printf('El valor de la raíz calculado es xr = %g\n',xr); printf('El valor de la función evaluada en la raíces f(xr) = %g\n',fxr); printf('El valor del error aproximado final es Ea = %g\n',Ea); printf('Se alcanzó el resultado final en %d iteraciones\n',ni);
Max = abs(AB(q,i))/S(q); %El maximo {asignamos el primero al inicio} for j = (q+ 1 ):F %Recorremos la columna en busca de otro posible maximo if AB(j,i)/S(j) > Max %Si el elemento actual es mayor que el maximo registrado.. Max = abs(AB(j,i))/S(j); %Asignamos el valor de este maximo MaxF = j; %Asignamos la nueva fila maxima a su variable end end if (MaxF ~= q) %Si el maximo no se encuantra en la fila de inicio AB = IntercambioF(AB,MaxF,q); %Intercambiamos la fila de AB para q coincida S = IntercambioF(S,MaxF,q); % Tambien se debe cambiar en S, puesto q el orden ha cambiado end end %Columna ya ordenada if (AB(i,i) == 0 ) %El elemento de la diagonal NO puede ser 0, si es cero no existe solucion unica fprintf('No existe solucion unica para el sistema. Finalizado SIN exito'); %No existe solucion unica return;% Salimos end for j = (i+ 1 ):F %Modificamos las filas para hacer 0's m = (AB(j,i)/AB(i,i)); %m sera el multiplicando, es necesario declararlo %antes de intercambiar las filas porque el valor de los elementos %de las mismas variara cuando hagamos 0's, y por consiguiente el %valor de m for q = 1 :(C+ 1 ) %Para cada elemento de la fila... AB(j,q) = AB(j,q) - mAB(i,q); %Realizamos el cambio end end end for i = 1 :F if (AB(i,i) == 0 ) %Ningun elemento de la diagonal puede ser 0, si es cero no existe solucion unica fprintf('No existe solucion unica para el sistema. Finalizado SIN exito'); %No existe solucion unica return; %Salimos end end X = [ 0 ; 0 ]; %matriz con los resultados X(F) = AB(F,F+ 1 )/AB(F,F); %Asignamos el ultimo elemento for i = (F- 1 ):- 1 : 1 %Y vamos calculando los demas Sum = 0 ; %inicializacion de la variable Sum {para calcular el sumatorio} for j = (i+ 1 ):F %bucle para el sumatorio, para cada fila... Sum = Sum + AB(i,j)X(j); %Calculamos el resultado actual y lo a�adimos al conocido end X(i) = (AB(i,F+ 1 )-Sum)/AB(i,i); %Obtenemos X(i) end fprintf('Resolucion del sistema concluida en: %d segundos. El resultado: \n', (cputime - t)); R = X; %El resultado es X %A continuacion se encuentra la funcion IntercambioF, cuya funcion es %intercambiar filas de una matriz. En principio esta operacion se puede %realizar de dos formas, la expuesta y sabiendo q A(n,:) devuelve la fila %completa n de la matriz A. Yo he escogido la primera forma porque es un %metodo mas grafico y menos abstracto.
function Z = Intercambio(V,f1,f2) %Función interna para intercambiar filas [FV,CV] = size(V); %Obtenemos el número de filas y columnas {F y C respectivamente} CV1 = 0 ; %Aqui se almacena temporalmente un valor for n = 1 :CV %Bucle para recorrer las columnas CV1 = V(f1,n); %CV1 = fila 1 V(f1,n) = V(f2,n); %Asignamos a V(f2,n) = CV1; %Asignamos a la fila n� f2 la fila CV end Z = V; %el resultado es la nueva matriz V