Matlab - seleccionar una iteracion especifica de for

   
Vista:

seleccionar una iteracion especifica de for

Publicado por david (1 intervención) el 24/03/2018 17:45:51
Buen dia, necesito hacer que mi ecuacion no lineal me arroje el error relarivo, ya tengo la ecuacion por biseccion pero no logro meter el calculo de error relativo debido a que no se como seleccionar una iteracion especifica, necesito que es resultado de Pn se reste asi Pn-pn-1(o sea el pn anterior)/pn, y tambien hacer de ello un bucle para que se vayan calculando los errores relativos de cada iteracion, muchas gracias de antemano

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
% donde se piden datos
function y = fun(x)
  y = x^2-2;
endfunction
a = input('Introduzca el valor de a:');
b = input('Introduzca el valor de b:');
tol = input('Introduzca el número de tolerancia:');
% iniciacion de variables
maxIter = ceil((log(b-a)-log(tol))/log(2))-1;
n = 0;
c = (a+b)/2;
yc = fun(c);
fprintf('n      a           b             Pn         f(Pn) \n')
fprintf('%i     %f  %f     %f     %f \n', n, a, b, c, yc)
ya = fun(a);
yb = fun(b);
% Bucle para n>=1
for n = 1:maxIter
  if yc == 0
    a = c;
    b = c;
    fprintf('%i     %f  %f     %f     %f \n', n, a, b, c, yc)
    break
  elseif yb*yc>0
    b = c;
    yb = yc;
  else
    a = c;
    ya = yc;
  endif
  c = (a+b)/2;
  yc = fun(c);
  fprintf('%i     %f  %f     %f     %f \n', n, a, b, c, yc)
endfor
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO

seleccionar una iteracion especifica de for

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (4811 intervenciones) el 12/10/2018 18:23:42
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
function biseccion11
% donde se piden datos
a = input('Introduzca el valor de a:');
b = input('Introduzca el valor de b:');
tol = input('Introduzca el número de tolerancia:');
% iniciacion de variables
maxIter = ceil((log(b-a)-log(tol))/log(2))-1
n = 0;
c = (a+b)/2;
P(1)=c;
yc = fun(c);
fprintf('n      a           b             Pn         f(Pn)            error Relativo \n')
fprintf('%2i     %f  %f     %f     %12.8f \n', n, a, b, c, yc)
ya = fun(a);
yb = fun(b);
error=tol;
% Bucle para n>=1
for n = 1:maxIter
  if yc == 0
    a = c;
    b = c;
    fprintf('%2i     %f  %f     %f     %12.8f    %12.8f \n  ', n, a, b, c, yc, error)
    break
  elseif yb*yc>0
    b = c;
    yb = yc;
  else
    a = c;
    ya = yc;
  end
  c = (a+b)/2;
  P(n+1)=c;
  error=(P(n+1)-P(n))/P(n);
  yc = fun(c);
  fprintf('%2i     %f  %f     %f     %12.8f   %12.8f \n', n, a, b, c, yc, error)
  end
 
 
end
  function y = fun(x)
  y = x^2-2;
  end

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
>> biseccion11
Introduzca el valor de a:0
Introduzca el valor de b:2
Introduzca el número de tolerancia:0.00001
 
maxIter =
 
    17
 
n      a           b             Pn         f(Pn)            error Relativo
 0     0.000000  2.000000     1.000000      -1.00000000
 1     1.000000  2.000000     1.500000       0.25000000     0.50000000
 2     1.000000  1.500000     1.250000      -0.43750000    -0.16666667
 3     1.250000  1.500000     1.375000      -0.10937500     0.10000000
 4     1.375000  1.500000     1.437500       0.06640625     0.04545455
 5     1.375000  1.437500     1.406250      -0.02246094    -0.02173913
 6     1.406250  1.437500     1.421875       0.02172852     0.01111111
 7     1.406250  1.421875     1.414063      -0.00042725    -0.00549451
 8     1.414063  1.421875     1.417969       0.01063538     0.00276243
 9     1.414063  1.417969     1.416016       0.00510025    -0.00137741
10     1.414063  1.416016     1.415039       0.00233555    -0.00068966
11     1.414063  1.415039     1.414551       0.00095391    -0.00034507
12     1.414063  1.414551     1.414307       0.00026327    -0.00017259
13     1.414063  1.414307     1.414185      -0.00008200    -0.00008631
14     1.414185  1.414307     1.414246       0.00009063     0.00004316
15     1.414185  1.414246     1.414215       0.00000431    -0.00002158
16     1.414185  1.414215     1.414200      -0.00003884    -0.00001079
17     1.414200  1.414215     1.414207      -0.00001726     0.00000539


Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Asesoría online en Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO

seleccionar una iteracion especifica de for

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (4811 intervenciones) el 12/10/2018 18:29:03
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
% donde se piden datos
function y = fun(x)
  y = x^2-2;
endfunction
a = input('Introduzca el valor de a:');
b = input('Introduzca el valor de b:');
tol = input('Introduzca el número de tolerancia:');
% iniciacion de variables
maxIter = ceil((log(b-a)-log(tol))/log(2))-1;
n = 0;
c = (a+b)/2;
P(1)=c;
yc = fun(c);
fprintf('n      a           b             Pn         f(Pn)            error Relativo \n')
fprintf('%2i     %f  %f     %f     %12.8f \n', n, a, b, c, yc)
ya = fun(a);
yb = fun(b);
% Bucle para n>=1
for n = 1:maxIter
  if yc == 0
    a = c;
    b = c;
     fprintf('%2i     %f  %f     %f     %12.8f    %12.8f \n  ', n, a, b, c, yc, error)
    break
  elseif yb*yc>0
    b = c;
    yb = yc;
  else
    a = c;
    ya = yc;
  endif
  c = (a+b)/2;
    P(n+1)=c;
  error=(P(n+1)-P(n))/P(n);
  yc = fun(c);
   fprintf('%2i     %f  %f     %f     %12.8f   %12.8f \n', n, a, b, c, yc, error)
endfor


Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Asesoría online en Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad