29
1.- Escriba en Matlab que implementen los siguientes algoritmos y póngalos a prueba con matrices apropiadas 6x6 a) El de sustitución progresiva y sustitución regresiva para sistemas triangulares - Sustitución regresiva %resuelve un sistema de ecuaciones a traves de la sustitución regresiva A=input('ingrese la matriz triangular superior de coeficientes A='); b=input('ingrese el vector de terminos independientes b='); n=input('ingrese el orden de la matriz n='); x(n)=b(n)/A(n,n); for i=n-1:-1:1 sum=0; for j=i+1:n sum=sum+A(i,j)*x(j); end x(i)=(b(i)-sum)/A(i,i); end disp('Las soluciones son:'); disp(x); >> sustitucionregresiva ingrese la matriz triangular superior de coeficientes A=[34,12,3,87,4,6;0,2,6,3,8,9;0,0,36,42,7,13;0,0,0,8,4,12;0,0,0,0, 5,29;0,0,0,0,0,10] ingrese el vector de terminos independientes b=[471,128,389,124,199,60] ingrese el orden de la matriz n=6 Las soluciones son: 1 2 3 4 5 6 COMPROBANDO ESTA SOLUCIÓN:

Algoritmos para matlab

  • Upload
    vitoto96

  • View
    10.516

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Algoritmos para matlab

1.- Escriba en Matlab que implementen los siguientes algoritmos y póngalos a prueba con matrices apropiadas 6x6

a) El de sustitución progresiva y sustitución regresiva para sistemas triangulares

- Sustitución regresiva

%resuelve un sistema de ecuaciones a traves de la sustitución regresivaA=input('ingrese la matriz triangular superior de coeficientes A=');b=input('ingrese el vector de terminos independientes b=');n=input('ingrese el orden de la matriz n=');x(n)=b(n)/A(n,n);for i=n-1:-1:1 sum=0; for j=i+1:n sum=sum+A(i,j)*x(j); end x(i)=(b(i)-sum)/A(i,i);enddisp('Las soluciones son:');disp(x);

>> sustitucionregresivaingrese la matriz triangular superior de coeficientes A=[34,12,3,87,4,6;0,2,6,3,8,9;0,0,36,42,7,13;0,0,0,8,4,12;0,0,0,0,5,29;0,0,0,0,0,10]ingrese el vector de terminos independientes b=[471,128,389,124,199,60]ingrese el orden de la matriz n=6Las soluciones son: 1 2 3 4 5 6

COMPROBANDO ESTA SOLUCIÓN:

>> A\(b')

ans =

1 2 3 4 5 6

Page 2: Algoritmos para matlab

- Sustitución progresiva

%resuelve un sistema de ecuaciones a traves de la sustitucion progresivaA=input('ingrese la matriz triangular inferior de coeficientes A=');b=input('ingrese el vector de terminos independientes b=');n=input('ingrese el orden de la matriz n=');x(1)=b(1)/A(1,1);for i=2:n sum=0; for j=1:(i-1) sum=sum+A(i,j)*x(j); end x(i)=(b(i)-sum)/A(i,i);end disp('Los resultados son:');disp(x);

>> sustitucionprogresivaingrese la matriz triangular inferior de coeficientes A=[4,0,0,0,0,0;51,23,0,0,0,0;34,12,15,0,0,0;2,6,4,23,0,0;56,23,41,16,19,0;65,34,27,98,12,11]ingrese el vector de terminos independientes b=[8,194,206,236,768,1464]ingrese el orden de la matriz n=6Los resultados son: 2 4 6 8 10 12COMPROBANDO:

>> A\(b')

ans =

2 4 6 8 10 12

Page 3: Algoritmos para matlab

b) El de eliminación de Gauss simple y el de eliminación de Gauss con filas permutadas.

-Gauss Simple

%metodo de gauss simple con respuestasn=input('ingrese el orden de la matriz n=');A=input('ingrese la matriz de coeficientes A=');b=input('ingrese el vector de terminos independientes b=');for k=1:n for i=k+1:n z=A(i,k)/A(k,k); A(i,k)=0; for j=k+1:n A(i,j)=A(i,j)-z*A(k,j); endb(i)=b(i)-z*b(k); endenddisp('Por Gauss la matriz queda expresada asi:');disp(A); x(n)=b(n)/A(n,n);for p=n-1:-1:1 sum=0; for t=p+1:n sum=sum+A(p,t)*x(t); end x(p)=(b(p)-sum)/A(p,p);end disp('Las soluciones al sistema ingresado son:');disp(x);

>> gaussimpleingrese el orden de la matriz n=6ingrese la matriz de coeficientes A=[12,23,34,4,5,7;89,76,56,34,97,34;123,46,89,32,5,9;3,9,5,7,14,15;3,8,5,90,54,18;23,67,48,1,76,2]ingrese el vector de terminos independientes b=[1008,4708,3425,701,2374,2650]Por Gauss la matriz queda expresada asi: 12.0000 23.0000 34.0000 4.0000 5.0000 7.0000 0 -94.5833 -196.1667 4.3333 59.9167 -17.9167 0 0 134.0432 -17.6934 -166.4529 -26.8062 0 0 0 4.7972 2.0923 10.5864 0 0 0 0 5.6424 -180.0640 0 0 0 0 0 218.5816

Page 4: Algoritmos para matlab

Las soluciones al sistema ingresado son: 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000

COMPROBANDO:

>> A\b'ans =

10.0000 11.0000 12.0000 13.0000 14.0000 15.0000

- El de eliminación de Gauss con filas permutadas

%resuelve el sistema de ecuaciones a partir del metodo de gauss con permutacionn=input('ingrese el orden de la matriz n=');A=input('ingrese la matriz de coeficientes A=');b=input('ingrese el vector de terminos independientes b=');P=input('ingrese el orden de permutacion P=');for k=1:n for i=k+1:n z=A(P(i),k)/A(P(k),k); A(P(i),k)=0; for j=k+1:n A(P(i),j)=A(P(i),j)-z*A(P(k),j); endb(P(i))=b(P(i))-z*b(P(k)); endenddisp('Por Gauss la matriz queda expresada asi:A=');disp(A);disp('La matriz de coeficientes queda expresada asi: b=')disp(b);x(P(n))=b(P(n))/A(P(n),n);for p=n-1:-1:1 sum=0; for t=p+1:n sum=sum+A(P(p),t)*x(P(t)); end x(P(p))=(b(P(p))-sum)/A(P(p),p);end disp('Las soluciones al sistema ingresado son:');disp(x);

Page 5: Algoritmos para matlab

>> permutacioningrese el orden de la matriz n=6ingrese la matriz de coeficientes A=[12,23,34,4,5,7;89,76,56,34,97,34;123,46,89,32,5,9;3,9,5,7,14,15;3,8,5,90,54,18;23,67,48,1,76,2]ingrese el vector de terminos independientes b=[1008,4708,3425,701,2374,2650]ingrese el orden de permutacion P=[2,4,5,1,3,6]Por Gauss la matriz queda expresada asi:A= 1.0e+003 *

0 0 0 -3.5330 -1.7777 -0.2412

0.0890 0.0760 0.0560 0.0340 0.0970 0.0340

0 0 0 0 -0.0042 0.1343

0 0.0064 0.0031 0.0059 0.0107 0.0139

0 0 0.0005 0.0839 0.0417 0.0052

0 0 0 0 0 0.2186

La matriz de coeficientes queda expresada asi: b=

1.0e+004 *

-7.4435 0.4708 0.1955 0.0542 0.1757 0.3279

Las soluciones al sistema ingresado son:

13.0000 10.0000 14.0000 11.0000 12.0000 15.0000

LA RESPUESTA YA FUE COMPROBADA Y ES CORRECTA

Page 6: Algoritmos para matlab

c) El de eliminación de Gauss con pivoteo de filas escaladas

%resuelve un sistema de ecuaciones con filas escaladasA=input('ingrese la matriz de coeficientes A=');b=input('ingrese el vector de terminos independientes b=');n=length(A);P=[1:n];for i=1:n S(i)=max(abs(A(i,:))); enddisp('LOS MAXIMOS VALORES DE CADA FILA SON:');disp(S);for r=1:n-1 for u=r:n T(u)=A(u,r)/S(u); end%reordena el vector permutación de manera adecuada a=max(T); for k=r:n if T(k)==a d=k; end end %permuta el vector permutación q=P(r); P(r)=P(d); P(d)=q; %matriz de gauss for i=r+1:n z=A(P(i),r)/A(P(r),r); A(P(i),r)=0; for j=r+1:n A(P(i),j)=A(P(i),j)-z*A(P(r),j); end b(P(i))=b(P(i))-z*b(P(r)); end T(r)=0;enddisp('LA MATRIZ QUEDA EXPRESADA ASI:');disp(A);disp('LA MATRIZ TRANSPUESTA DE COEFICIENTES QUEDA DE LA FORMA:')disp(b);disp('EL VECTOR PERMUTACION ES DE LA FORMA');disp(P);%hallando las soluciones

