Matlab - seleccionar una iteracion especifica de for

 
Vista:
sin imagen de perfil

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
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

seleccionar una iteracion especifica de for

Publicado por JOSE JEREMIAS CABALLERO (5917 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
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

seleccionar una iteracion especifica de for

Publicado por JOSE JEREMIAS CABALLERO (5917 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