Wednesday, June 14, 2017

Ejercicio Métodos numéricos #1

t · y
-6  0.99
-5 0.94
-4 0.88
-3 0.78
-2 0.615
-1 0.31
0 0
1 0.31
2 0.615
3 0.78
4 0.88
5 0.94
6 0.99

a)
Hallar un modelo de padé que vincula a 't' con 'y', es decir y=G(t), que ajuste a los datos de la tabla con error menor a 0.04. Usando dicha función pronostique los valores que tomaría y(t) para t=3.5 y para t=4. Estime lim t->inf (G(t)).

b)
Para el modelo hallado en a) considere la ecuación diferencial:
y''(t)=y(t)*G(t)
y(0)=0.15
y'(0)=0.03
Encuentre T tal que y(t)=1.8 y grafique para x(t) para t en [0,T]

voy a usar funciones:
1)
function [n,m]=busca_grados_pade(x,y,err_rel_propuesto)
n=0;
m=1;
gt=n+m;
[P,Q]=padefit(x,y,n,m);
err=norm(y-padeval(P,Q,x))/norm(y);
while err>=err_rel_propuesto
    gt=gt+1;
    for k=gt:-1:1
        m=k;
        n=gt-k;
        [P,Q]=padefit(x,y,n,m);
        err=norm(y-padeval(P,Q,x))/norm(y);
        if err<err_rel_propuesto
            return;
        end
    end
end
 
2)
function [P,Q]=padefit(x,y,n,m)
A=[];
for k=n:-1:0
    A=[A x.^k];
end
for k=m:-1:1
    A=[A -y.*(x.^k)];
end
param=pinv(A)*y;
P=param(1:n+1);
Q=param(n+2:end);

3)
function y=padeval(P,Q,x)
y=polyval(P,x)./polyval([Q;1],x);
4) 
function y=fun(x,n)
a=cputime;
if nargin==1
    n=2+round(log(0.5*x.^2+1));
end
y=exp(-x.^2/5)+x;
if n==0
    y=y-1;
    %a
    %cputime
    %puf=1
    %pause
    while cputime<a+2
        %puf=puf+1
        a=a-0.0001*rand(1,1);
        %b=cputime
        %pause;
    end
    return;
end
y=fun(y,n-1); 
 
SOLUCION:
>> t=[-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6]
>> y=[0.99,0.94,0.88,0.78,0.615,0.31,0,0.31,0.615,0.78,0.88,0.94,0.99];
>> t=t';
>> y=y';
>> [a,n]=busca_grados_pade(t,y,0.04)

a =

     2


n =

     2

>> [P,Q]=padefit(t,y,a,n);
>> F=@(x)padeval(P,Q,x);
>> F(3.5)

ans =

    0.8392

>> lim=P(1)/Q(1)

lim =

    1.0866

 

No comments:

Post a Comment