Page 7: Algoritmos para matlab

x(P(n))=b(P(n))/A(P(n),n);for p=n-1:-1:1 sum=0; for t=p+1:n sum=sum+A(P(p),t)*x(P(t)); end x(P(p))=(b(P(p))-sum)/A(P(p),p);end disp('Las soluciones(en el orden del vector permutación) al sistema ingresado son:');disp(x);

>> filasescaladas

ingrese la matriz de coeficientes A=[12,23,34,4,5,7;89,76,56,34,97,34;123,46,89,32,5,9;3,9,5,7,14,15;3,8,5,90,54,18;23,67,48,1,76,2]

ingrese el vector de terminos independientes b=[1008,4708,3425,701,2374,2650]

LOS MAXIMOS VALORES DE CADA FILA SON:

34 97 123 15 90 76

LA MATRIZ QUEDA EXPRESADA ASI:

0 0 15.3767 2.4579 -19.2833 6.0214

0 0 0 0 -10.3490 35.6065

123.0000 46.0000 89.0000 32.0000 5.0000 9.0000

0 0 0 0 0 8.7551

0 0 0 89.9446 43.9535 18.0815

0 58.3984 31.3577 -4.9837 75.0650 0.3171

LA MATRIZ TRANSPUESTA DE COEFICIENTES QUEDA DE LA FORMA:

1.0e+003 *

Page 8: Algoritmos para matlab

0.0368 0.3892 3.4250 0.1313 2.0559 2.0096

EL VECTOR PERMUTACION ES DE LA FORMA

3 6 1 5 2 4

Las soluciones(en el orden del vector permutación) al sistema ingresado son:

12.0000 14.0000 10.0000 15.0000 13.0000 11.0000

COMPROBANDO: UNA VEZ MAS SE TRABAJO CON EL MISMO SISTEMA POR LO QUE LAS RESPUESTAS UAN VEZ MAS SON CORRECTAS.

d) Los métodos iterativos de Richardson, Jacobi y Gauss-Seidel. Incluya más de un criterio para detener el algoritmo.

- Método de Richardson

%resuelve un sitema de ecuaciones mediante el metodo iterativo de RichardsonA=input('ingrese la matriz de coeficiente A:');b=input('ingrese la matriz transpuesta de términos independientes b=');x=input('ingrese un vector de aproximacion x=');m=input('ingrese el numero de iteraciones m=');E=input('ingrese la precision buscada E=');n=length(A);' k X'X=x;for k=1:m H=A*x'; if abs(H-b')<E break end for i=1:n sum=0; for j=1:n sum=sum+A(i,j)*x(j); end r(i)=b(i)-sum; end for i=1:n x(i)=x(i)+r(i); end if abs(X-x)<E break end X=x; fprintf('%d\t%d\n',k,x)enddisp(x);

Page 9: Algoritmos para matlab

>> richardsoningrese la matriz de coeficiente A:[1,0.2,0.07,0.08,0.1,0.05;0.087,1,0.3,0.05,0.065,0.1;0.032,0.31,1,0.24,0.03,0.12;0.098,0.034,0.032,1,0.16,0.28;0.34,0.013,0.076,0.15,1,0.035;0.01,0.38,0.23,0.045,0.094,1]ingrese la matriz transpuesta de términos independientes b=[2.73,4.112,5.482,6.742,6.404,8.11]ingrese un vector de aproximacion x=[0,0,0,0,0,0]ingrese el numero de iteracciones m=100ingrese la precision buscada E=0.0001

ans =

k X

1 2.730000e+000 4.112000e+000 5.482000e+000 6.742000e+000 6.404000e+000

8.110000e+000

2 -6.140000e-002 6.655300e-001 1.336520e+000 2.863788e+000 3.710562e+000

4.353914e+000

3 1.685483e+000 2.896618e+000 3.956555e+000 4.869835e+000 5.732693e+000

7.072650e+000

4 5.572289e-001 1.455015e+000 2.340654e+000 3.454155e+000 4.514564e+000

5.324407e+000

5 1.281142e+000 2.362730e+000 3.409751e+000 4.349856e+000 5.313260e+000

