
12/05/2011, 19:47
|
| | Fecha de Ingreso: octubre-2009
Mensajes: 25
Antigüedad: 15 años, 4 meses Puntos: 0 | |
graficar resultados intermedios con matlab necesito ayuda para graficar los resultados intermedios en un script del metodo de newton el programa da la opcion de mostrar los resultados intermedios y necesito saber como graficar cada resultado usando como puntos (P0,F0) osea sacando un punto de cada resultado y graficar todos espero que alguien me pueda ayudar ahi pongo el codigo.
Código:
% ALGORITMO DE NEWTON-RAPHSON
%
% Para encontrar una solucion a f(x) = 0 dada una
% aproximacion inicial p0:
%
% ENTRADA: aproximacion inicial p0; tolerancia TOL;
% maximo numero de iteraciones NO.
%
% SALIDA: solucion aproximada de p o un mensaje de fallo
syms('OK', 'P0', 'TOL', 'NO', 'FLAG', 'NAME', 'OUP', 'F0');
syms('I', 'FP0', 'D','x','s','time');
tic;
TRUE = 1;
FALSE = 0;
fprintf(1,'Este es el Metodo de Newton-Raphson\n');
fprintf(1,'Ingrese la funcion F(x) en terminos de x\n');
fprintf(1,'Por ejemplo: cos(x)\n');
time=toc;
s = input(' ');
tic;
F = inline(s,'x');
fprintf(1,'Ingrese la derivada de F(x) en terminos de x\n');
time=time+toc;
s = input(' ');
tic;
FP = inline(s,'x');
OK = FALSE;
time=time+toc;
fprintf(1,'Ingrese la aproximacion inicial\n');
P0 = input(' ');
while OK == FALSE
tic;
fprintf(1,'Ingrese tolerancia\n');
time=time+toc;
TOL = input(' ');
if TOL <= 0
tic;
fprintf(1,'La Tolerancia debe ser positiva\n');
time=time+toc;
else
tic;
OK = TRUE;
end
time=time+toc;
end
tic;
OK = FALSE;
time=time+toc;
while OK == FALSE
tic;
fprintf(1,'Ingrese el maximo numero de iteraciones - sin punto decimal\n');
time=time+toc;
NO = input(' ');
if NO <= 0
tic;
fprintf(1,'Debe ser un entero positivo\n');
time=time+toc;
else
tic;
OK = TRUE;
end
time=time+toc;
end
if OK == TRUE
tic;
fprintf(1,'Seleccione el destino de la salida\n');
fprintf(1,'1. Pantalla\n');
fprintf(1,'2. Archivo de Texto\n');
fprintf(1,'Digite 1 o 2\n');
time=time+toc;
FLAG = input(' ');
if FLAG == 2
tic;
fprintf(1,'Ingrese el nombre del archivo de la forma - unidad:\\nombre.ext\n');
fprintf(1,'Por ejemplo: A:\\SALIDA.DTA\n');
time=time+toc;
NAME = input(' ','s');
tic;
OUP = fopen(NAME,'wt');
time=time+toc;
else
tic;
OUP = 1;
time=time+toc;
end
tic;
fprintf(1,'Seleccione tipo de la salida\n');
fprintf(1,'1. Solo la respuesta\n');
fprintf(1,'2. Todas las aproximaciones intermedias\n');
fprintf(1,'Digite 1 o 2\n');
time=time+toc;
FLAG = input(' ');
tic;
fprintf(OUP, 'Metodo de Newton\n');
time=time+toc;
if FLAG == 2
tic;
fprintf(OUP, ' I P F(P)\n');
time=time+toc;
end
tic;
F0 = F(P0);
% STEP 1
I = 1;
OK = TRUE;
time=time+toc;
% STEP 2
while I <= NO & OK == TRUE
tic;
% STEP 3
% compute P(I)
FP0 = FP(P0);
D = F0/FP0;
% STEP 6
P0 = P0 - D;
F0 = F(P0);
time=time+toc;
if FLAG == 2
tic;
fprintf(OUP,'%3d %14.12e %14.12e\n',I,P0,F0);
time=time+toc;
end
% STEP 4
if abs(D) < TOL
tic;
% procedure completed successfully
fprintf(OUP,'\nSolucion aproximada = %.12e\n',P0);
fprintf(OUP,'con F(P) = %.12e\n',F0);
fprintf(OUP,'Numero de iteraciones = %d\n',I);
fprintf(OUP,'Tolerancia = %.12e\n',TOL);
time=time+toc;
fprintf(OUP,'tiempo de programa: %f segundos',time);
OK = FALSE;
% STEP 5
else
tic;
I = I+1;
end
time=time+toc;
end
if OK == TRUE
% STEP 7
% procedure completed unsuccessfully
tic;
fprintf(OUP,'\nLa iteracion numero %d',NO);
fprintf(OUP,' genero la aproximacion %.10e\n',P0);
fprintf(OUP,'con F(P) = %.10e , que no cumplio con la tolerancia %.10e\n',F0,TOL);
time=time+toc;
fprintf(OUP,'tiempo de programa: %f segundos',time);
end
if OUP ~= 1
fclose(OUP);
fprintf(1,'Archivo de salida %s creado con exito \n',NAME);
end
end
estuve buscando y encontre como era algo muy facil
solo es cuestion de poner
plot(P0,F0);
hold on; %para que no borre los puntos graficados anteriormente
talvez a alguien le sirva
Última edición por maur1c10; 12/05/2011 a las 20:39
Razón: resuelto
|