Regla falsa error al imprimir
Publicado por ERNESTO (3 intervenciones) el 18/02/2021 04:44:47
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
/* Nombre del archivo: reglaFalsa
Nombre del alumno: Ernesto García Camacho
ID del alumno: 215406
Fecha de creacion: 17 de febrero del 2021
Descripcion del programa: Este programa lo que hace es aproximar de raiz de
la ecuacion f(x)= x^2 (|cosx|^(1/2))-5 usando el metodo de regla falsa. Para ello utiliza
dos funciones secundarias "reglaFalsa()" y "f()" y las manda a llamar con la
funcion principal main()
*/
//Declaracion de encabezados
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
/*Aqui se declaran las funciones secundarias "reglaFalsa()" y "f()"
*/
void reglaFalsa(float xi, float xf, float error);
float f(float x);
//Definicion de funcion principal main()
void main(){
/*Declaracion de variables a utiliar. "xi" para el valor inicial, "xf" para
el valor final, y "error" para el error aproximado maximo
*/
float xi;
float xf;
float error;
//Se de la un mensaje de bienvenida e introduccion al usuario
printf("\nBienvenido/a, esta funcion usa el metodo de la regla falsa para aproximar la raiz de f(x)= x^2 (|cosx|^(1/2))-5");
/*Se le empiezan a pedir los datos a usar, y a su vez de registran en las
variables declaradas
*/
printf("\nIngrese el valor inicial");
printf("\nxi= ");
scanf("%f", &xi);
printf("\nIngrese el valor final");
printf("\nxf= ");
scanf("%f", &xf);
printf("\nIngrese el valor de error aproximado maximo");
printf("\nError= ");
scanf("%f", &error);
/*Se manda llamar a la funcion secundaria "biseccion()" usando como parametros
los valores ingresados por el usuario
*/
reglaFalsa(xi, xf, error);
getch();
}
/*Definicion de la funcion secundaria reglaFalsa() la cual se encargara de
calcular el valor aproximado de la raiz de la funcion
Recibe como parametros el valor inicial, el valor final, y el error
aproximado maximo
*/
void reglaFalsa(float xi, float xf, float error){
/*Se declaran las variables a usar. "er" sera el valor del error aproximado
que se ira calculando en cada iteracion del metodo.
"xr1" sera el valor viejo y "xr2" el valor nuevo de xr al momento de
calcular el error aproximado en cada iteracion
"y" sera el valor al evaluar la funcion en xr
"fxi" sera el valor al evaluar la funcion en xi
"fxf" sera el valor al evaluar la funcion en xf
En la variable "n" se iran guardando el numero de iteraciones
*/
float er=1;
float xr2=1;
float xr1;
int n=1;
float y;
float fxi;
float fxf;
//Se despliega el encabezado de la tabla
printf("\n X Y Iteraciones");
printf("\n---------------------------");
/*Se crea el ciclo while, el cual se estara repitiendo mientras el valor
del error aproximado maximo sea mayor al ingresado por el usuario.
Notese que se toma el valor absoluto, esto es debido a que a veces el error
toma valores negativos, lo cual causa que el ciclo while se detenga,
para ello se asegura que siempre
salga un valor positivo en el porcentaje de error
*/
while (er>error){
//Se iguala xr1 al valor anterior de xr
xr1=xr2;
//se evalua la funcion en xi
fxi=f(xi);
//se evalua la funcion en xf
fxf=f(xf);
//Se calcula el valor nuevo de xr
xr2=xi-(((xf-xi)/(fxf-fxi))*fxi);
//se evalua la funcion en xr
y=f(xr2);
/*Se depliega en la tabla el valor calculado de xr, el valor de Y para
esa xr, y el numero de iteracion
*/
printf("\n%f %f %d", xr2, y, n);
/*Se calcula el error aproximado. Notese que se toma el valor absoluto,
esto es debido a que a veces el error toma valores negativos, lo cual
causa que el ciclo while se detenga, para ello se asegura que siempre
salga un valor positivo en el porcentaje de error
*/
er=abs((xr2-xr1)/xr2)*100;
/*Si al multiplicar f(xi)*f(xr) da negatico, entonces xr sera xf en la
siguiente iteracion
*/
if ((fxi*y)<0){
xf=xr2;
};
/*Si al multiplicar f(xi)*f(xr) da positivo, entonces xr sera xi en la
siguiente iteracion
*/
if ((fxi*y)>0){
xi=xr2;
};
/*Si al multiplicar f(xi)*f(xr) da 0, entonces significa que no se haran
mas calculos, por lo que se termina el ciclo con un break
*/
if ((fxi*y)==0){
break;
};
//contador de iteraciones
n=n+1;
}
printf("\n\nEl valor del error en la ultima iteracion fue de %f por ciento", er);
}
/*Declaracion de la funcion que calcula los valores de f(x)
recibiendo el valor de xr a calcular
*/
float f(float x){
//con el valor de xr se calcular el valor de f(x)
float y= pow(x,2)*(pow(abs(cos(x)),.5))-5;
//Regresa el valor calculado
return y;
}
Valora esta pregunta


0