6.433366e+000

6 8.177887e-001 1.771424e+000 2.733190e+000 3.775539e+000 4.800909e+000

5.719919e+000

7 1.116262e+000 2.148067e+000 3.170142e+000 4.144444e+000 5.128673e+000

6.178863e+000

8 9.251106e-001 1.905370e+000 2.890389e+000 3.907458e+000 4.917689e+000

5.884844e+000

9 1.047991e+000 2.060892e+000 3.070230e+000 4.059478e+000 5.052935e+000

Page 10: Algoritmos para matlab

6.073820e+000

10 9.691628e-001 1.960959e+000 2.954867e+000 3.961840e+000 4.966049e+000

5.952576e+000

11 1.019787e+000 2.025080e+000 3.028957e+000 4.024505e+000 5.021806e+000

6.030433e+000

12 9.872943e-001 1.983905e+000 2.981405e+000 3.984271e+000 4.986005e+000

5.980459e+000

13 1.008155e+000 2.010334e+000 3.011936e+000 4.010098e+000 5.008986e+000

6.012543e+000

14 9.947641e-001 1.993367e+000 2.992337e+000 3.993518e+000 4.994232e+000

5.991947e+000

15 1.003361e+000 2.004259e+000 3.004919e+000 4.004162e+000 5.003703e+000

6.005169e+000

16 9.978422e-001 1.997266e+000 2.996842e+000 3.997328e+000 4.997623e+000

5.996681e+000

17 1.001385e+000 2.001755e+000 3.002027e+000 4.001715e+000 5.001526e+000

6.002130e+000

18 9.991107e-001 1.998873e+000 2.998699e+000 3.998899e+000 4.999020e+000

5.998632e+000

19 1.000571e+000 2.000723e+000 3.000835e+000 4.000707e+000 5.000629e+000

6.000878e+000

20 9.996335e-001 1.999536e+000 2.999464e+000 3.999546e+000 4.999596e+000

5.999436e+000

21 1.000235e+000 2.000298e+000 3.000344e+000 4.000291e+000 5.000259e+000

6.000362e+000

22 9.998490e-001 1.999809e+000 2.999779e+000 3.999813e+000 4.999834e+000

Page 11: Algoritmos para matlab

5.999768e+000

23 1.000097e+000 2.000123e+000 3.000142e+000 4.000120e+000 5.000107e+000

6.000149e+000

24 9.999378e-001 1.999921e+000 2.999909e+000 3.999923e+000 4.999931e+000

5.999904e+000

25 1.000040e+000 2.000051e+000 3.000058e+000 4.000049e+000 5.000044e+000

6.000061e+000

26 9.999743e-001 1.999967e+000 2.999962e+000 3.999968e+000 4.999972e+000

5.999961e+000

1.0000 2.0000 3.0000 4.0000 5.0000 6.0000

COMPROBANDO:

b =

2.7300 4.1120 5.4820 6.7420 6.4040 8.1100

>> A\b'

ans =

1.0000

2.0000

3.0000

4.0000

5.0000

6.0000

Page 12: Algoritmos para matlab

- Método de Jacobi

%resuelve un sistema de ecuaciones mediante el metodo de jacobiA=input('ingrese la matriz de coeficiente A:');b=input('ingrese la matriz transpuesta de términos independientes b=');x=input('ingrese un vector de aproximacion x=');m=input('ingrese el numero de iteracciones m=');E=input('ingrese la precision buscada E');n=length(A);X=x;' k X'for k=1:m H=A*x'; if abs(H-b')<E break end for i=1:n sum=0; for j=1:n if i~=j sum=sum+A(i,j)*x(j); end end U(i)=(b(i)-sum)/A(i,i); end for i=1:n x(i)=U(i); end if abs(X-x)<E break end X=x; fprintf('%d\t%d\n',k,x)enddisp('La respuesta final es');disp(x);

>> jacobi

ingrese la matriz de coeficiente A:[1,0.2,0.07,0.08,0.1,0.05;0.087,1,0.3,0.05,0.065,0.1;0.032,0.31,1,0.24,0.03,0.12;0.098,0.034,0.032,1,0.16,0.28;0.34,0.013,0.076,0.15,1,0.035;0.01,0.38,0.23,0.045,0.094,1]ingrese la matriz transpuesta de términos independientes b=[1008,4708,3425,701,2374,2650]ingrese un vector de aproximacion x=[0,0,0,0,0,0]ingrese el numero de iteracciones m=50ingrese la precision buscada E0.001

