Sie sind auf Seite 1von 4

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:

/**Programanewrap.c**/
/**Sintaxis:newrap**/
/**Objetivo:
Calcularunaaproximacindeunarazdelafuncinf(x),(dadadentro
delcdigofuente),conentradasportecladoparalatolerancia,el
nmeromximodeiteracionesylosextremos[a,b]delintervalodonde,
sepresume,estlaraz.SeutilizaelmtododeNewton-Raphson.
Elerrorsecalculaconbasealadiferenciaentreelvaloraproximado
enunaiteracinylasiguiente.
Autor:RalE.DutariD.
Cdula:9-132-758
Fechadelaltimaactualizacin:29-junio-1997
**/
/**Declaracindeheadersaincluir**/
#include <stdio.h>
#include <math.h>
#include <conio.h>
/**Declaracindelafuncinprincipal**/
void main(void)
{
/**Declaracindevariablesglobalesempleadas**/
float
x0;
float
xi;
float
error_relativo;
float
tolerancia;
int
i;
int
max_iter;
/**Declaracindefuncionesempleadas**/
float f(float x);
float df(float x);
float va(float x);
/**InicializacindePantalla**/
clrscr();
printf("METODODENEWTON-RAPHSON\n");
printf("FUNCION:f(x)=EXP(-x)-x\n");
printf("Indiqueelvalorinicial'x0':");
scanf("%f", &x0);
printf("Indiquelatoleranciamnima:");
scanf("%f", &tolerancia);
printf("Indiqueelnmeromximodeiteracionesarealizar:");
scanf("%d", &max_iter);
/**Impresindelencabezadodelatabla**/
printf("\n");
printf("Iter.");
printf("x0");
printf("Error");
printf("\n");

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:

printf("-----------");
printf("-----------");
printf("-----------");
printf("\n");
/**Inicializacindelsistemaydelasvariables**/
i = 0;
error_relativo = 1;
xi = 0;
/**Ciclodeiteraciones**/
do
{
/**Impresindelrenglndedatos**/
printf("%#7d",i);
printf("%#13.5f",x0);
printf("%#12.5f",error_relativo);
printf("\n");
xi = x0 - f(x0)/df(x0);
i = i + 1;
error_relativo = va((xi - x0)/xi);
x0 = xi;
}
while (((i > max_iter) || (error_relativo < tolerancia)) == 0);
/**Salidasdelprograma**/
/**Cierredelcuadro**/
printf("-----------");
printf("-----------");
printf("-----------");
printf("\n");
if (i > max_iter)
{
printf("Elnmeromximodeiteraciones(%d)asidorebasado\n", max_iter);
printf("Nohayconvergencia\n");
printf("Laltimaaproximacines:%#10.5f.\n", x0);
printf("En%diteraciones.\n", i);
printf("Conunerrorde%#10.5f.\n", error_relativo);
}
else
if (error_relativo < tolerancia)
{
/**Impresindelltimorenglndedatos**/
printf("%#7d",i);
printf("%#13.5f",x0);
printf("%#12.5f",error_relativo);
printf("\n");
printf("-----------");
printf("-----------");
printf("-----------");
printf("\n");
printf("Larazbuscadaes:%#10.5f.\n", x0);
printf("Hayconvergenciapara%diteraciones.\n", i);
printf("Conunerrorde%#10.5fenlaaproximacin.\n", error_relativo);

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:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:

}
/**FindelPrograma**/
printf("PulseENTERparafinalizar...");
getch();
}
/**Funcinqueevaluaalafuncin
f(x)=exp(-x)-xenelprograma.
SINTAXIS:floatf(floatx);
x:Eslavariableindependientedentrodelafuncin.**/
float f( float x)
{
/**f(x)**/
/**Declaracindevariablesdelafuncinf(x)**/
float y;

/**Cuerpodelafuncin**/
y = exp(- x) - x;
return(y);
/**f(x)**/

/**Funcinqueevaluaaladerivadadelafuncin
f'(x)=(exp(-x)-x)'=-exp(-x)-1enelprograma.
SINTAXIS:floatf(floatx);
x:Eslavariableindependientedentrodelafuncin.**/
float df( float x)
{
/**df(x)**/
/**Declaracindevariablesdelafuncindf(x)**/
float y;

/**Cuerpodelafuncin**/
y = - exp(- x) - 1;
return(y);
/**df(x)**/

/**Funcinqueevaluaelvalorabsolutodeunnmeroreal,deacuerdo
aladefinicinmatemticatradicional
SINTAXIS:floatva(floatx);
x:Eslavariableindependientedentrodelafuncin.**/
float va( float x)
{
/**va(x)**/
/**Declaracindevariablesdelafuncinf(x)**/
float y;
/**Cuerpodelafuncin**/
if (x < 0)

166:
167:
168:
169:
170:

y = - x;
else

y = x;
return(y);
/**va(x)**/

Das könnte Ihnen auch gefallen