Upload
victor-barroso-velazquez
View
66
Download
12
Embed Size (px)
DESCRIPTION
Problemas diversos en Scilab
Citation preview
Instituto Politcnico Nacional. Unidad Profesional Interdisciplinaria Campus Guanajuato.
Anlisis Numrico. Tarea 1.
Ejercicio 1.
Cdigo 1.
clear clc //La solucin del sistema esta dada por la ec. x=inv(A)*B //Donde A es nuestra matriz compuesta por nuestros coeficientes y //B es nuestro vector columna. A=[1 , 1 ,-%pi/4;1 ,2 ,-2*atan(2);1 ,3 , -3*atan(3)] //Ahora nombramos B que viene siendo a que estan igualadas nuestras ecuaciones, //osea el vector columna. B=[%pi/4;atan(2);atan(3)] //Por ultimo resolvemos nuestro sistema de ecuaciones con la formula dada //anteriormente. //IMPORTANTE pueden sacar la inversa de la matriz (A) para comprobar //que nuestro sistema tiene solucin. k=inv(A)*B //Una vez obtenidos los coeficientes "a","b" y "c", construimos nuestra funcin. function z=f(x) z=atan(x) // Nuestra funcin atan(x) endfunction function v=g(x) v=(((-0.6498337)+2.7942446*x))/(1+1.7303487*x)//Nuestra funcin con nuestros //coeficientes encontrados endfunction t=0:0.1:4;//El intervalo que deseamos que se grafiquen , con marca de paso de 0.1 plot(t,f);//Grafica de nuestra funcin atan(x) plot(t,g);//Grafica de nuestra funcin v=g(x) t=[1 2 3] v=[f(1) f(2) f(3)] w=[g(1) g(2) g(3)] plot(t,v,'*r'); plot(t,w,'*r'); xgrid() //De esta forma obtenemos la solucin de x al igual g(x)=f(x) deff('[y]=f(x)','y=atan(x) - (((-0.6498337)+2.7942446*x))/(1+1.7303487*x)'); deff('[y]=df(x)', 'y=1/(x^2 +1)-((1.3088-2.22045*10^(-16))/(x+0.577918)^2)'); fsolve(0.5,f,df)
Ejercicio 2.
Cdigo 2.
clear clc //Vamos a calcular el minimo de la funcin. //Para este ejercicio utilizamos el comando fminsearch. //Declaramos nuestra funciin function y=f(x) y= 100*(x(1)^2-x(2))^2 + (1-x(1))^2+90*(x(3)^2-x(4))^2+(1+x(3))^2+10*(x(2)-1)^2+(x(4)-1)^2+19.8*(x(2)-1)*(x(4)-1)//Escribimos nuestra funcin , usando el "x computacional" osea x(1)=x //x(2)=y , x(3)=z , x(4)=w endfunction [xmin] = fminsearch (f,[0;0;0;0])//Proporcionamos una variable([xmin]) para nombrar a fminsearch //dentro de fminsearch se llama a nuestra funcin y a los puntos en que deseamos buscar el min.
Ejercicio 3.
a) !"#$%&'( = + () b) ()(21 2 + ())
c) Cdigo 3. clear clc //Usamos la funcin optim para estimar el maximo de nuestra funcin //Construimos nuestra funcin function [f, g, ind]=h(x, ind) f=-[21*x(1)*sin(x(2))-2*x(2)^2*sin(x(2))+x(1)^2*sin(x(2))*cos(x(2))]; g=-[x(1)*cos(2*x(2))+sin(x(2))*(2*x(1)*cos(x(2))-4*x(1)+21);x(1)*cos(x(2))*(x(1)*cos(x(2))-2*x(1)+21)-x(1)^2*sin(x(2))^2]; //Utilizmaos el signo menos para encontrar el mximo endfunction x0=[3,1.5];//indicamos los puntos [f,xopt]=optim(h,x0)//Usamos la funcin optin d) 317.8
Ejercicio 4.
Sustituyendo valores y haciendo un poco de algebra, nuestra funcin es la siguiente. = 6 10!! ! + 4053333.3! A partir de esta funcin calculamos el mnimo.
Respuestas 509.81812 y 3118.9742 respectivamente.
Cdigo 4. clear clc //Creamos nuesta funcin function [d, g, ind]=f(x, ind) d=6*10^(-3)*x(1)^2+1/(x(1))^2*(405333333.3);//ponemos nuestra funcin original g=[(2*6*10^(-3))*x(1)-(2/(x(1))^3)*(405333333.3)];//En esta parte va la derivada de la funcin principal endfunction x0=[1]; [d,xopt]=optim(f,x0)//Utilizamos el comando optim para minimizar //Acontinuacin se mostraran las graficas cuando se varia el peso function z=f(x) z=6*10^(-3)*x^2+1/(x)^2*(228000000); endfunction function k=p(x) k=6*10^(-3)*x^2+1/(x)^2*(310333333.3); endfunction function v=h(x) v=6*10^(-3)*x^2+1/(x)^2*(513000000); endfunction function j=e(x) j=6*10^(-3)*x^2+1/(x)^2*(633333333.3); endfunction function a=w(x) a=6*10^(-3)*x^2+1/(x)^2*(405333333.3); endfunction t=0.5:0.01:4;//Rango donde se desea graficar plot(t,f)//Las plot(t,p) plot(t,h) plot(t,e) plot(t,w)
Ilustracin 1 Variacin del peso
Ejercicio 5.
Cdigo 5 clc clear //Para este problema solo seguimos las instrucciones del problema ya que venia semiresuelto function z=f(x, y) z=3*exp(-(x-1)^2-(y-2)^2)-2*exp(-(x-2)^2-(y-1)^2) endfunction z=feval(-2:0.2:4,-2:0.2:4,f); plot3d(-2:0.2:4,-2:0.2:4,z); function z=grad(x, y) z=[-6*(x-1)*exp(-(x-1)^2-(y-2)^2)+4*(x-2)*exp(-(x-2)^2-(y-1)^2) -6*(y-2)*exp(-(x-1)^2-(y-2)^2)+4*(y-1)*exp(-(x-2)^2-(y-1)^2 )] endfunction gradf1=grad(0,1) gradf2=grad(2.5,-1.5) contour(-2:0.2:4,-2:0.2:4,f,14); xi = [0 2.5] yi = [1 -0.5] xf = xi+[gradf1(1) gradf2(1)] yf = yi+[gradf1(2) gradf2(2)] xarrows([xi;xf],[yi;yf],3,[5 6])
Ilustracin 2 Grafica de curvas de nivel del cdigo 5
Ejercicio 6. Cdigo 6.
clear clc //DEfinimos la funcin que nos dan en el problema //la escribimos con el "x computacional" function y=f(x) y=[5*x(1);4*x(1)^2-2*sin(x(2)*x(3));x(2)*x(3)] endfunction w=numderivative(f,[1;2;3])//Una vez escrita usamos el comando "numderivative" //llamando a la funcin "f" y dando valores
Ilustracin 3 Matriz jacobiana
Ejercicio 7. Cdigo 7.
clear clc //Para usar la funcin "derivat" , necesitamos crear nuestro polinomio, //para esto usamosla funcin "poly" p=poly([5 -1 2 -3], 'x' , 'coeff')//indicamos la variabla a usar e indicamos los coeficientes derivat(p)//Apliamos la funcin "derivat" e indicamos lo que queremos derivar , en este caso p horner(derivat(p),-3) //Evaluamos la derivada en x=-3 //Ahora con derivative //Creamos el polinomio function y=f(x) y=-3*x^3+2*x^2+-x+5 endfunction p=derivative(f,-3)//Aplicamos derivative llamadno a la funcin ya antes declarada y evaluando en //x=-3 simp(p) La derivaba evaluada en x=-3 , es igual a 94.
Ejercicio 8.
Cdigo 8. clear clc //En el problema nos piden sacar la segunda derivada de 4 funciones a nuestra eleccin. //Para este caso utilizaremos el comando [df,ddf]=numderivative(f,x0), esta sugerencia de uso //no los proporcion el mismo ejercicio. //Declaramos las 4 funciones. function y=f(x) y=3*x^4+5*x^2+sin(x)+6//Primera funcin endfunction function h=g(x) h=32*cos(x)+tan(x)*x^2 + 6*x//Segunda funcin endfunction function u=r(x) u=tan(3*x)+cos(4*x)+6*x^2//Tercera funcin endfunction function j=b(x) j=atan(x)+4*x^2 + 6//Cuarta funcin endfunction //Utilizamos el comando que nos proporcionaron en el ejercicio , una vez puesto indicamos en que //punto deseamos que se evalue. [df,ddf]=numderivative(f,4) [df,ddf]=numderivative(g,5) [df,ddf]=numderivative(r,0) [df,ddf]=numderivative(b,7) Los resultados son : 586.75681 , 807.34636, - 1867.9462 , 313.57747 ,-3.9999987, 3, 7.9944 ,56.02 respectivamente.
Ejercicio 9.
Cdigo 9. clear clc //Resolveremos un sistema de ecuaciones //Como podemos observar son de pimer orden y no las dan despejadas. //empzaremos declarando a nuestra funcin function [dx]=f(t, x) dx=[x(1)-x(2)+2*t-t^2-t^3;x(1)+x(2)-4*t^2+t^3] endfunction t0=0;//Las condiciones de t x0=[1;0];//Las condiciones de x t=0:0.1:6;//La grafica de 0 a 6 con marco de paso de 0.1 x=ode(x0,t0,t,f)//Solucin de la ec diferencial con los valores iniciales y de mov de la grfic plot(t,x(1,:),"*");//La grafica de nuestro resultado //Ahora necesitamos hacer una comparacin con su solucin analtica. //Empezamos haciendo la declaracin para la primer funcin llamada x(t) function e=x(t) e=%e^t*cos(t)+t^2 endfunction //Hacemos la declaracin de la segunda funcin llamada y(t) function s=y(t) s=%e^t*sin(t)-t^3 endfunction t=0:0.1:6;//indicamos como se quiere mover t plot(t,x);//Graficamos a la funcion x(t) plot(t,y);//Graficamos a la funcin y(t)
Ilustracin 4 Como se puede ver , una de nuestras funciones coincide con las respuestas analticas.
Ejercicio 10.
Cdigo 10. clear clc //Resolucin de una ecuacin diferencial de segundo orden //Realizamos un cambio de variable para simplificar el orden de nuestra ecuacin y de esa forma //poderla meterla en Scilab //Declaramos nuestra funcin function dy=f(t, x) dy=[x(2);-3*(cos(t))^2+2] endfunction t0=0;//Las condiciones de t x0=[0;0];//Las condiciones de x t=0:0.1:6;//La grafica de 0 a 6 con marco de paso de 0.1 x=ode(x0,t0,t,f);//Solucin de la ec diferencial con los valores iniciales y de mov de la grfic plot(t,x(1,:),"*");//La grafica de nuestro resultado
Ilustracin 5 Grafica de nuestra solucin
Ejercicio 11 Cdigo 11
//Resolvemos la ecuacin diferencial //Realizamos un cambio de variable function [y]=dif(t, y) y=[y(2);y(3);2*y(2)+log(y(3))+cos(y(1))] endfunction y=ode([1;-3;5],0,t,dif);//Indcamos la solucin de nuestra ec diferencial t=0:0.1:10;//Indicamos en que rango la grafique plot(t,y(1,:)); plot(t,y);
Ilustracin 6 Grafica de nuestra solucin.
Ejercicio 12
Cdigo 12
clc clear //definimos la funcin con el comando poly, de esa forma creamos nuestro polinomio p=poly([0 -840 -599 -77 55 22 3 1/7],'x','c') derivat(p)//Lo derivamos y obetenemos de nuevo otra funcin la cual repetimos nuestro procedimiento anterior y=poly([-840 -1198 -231 220 110 18 1],'x','c') roots(y)//Una vez creado nuestro polinomio le sacamos sus raices o sus soluciones g=derivat(derivat(p))// como se puede analizar sacamos la derivada de la derivada horner(g,-7)//Graficamos los puntos para obener los puntos crticos horner(g,-2) horner(g,-5) horner(g,-4) horner(g,-3) horner(g,-1) function y=f(x) y=-840*x-599*x^2-77*x^3+55*x^4+22*x^5+3*x^6+0.142871*x^7 endfunction x=0:0.1:15;//DE esta forma graficamos plot(x,f)
Ilustracin 7 No se pudo encontrar mnimos en este rango
Ejercicio 13.
Cdigo 13. clear clc //Ponemos los datos obetenidos para el tiempo y velocidad t=[0 1.5 2 3 4.5 5 6.5 7 8.5 10]; v=[0 4 12 21 32 46 53 58 60 63]; i=[1 4 6 8 9];//en donde queremos que interpolemos esos datos interpln([t;v],i)//Usamos la funcin "interpln" function [y]=lineal(x)//Declaramos nuestra funcin t=[0 1.5 2 3 4.5 5 6.5 7 8.5 10] v=[0 4 12 21 32 46 53 58 60 63] y=interpln([t;v],x) endfunction x=1:0.01:8;//Rango donde queremos graficar plot(x,lineal) plot(t,v,'*r') I=intg(0,10,lineal)
Ilustracin 8 Interpolacin de nuestros datos.
Ejercicio 14. Cdigo 14.
//Para este problema ya nos dan el codigo solo es de observarlo y analizarlo // El cdigo queda de la siguiente forma clear clc t=0:0.1:15; comet3d(sin(t),sin(2*t),sin(%pi*t))
Ilustracin 9 Movimiento del insecto