ans =

Page 13: Algoritmos para matlab

k X

1 1008 4708 3425 701 2374 26502 -5.993300e+002 3.138444e+003 1.375804e+003 -7.892960e+002

1.511876e+003 -1.915710e+0023 2.055395e+002 4.307750e+003 2.638324e+003 4.207412e+002

2.557511e+003 1.040352e+0034 -3.796607e+002 3.607310e+003 1.780475e+003 -2.505329e+002

1.948080e+003 1.448455e+0025 -2.010291e+001 4.078305e+003 2.303187e+003 2.063335e+002

2.353384e+003 7.016640e+0026 -2.558124e+002 3.785340e+003 1.957048e+003 -8.240161e+001

2.097267e+003 3.402090e+0027 -1.062063e+002 3.976918e+003 2.175764e+003 1.039214e+002

2.263484e+003 5.705731e+0028 -2.028779e+002 3.855131e+003 2.034240e+003 -1.534937e+001

2.157494e+003 4.219634e+0029 -1.410426e+002 3.933713e+003 2.124725e+003 6.136314e+001

2.225793e+003 5.170902e+00210 -1.808161e+002 3.883399e+003 2.066511e+003 1.217256e+001

2.182034e+003 4.559270e+00211 -1.553092e+002 3.915744e+003 2.103839e+003 4.377098e+001

2.210155e+003 4.951599e+00212 -1.716927e+002 3.894996e+003 2.079860e+003 2.349257e+001

2.192112e+003 4.699631e+00213 -1.611782e+002 3.908321e+003 2.095248e+003 3.651283e+001

2.203699e+003 4.861349e+00214 -1.679292e+002 3.899768e+003 2.085368e+003 2.815504e+001

2.196262e+003 4.757520e+00215 -1.635956e+002 3.905259e+003 2.091710e+003 3.352071e+001

2.201036e+003 4.824170e+00216 -1.663778e+002 3.901735e+003 2.087639e+003 3.007623e+001

2.197971e+003 4.781382e+00217 -1.645918e+002 3.903998e+003 2.090252e+003 3.228749e+001

2.199939e+003 4.808850e+00218 -1.657383e+002 3.902545e+003 2.088574e+003 3.086795e+001

2.198676e+003 4.791216e+00219 -1.650023e+002 3.903477e+003 2.089652e+003 3.177925e+001

2.199487e+003 4.802536e+00220 -1.654748e+002 3.902879e+003 2.088960e+003 3.119423e+001

2.198966e+003 4.795269e+002

Page 14: Algoritmos para matlab

21 -1.651715e+002 3.903263e+003 2.089404e+003 3.156979e+0012.199300e+003 4.799934e+002

22 -1.653662e+002 3.903016e+003 2.089119e+003 3.132869e+0012.199086e+003 4.796939e+002

23 -1.652412e+002 3.903175e+003 2.089302e+003 3.148347e+0012.199224e+003 4.798862e+002

24 -1.653214e+002 3.903073e+003 2.089184e+003 3.138411e+0012.199135e+003 4.797628e+002

25 -1.652699e+002 3.903138e+003 2.089260e+003 3.144789e+0012.199192e+003 4.798420e+002

26 -1.653030e+002 3.903096e+003 2.089211e+003 3.140695e+0012.199156e+003 4.797912e+002

27 -1.652818e+002 3.903123e+003 2.089243e+003 3.143323e+0012.199179e+003 4.798238e+002

28 -1.652954e+002 3.903106e+003 2.089223e+003 3.141636e+0012.199164e+003 4.798028e+002

29 -1.652866e+002 3.903117e+003 2.089235e+003 3.142719e+0012.199174e+003 4.798163e+002

30 -1.652923e+002 3.903110e+003 2.089227e+003 3.142024e+0012.199167e+003 4.798077e+002

31 -1.652887e+002 3.903115e+003 2.089232e+003 3.142470e+0012.199171e+003 4.798132e+002

32 -1.652910e+002 3.903112e+003 2.089229e+003 3.142183e+0012.199169e+003 4.798097e+002

33 -1.652895e+002 3.903114e+003 2.089231e+003 3.142367e+0012.199170e+003 4.798119e+002

34 -1.652904e+002 3.903112e+003 2.089230e+003 3.142249e+0012.199169e+003 4.798105e+002

