4ta PrÁctica de Metodos Numericos
Transcript of 4ta PrÁctica de Metodos Numericos
CUARTA PRÁCTICA DE METODOS NUMERICOS
Alvaro, Alvarado Arista.
1. Escribir un programa que calcule la media de un conjunto de datos.
El algoritmo es:
function media n=input('ingrese el numero de datos\n'); f=0; for i=1:n m=input('ingrese los datos\n'); f= f + m; end fprintf('la media será es %6.2f\n',f/n)
Otra manera seria ingresar datos en forma de matriz y aplicar el comando mean.
2. Escribir un programa que calcule la varianza y la desviación estándar de un conjunto de datos.
El algoritmo es el siguiente:
function varianza n=input('ingrese el numero de datos\n'); f=0; g=0; for i=1:n m=input('ingrese los datos\n') f= f + m; g = g + (m^2); end me=f/n po=g/n var=po-(me^2) fprintf('la varianza sera es %6.2f\n',var) fprintf('la desviacion estandat sera es %6.2f\n',sqrt(var))
3. hallar la media y la desviación estándar de:
Xi Yi
0.15 4.4964
0.40 5.1284
0.60 5.6931
1.01 6.2884
1.50 7.0989
2.20 7.5507
2.40 7.5106
2.70 8.0756
2.90 7.8708
3.50 8.2403
3.90 8.5303
4.40 8.7394
4.60 8.9981
5.10 9.1450
6.60 9.5070
7.60 9.9115
El algoritmo es el siguiente:
function medydst n=str2num(char(inputdlg('ingrese el numero de datos a ingresar'))); x=[]; y=[]; for i=1:n x(1,i)=str2num(char(inputdlg('ingrese los valores de x:'))); end for j=1:n y(1,j)=str2num(char(inputdlg('ingrese los valores de y:'))); end mx=sum(x)/n; vx=sum((x.^2)/n); my=sum(y)/n; vy=sum((y.^2)/n); fprintf('la media de los datos x es = %g\n',mx) fprintf('la desviacion estandar de los datos x es = %g\n',sqrt(vx-
(mx^2))) fprintf('la media de los datos y es = %g\n',my) fprintf('la desviacion estandar de los datos y es = %g\n',sqrt(vy-
(my^2)))
Ingresando el valor de n:
Ingresando los valores de x: ……………….
ingresando los valores de y: ……………….
4. Escribir un programa para aproximación a una recta un conjunto de datos por el método de mínimos
cuadrados; incluir en dicho programa la gráfica de la recta, graficar el conjunto de datos, el coeficiente
de correlación dado por 𝑟 = 1− ( yi− a∗xi+b
2ni=0
yi−M 2ni=0
) , donde M es la media de los Yi.
Escoger r positivo si la pendiente de la recta es positivo y r negativo si la pendiente es negativa. También
que muestre las ecuaciones normales.
Los datos son los siguientes:
X 4 5 2 5 6 7 1 8 3 7
Y 5 6 4 5 7 10 3 11 4 9
El algoritmo es:
function mcuadrado n=str2num(char(inputdlg('ingrese el numero de datos\n'))); x=[]; y=[]; for i=1:n x(1,i)=str2num(char(inputdlg('ingrese los valores de x:'))); end for j=1:n y(1,j)=str2num(char(inputdlg('ingrese los valores de y:'))); end xy=sum(x.*y); x2=sum(x.^2); sx=sum(x); sy=sum(y); m=(sy/n); a=(n*xy-sx*sy)/(n*x2-(sx^2)); b=(sy*x2-xy*sx)/(n*x2-(sx^2)); r=sqrt(1-(sum((y-(a*x+b)).^2))/(sum((y-m).^2))) x_=linspace(min(x)-1,max(x)+1,100); y_=a*(x_)+b; plot(x_,y_,'r',x,y,'*'),ylabel(strcat('r=',num2str(r))),title(strcat('
y=',num2str(a),'x+',num2str(b)));axis square
5. Hallar la recta por el método de mínimos cuadrados que se ajuste mejor al conjunto de datos. Escribir
las ecuaciones normales.
Xi Yi
4 5
5 6
2 4
5 5
6 7
7 10
1 3
8 11
3 4
7 9
El algoritmo es el mismo solo cambiara en la última fila ….
plot(x_,y_,'r',x,y,'*'),xlabel(strcat('la ecuación normal es y=-
',num2str(a),'x+c')),ylabel(strcat('r=',num2str(r))),title(strcat('y='
,num2str(a),'x+',num2str(b)));axis square
6. Escribir un programa para aproximar a un polinomio de grado K un conjunto de datos por el método
de mínimos cuadrados. Incluir en dicho programa la gráfica del polinomio, la gráfica del conjunto de
datos, el coeficiente de correlación dado por 𝑟 = 1 − ( yi−P xi
2ni=0
yi−M 2ni=0
) , donde M es la
media de los Yi.
Trabajaremos con los siguientes datos:
X 4 5 2 5 6 7 1 8 3 7
Y 5 6 4 5 7 10 3 11 4 9
El algoritmo será:
function mcg n=str2num(char(inputdlg('ingrese el numero de datos n'))); k=str2num(char(inputdlg('ingrese el grado al que se va ha aproximar
K'))); x=[]; y=[]; for i=1:n x(1,i)=str2num(char(inputdlg('ingrese los valores de x:'))); end for j=1:n y(1,j)=str2num(char(inputdlg('ingrese los valores de y:'))); end x y m=[]; d=[]; e=-1; for a=1:(k+1) m(a,1)=sum(y.*(x.^(a-1))); end for b=1:(k+1) e=e+1; for c=1:(k+1) d(c,b)=sum(x.^(e+c-1)); end end m d f=inv(d)*m g=num2str(f(1,1)); for h=1:k l=g; p=num2str(f(h+1,1)); q=strcat(l,'+',p,'x^',num2str(h)); g=q end A=[]; w=[]; C=[]; for z=1:n C=x(1,z); for v=1:(k+1) w(1,v)=(C.^(v-1)); end A(1,z)=sum((f').*w); w=[]; end me=sum(y)/n; R=sqrt(1-(sum((y-A).^2))/(sum((y-me).^2))) x_=linspace(min(x),max(x),100); D=[]; E=[]; for r=1:100 D=x_(1,r); for F=1:(k+1) E(1,v)=(D.^(F-1)); end G(1,r)=sum((f').*E); E=[];
end plot(x_,G,'r',x,y,'*'),title(strcat('la ecuación normal es
y=-',g)),ylabel(strcat('r=',num2str(R)));axis square
Ingresamos los valores y la condición…..
La gráfica estará dado por:
7. Obtener la parábola por el método de mínimos cuadrados que se aproxima a la función 𝑓(𝑥) = x3
en
los puntos -1, 0, 8. ¿Cuáles son las ecuaciones normales? ¿Interprete el coeficiente de correlación?
X -1 0 8
Y -1 0 2
Al algoritmo anterior se le adiciona….
X=-.5/f(1,1) Y=2*f(1,1) Z=f(2,1) OR=strcat(num2str(X),'ln',num2str(Y),'x+',num2str(Z),'+C'); fprintf('la ecuación ortonormal es =%s\n',OR)
NOTA: El valor de R=1 en la grafica significa que no existe error o que es ínfimo.
8. Considere los puntos {(-2, -3), (-1, -6), (0, -5), (1, 1), (2, 13)}
Utilizando el programa anterior:
a. Determine el polinomio de grado 3 por el método de mínimos cuadrados que se ajuste a los
datos. Indicar las ecuaciones normales, coeficiente de correlación.
b. Determine el polinomio por el método de mínimos cuadrados que se ajuste a los datos.
Indicar las ecuaciones normales, coeficiente de correlación.
c. Determine la recta por el método de mínimos cuadrados que se ajuste a los datos. Indicar las
ecuaciones normales, coeficiente de correlación.
d. Explicar sus resultados.
A medida que aumentamos el grado del polinomio de una aproximación de datos; abra mayor
posibilidad de que el error sea menor.
9. Escribir un programa que calcule el producto de dos vectores en 𝑅𝑛 .
El algoritmo es:
function pro n=str2num(char(inputdlg('ingrese el numero de datos los ambos
vectores'))); x=[]; y=[]; for i=1:n x(1,i)=str2num(char(inputdlg('ingrese los valores de x:'))); end for j=1:n y(1,j)=str2num(char(inputdlg('ingrese los valores de y:'))); end fprintf('el producto de los 2 vectores es') x.*y
Los datos son:
X=[1 2 3] y el vector Y=[5 6 8]
10. Escribir un programa que calcule la norma de un vectores en 𝑅𝑛 .
El algoritmo es el siguiente:
function mod n=str2num(char(inputdlg('ingrese el numero de datos n'))); x=[]; for i=1:n x(1,i)=str2num(char(inputdlg('ingrese los valores del vector:'))); end r=sqrt(sum(x.^2)); fprintf('el valor de la norma del vector es =%f\n',r)
11. La moda es el elemento que más se repite de un conjunto de datos. Escribir un programa que calcule
la moda de un conjunto de datos.
El algoritmo esta dado por:
function moda n=str2num(char(inputdlg('ingrese el numero de datos'))); x=[]; y=[]; for a=1:n x(1,a)=str2num(char(inputdlg('ingrese los valores a analizar:'))); end fprintf('los numeros ingresados son:') x for b=1:n c=x(1,b); e=0; for d=1:n if c==x(1,d) e=e+1; end end y(1,b)=e; end fprintf('numero de repeciones') y
f=max(y); h=[]; j=0; for g=1:n if f==y(1,g) j=j+1; h(1,j)=g; end end fprintf('la moda de los datos es = %d\n',x(1,h(1,1)))
12. Dado un numero de día en un determinado año encuentre el día, mes y año al que corresponde,
sabiendo que enero, marzo, mayo, julio, octubre y diciembre tienen 31 días y que febrero tiene 28 ó 29
días según sea año normal o bisiesto. Por ejemplo el día 300 del año 2000 es 26/10/2000.
Para el ejemplo se considerara una fecha = 300 del año 2000
El algoritmo es:
function numdia a=str2num(char(inputdlg('ingrese el año'))); d=str2num(char(inputdlg('ingrese la cantidad de dias'))); if (d>0)&(d<367) if mod(a,4)==1 k=0; t=strcat('año no bisiesto'); else k=1; t=strcat('año bisiesto'); end f=strcat('la fecha_',num2str(d),'_del año_',num2str(a),'_pertenece a
un_',t); f if (0<d)&(d<32) dia=d mes='01' elseif ((d>31)&(d<(60+k))) dia=d-31 mes='02' elseif (d>59+k)&(d<=90+k) dia=d-(59+k) mes='03' elseif (d>90+k)&(d<=120+k)
dia=d-(90+k) mes='04' elseif (d>120+k)&(d<=151+k) dia=d-(120+k) mes='05' elseif (d>151+k)&(d<=181+k) dia=d-(151+k) mes='06' elseif (d>181+k)&(d<=212+k) dia=d-(181+k) mes='07' elseif (d>212+k)&(d<=243+k) dia=d-(212+k) mes='08' elseif (d>243+k)&(d<=273+k) dia=d-(243+k) mes='09' elseif (d>273+k)&(d<=304+k) dia=d-(273+k) mes='10' elseif (d>304+k)&(d<=334+k) dia=d-(304+k) mes='11' else (d>334+k)&(d<=365+k) dia=d-(334+k) mes='12' end g=strcat(num2str(dia),'/',mes,'/',num2str(a)); fprintf('la fecha esta dada por = %s\n',g) else fprintf('el dia %d es incorecto\n',d) end