Title | Método de Falsa Posición - Programación en C |
---|---|
Course | Métodos Numéricos |
Institution | Universidad Autónoma de Zacatecas |
Pages | 4 |
File Size | 217.7 KB |
File Type | |
Total Downloads | 49 |
Total Views | 124 |
Descripción , algoritmo y un ejemplo de su programación en Lenguaje C...
Método de Falsa Posición Aunque el método de Bisección es un buen ejemplo de un método cerrado que utiliza la fuerza bruta para encontrar la raíz de una función, este se considera muy poco eficiente, ya que el proceso de búsqueda puede ser muy lento, por lo cual es un método ineficiente. Una alternativa es el método de "Falsa Posición". Uno de los fallos del de Bisección es que no toma en cuenta al dividir el intervalo de búsqueda en dos intervalos la magnitud de los factores f(x) inferior y f(x) superior, esto es que no toma en cuenta que valor está más cerca de la raíz. Por su parte el método de Falsa Posición es un método alternativo que utiliza la característica de unir mediante una línea recta los valores de f(xi) y f(xs), esta recta al cruzar el eje de las 'x' proporciona una estimación de la raíz, es decir, una falsa posición de la raíz, la cual permite encontrar la raíz mediante un proceso iterativo.
Algoritmo del método de Falsa Posición 1.- Elija 2 valores iníciales 'xi' y 'xs', tales que exista un cambio de signo en el intervalo, esto es cierto si f(xi) * f(xs) < 0 2.- Calcule la aproximación a la raíz 'xr' mediante la siguiente ecuación: f(xs) * (xi - xs) xr = xs f(xi) - f(xs) 3.- Determine en cuál de los 2 sub-intervalos se encuentra la raíz, para ello lleve a cabo las siguientes evaluaciones: a) Si f(xi) * f(xr) < 0 la raíz se encuentra en el primer sub-intervalo, por lo tanto, xs = xr, Regrese al paso 2. b) Si f(xi) * f(xr) > 0 la raíz se encuentra en el segundo lo tanto, xi = xr, Regrese al paso 2. c) Si f(xi) * f(xr) = 0 la raíz es xr, Fin del ciclo
sub-intervalo,
por
Código del método de Falsa Posición programado en C #include #include #include
xract=xr; printf("%.6f",xr); gotoxy(55,wherey()); calc_fx(xr); fxr = temp; printf("%.6f",fxr); gotoxy(65,wherey()); if(fxi*fxr > 0) { printf(" +"); xi = xr; } else if(fxi*fxr < 0) { printf(" -"); xs = xr; } gotoxy(70,wherey()); if(corrida == 0) { printf("100"); ea = 100; } else { ea = ((xract - xrant)/xract)*100; if (ea < 0) ea = ea*-1; printf("%.5f",ea); } corrida++; printf("\n"); if(ea < error) op='S'; if(xr == 0) op='S';
float e = 2.718281828; float temp,xrant,xract; void calc_fx(float x) { temp = pow(e,-(x)) - x; } int main(){ char op; int corrida=0; float xi, fxi, xs, fxs, xr, fxr, ea; float error = 0.001; xi = 0; xs = 1; printf(" #: xi: f(xi): xs: f(xr): f(xi)* |Ea|:\n");
f(xs): xr:
printf(" f(xr):\n\n\n"); do { gotoxy(3,wherey()); printf("%d",corrida); gotoxy(10,wherey()); printf("%.2f",xi); gotoxy(20,wherey()); calc_fx(xi); fxi = temp; printf("%.2f",fxi); gotoxy(26,wherey()); printf("%.6f",xs); gotoxy(35,wherey()); calc_fx(xs); fxs = temp; printf("%.6f",fxs); gotoxy(46,wherey()); xrant=xr; xr = xs-((fxs*(xi - xs))/(fxi-fxs));
}while(op != 'S'); getch(); return 0; }
Ejecución del Programa...