La respuesta final es 1.0e+003 *

-0.1653 3.9031 2.0892 0.0314 2.1992 0.4798COMPROBANDO:>> A\b'ans = 1.0e+003 * -0.1653 3.9031 2.0892 0.0314 2.1992 0.4798

Page 15: Algoritmos para matlab

- Método iterativo de Gauss - Seidel

%resuelve un sitema de ecuaciones mediante el metodo iterativo de%Gauss-SeidelA=input('ingrese la matriz de coeficiente A:');b=input('ingrese la matriz transpuesta de términos independientes b=');x=input('ingrese un vector de aproximacion x=');m=input('ingrese el numero de iteracciones m=');E=input('ingrese la precision buscada E=');n=length(A);' k X'X=x;for k=1:m H=A*x'; if abs(H-b')<E break end for i=1:n sum=0; for j=1:n if i~=j sum=sum+A(i,j)*x(j); end end x(i)=(b(i)-sum)/A(i,i); end if abs(X-x)<E break end X=x; fprintf('%d\t%d\n',k,x)enddisp('La respuesta final es:');disp(x);

>> gaussiterativoingrese la matriz de coeficiente A:[1,0.2,0.07,0.08,0.1,0.05;0.087,1,0.3,0.05,0.065,0.1;0.032,0.31,1,0.24,0.03,0.12;0.098,0.034,0.032,1,0.16,0.28;0.34,0.013,0.076,0.15,1,0.035;0.01,0.38,0.23,0.045,0.094,1]ingrese la matriz transpuesta de términos independientes b=[2.73,4.112,5.482,6.742,6.404,8.11]ingrese un vector de aproximacion x=[0,0,0,0,0,0]ingrese el numero de iteracciones m=50ingrese la precision buscada E=0.01

ans =

k X

1 2.730000e+000 3.874490e+000 4.193548e+000 6.208534e+0004.175442e+000 4.974002e+000

Page 16: Algoritmos para matlab

2 4.986266e-001 1.731324e+000 2.717142e+000 4.486530e+0005.158387e+000 6.135386e+000

3 1.012005e+000 2.035653e+000 2.850798e+000 3.939136e+0005.011185e+000 6.022336e+000

4 1.005947e+000 2.044326e+000 2.997660e+000 3.989941e+0004.998307e+000 5.984247e+000

5 9.930604e-001 2.003494e+000 3.003494e+000 4.005131e+0005.001830e+000 5.997535e+000

La respuesta final es: 0.9931 2.0035 3.0035 4.0051 5.0018 5.9975COMPROBANDO:

>> A\b'

ans =

1.0000 2.0000 3.0000 4.0000 5.0000 6.0000

NUESTRAS RESPUESTAS SON APROXIMADAS.

e) El algoritmo del método de la potencia.

%halla el valor propio de una matriz por el metodo de la potenciaA=input('ingrese la matriz de coeficiente A:');x=input('ingrese un vector propio al azar x=');m=input('ingrese el numero de iteracciones m=');E=input('ingrese el grado de exactitud buscado E=');C=(y(1,1)/x(1,1))+5;for k=1:m y=A*x; X=x(1,1); Y=y(1,1); R=Y/X; x=y; fprintf('%d\t%d\n',k,R) if abs((C-R))<E break end C=R; enddisp('Uno de los valores propios es:');disp(R);

Page 17: Algoritmos para matlab

>> valorpropioingrese la matriz de coeficiente A:[1,0.2,0.07,0.08,0.1,0.05;0.087,1,0.3,0.05,0.065,0.1;0.032,0.31,1,0.24,0.03,0.12;0.098,0.034,0.032,1,0.16,0.28;0.34,0.013,0.076,0.15,1,0.035;0.01,0.38,0.23,0.045,0.094,1]ingrese un vector propio al azar x=[1;1;1;1;1;1]ingrese el numero de iteracciones m=50ingrese el grado de exactitud buscado E=0.001

1 1.500000e+000

2 1.546207e+000

3 1.579544e+000

4 1.602046e+000

5 1.616658e+000

6 1.625959e+000

7 1.631826e+000

8 1.635520e+000

9 1.637851e+000

10 1.639326e+000

11 1.640264e+000

Uno de los valores propios es:

1.6403

COMPROBANDO:>> [V,LAMBDA]=eig(A)V =…..LAMBDA = Columns 1 through 4 1.6420 0 0 0 0 1.1012 0 0 0 0 0.8730 + 0.1543i 0 0 0 0 0.8730 - 0.1543i 0 0 0 0 0 0 0 0

