Matlab - iteraciones en matlab

 
Vista:
sin imagen de perfil

iteraciones en matlab

Publicado por Fernando (15 intervenciones) el 31/01/2015 01:51:13
Buenas noches;

Tengo un problemilla, espero que alguien pueda ayudarme. La cuestion es la siguiente tengo que calcular dos valores, s y Zt mediante iteraciones hasta que la diferencia entre dos valores consecutivos de s sea menor que el error que estime o se realicen 40 iteraciones como maximo. Solo puedo tomar como solucion los numeros reales positivos.

Zt = sqrt (A/B) y s = ( R2/ (sqrt (C)-R1)) para n>=3000

Zt = sqrt (D/E) y s = ( R2/ (sqrt (F)-R1)) para n<3000

He hecho esta función pero no me salen las soluciones correctas.

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
function [s, Zt] = FERNANDO (error, n, nsinc, T, s_aprox, Zt_aprox)
 
p = 1;
Vf = 219.4;
R2 = 0.1598;
R1 = 0.09773;
l = 0.00022959;
r = 0.22789;
pi = 3.1416;
s_anterior = 10;
s_rec = s_aprox;
Zt_rec = Zt_aprox;
cont = 1;
A = 3*60*R2*((Vf)^2);
 
while ((abs(s_anterior - s_rec)>error) && (cont<40))
  s_anterior = s_rec;
  Zt_anterior = Zt_rec;
    if n >= 3000
        B = 2*pi*s_anterior*T*(n/(1-s_anterior));
        if B>0
            C = ((Zt_anterior)^2) - ((2 * pi * l * nsinc * p /60)^2);
               if ((C>0) && ((sqrt(C) - R1)>0))
                  Zt_rec = sqrt (A/B);
                  s_rec = R2 / (sqrt(C) - R1);
               else
                  s_rec = s_anterior;
                  Zt_rec = Zt_anterior;
               end
        else
            s_rec = s_anterior;
            Zt_rec = Zt_anterior;
        end
    else
        D = (3 * R2 * 60 * (((n * p)/(1-s_anterior))/(60 * r ))^2);
        E = 2*pi*s_anterior*T*(n/(1-s_anterior));
        if(D/E)>0
            F = ((Zt_anterior)^2) - ((2 * pi * l * nsinc * p /60)^2);
               if ((F>0) && ((sqrt(F) - R1)>0))
                   Zt_rec = sqrt (D/E);
                   s_rec = R2 / (sqrt(F) - R1);
               else
                   s_rec = s_anterior;
                   Zt_rec = Zt_anterior;
               end
        else
            s_rec = s_anterior;
            Zt_rec = Zt_anterior;
        end
    end
   cont = cont+1;
end
  Zt = Zt_rec;
  s = s_rec;

Muchas gracias
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