Page 18: Algoritmos para matlab

2.- Aplique la aceleración de Aitken a algunos métodos iterativos para calcular raíces:

- Metodo De La Secante Acelerado

% resuelve ecuaciones por el metodo de la secante con aceleración de Aitkenf = input('funcion f=');a = input('punto inicial1 a=');b = input('punto inicial2 b=');m = input('numero de interaciones m=');E = input('precision E=');u = f(a) ; v = f(b) ;r = zeros(1,m);for k =1:m if abs(u)<abs(v) c=a; a=b; b=c; w=u; u=v; v=w; end s = (b-a)/(v-u); a = b; u = v; b = b - v*s; r(k)= b; v = f(b); if k>2 R(k-2) =(r(k-2)*r(k)-(r(k-1)^2))/(r(k)-2*r(k-1)+r(k-2)); if f(R(k-2))<E break; end end fprintf('%d\t%f\n',k,b) enddisp('La respuesta es');R

>> secanteaceleradofuncion f=@(x)x^5-x-1-sin(x)punto inicial1 a=3punto inicial2 b=2numero de interaciones m=80precision E=0.0011 1.8667222 1.595114La respuesta es:T = 1.2553

Page 19: Algoritmos para matlab

Haciendo una compración con la convergencia del método de la secante sin aceleración veamos:

>> secanteingrese la funcion f=@(x)x^5-x-1-sin(x)ingrese el valor del primer punto aproximado a=4ingrese el valor del segundo punto aproximado b=3ingrese el número de repeticiones M=25ingrese la presicion buscada d=0.00001ingrese la presicion buscada 2 E=0.00001 k x f(x)1 2.694123 137.8073492 2.276988 57.1695163 1.981253 26.6299114 1.723379 11.4903325 1.527662 4.7935206 1.387570 1.7728547 1.305349 0.5196198 1.271258 0.0935019 1.263778 0.00667310 1.263203 0.00009611 1.263194 0.000000 1.2632

Como podemos ver, con el método de aceleración de Aitken, el valor buscado salta con mayor rapidez.

- Metodo De Newton Acelerado

% resuelve ecuaciones por el metodo de Newton con aceleración de Aitkenf=input('ingrese la funcion=');x=input('Ingrese un valor aproximado a la raiz x= ');M=input('Ingrese el número de iteracciones M= ');d=input('ingrese la derivada de la funcion = ');E=input('ingrese la precision buscada E=');r = zeros(1,m);u = f(a) ; v = f(b) ;r = zeros(1,m);for k=1:M a=x; x=x-f(x)/d(x); r(k)= x; if abs(x-a)<E break end if k>2 T(k-2) =(r(k-2)*r(k)-(r(k-1)^2))/(r(k)-2*r(k-1)+r(k-2)); G=T(k-2); if f(T(k-2))<E break; end fprintf('%d\t%f\n',k,G) end enddisp('La respuesta es');disp(G);

Page 20: Algoritmos para matlab

>> newtonaceleradoingrese la funcion=@(x)x^5-x-1-sin(x)Ingrese un valor aproximado a la raiz x= 4Ingrese el número de iteracciones M= 20ingrese la derivada de la funcion = @(x)5*x^4-1-cos(x)ingrese la precision buscada E=0.000011 3.2030992 2.570346La respuesta es 0.2632

Como vemos la convergencia es mucho mayor al método de Newton sin aceleración. Veamos.

>> newtoningrese la funcion=@(x)x^5-x-1-sin(x)Ingrese un valor aproximado a la raiz x= 4Ingrese el núemero de iteracciones M= 20ingrese la derivada de la funcion = @(x)5*x^4-1-cos(x)ingrese la precision buscada E=0.000001 k x f(x) x-xo1 3.203099 333.030799 -0.7969012 2.570346 108.080002 -0.6327533 2.074754 34.493921 -0.4955934 1.700352 10.521316 -0.3744015 1.443260 2.827009 -0.2570926 1.305808 0.525717 -0.1374527 1.266208 0.034628 -0.0396008 1.263211 0.000186 -0.0029979 1.263194 0.000000 -0.00001610 1.263194 -0.000000 -0.000000el valor de la raiz es 1.2632

La aceleración de Aitken para los métodos iterativos es básicamente realizar algunas modificaciones básicas a los algoritmos.

Page 21: Algoritmos para matlab

3.- Implemente el algoritmo el algoritmo de diferencias divididas. Aplique para calcular el polinomio de interpolación para f(x)=(x^5*sen(x))/(e^x-tanh(x)) en [-5,5]

a) usando 5 y después 25 nodos igualmente espaciados. Grafique F(x) y P(x). Comente.

%calcula un polinomio de interpolacion por el metodo de interpolación por%diferencias divididasf=input('ingrese la función a interpolar f=');n=input('ingrese la cantidad de nodos n=');a=input('ingrese el valor del limite inferior a=');b=input('ingrese el valor del limite superior b=');d=abs((a-b)/(n-1));for i=1:n x(i)=a+d*(i-1); y(i)=f(x(i));endfor i=1:n C(i,1)=y(i);endfor j=2:n for k=1:(n-j+1) C(k,j)=(C(k+1,j-1)-C(k,j-1))/(x(k+j-1)-x(k)); endenddisp(C);disp('Los coeficientes buscados son:');disp(C(1,:));

>> interpolacioningrese la función a interpolar f=@(x)((x^5)*sin(x))/(exp(x)+tanh(x))ingrese la cantidad de nodos n=5ingrese el valor del limite inferior a=-5ingrese el valor del limite superior b=5 1.0e+003 *

3.0172 -1.2327 0.2517 -0.0342 0.0035

-0.0646 0.0258 -0.0048 0.0003 0

0 0.0018 -0.0023 0 0

0.0044 -0.0098 0 0 0

-0.0201 0 0 0 0

Page 22: Algoritmos para matlab

Los coeficientes buscados son:

1.0e+003 *

3.0172 -1.2327 0.2517 -0.0342 0.0035

Graficando: F(x):

P(x):

Page 23: Algoritmos para matlab

>> interpolacion

ingrese la función a interpolar f=@(x)((x^5)*sin(x))/(exp(x)+tanh(x))

ingrese la cantidad de nodos n=25

ingrese el valor del limite inferior a=-5

ingrese el valor del limite superior b=5

Los coeficientes buscados son:

1.0e+003 *

Columns 1 through 8

3.0172 -2.3768 0.1564 0.5192 -0.2789 0.0638 -0.0034 -0.0020

Columns 9 through 16

0.0006 -0.0001 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000

Columns 17 through 24

-0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000

Column 25

-0.0000

(en ese caso se ha producido un gran error por redondeo; pues como vemos muchos de los coeficientes dan como valor 0, cuando en realidad solo son próximos a dicho valor)

b) halle el error de aproximación en algunos puntos x E[-5,5]

%calcula el error en algunos puntos de una funcion de aproximacionf=input('ingrese la funcion real F=');p=input('ingrese la funcion de aproximación P=');x=input('ingrese el punto donde desea evaluar el error de interpolación x=');e=abs(p(x)-f(x));disp('El error de aproximacion en el punto x es:');disp(e);

Page 24: Algoritmos para matlab

>> erroringrese la funcion real F=@(x)((x^5)*sin(x))/(exp(x)+tanh(x))ingrese la funcion de aproximación P=@(x) 3017.2-1232.7*(x+5)+251.7*(x+2.5)*(x+5)-34.2*(x)*(x+2.5)*(x+5)+3.5*x*(x+2.5)*(x+5)*(x-2.5)ingrese el punto donde desea evaluar el error de interpolación x=-5El error de aproximacion en el punto x es: 0.0423

>> erroringrese la funcion real F=@(x)((x^5)*sin(x))/(exp(x)+tanh(x))ingrese la funcion de aproximación P=@(x) 3017.2-1232.7*(x+5)+251.7*(x+2.5)*(x+5)-34.2*(x)*(x+2.5)*(x+5)+3.5*x*(x+2.5)*(x+5)*(x-2.5)ingrese el punto donde desea evaluar el error de interpolación x=0.2El error de aproximacion en el punto x es: 22.3900

>> erroringrese la funcion real F=@(x)((x^5)*sin(x))/(exp(x)+tanh(x))ingrese la funcion de aproximación P=@(x) 3017.2-1232.7*(x+5)+251.7*(x+2.5)*(x+5)-34.2*(x)*(x+2.5)*(x+5)+3.5*x*(x+2.5)*(x+5)*(x-2.5)ingrese el punto donde desea evaluar el error de interpolación x=4.9El error de aproximacion en el punto x es: 11.9957