Mudanças entre as edições de "Mmcc3"

De WikiLICC
Ir para: navegação, pesquisa
m (Lista de Exercícios)
m (CrankNicolson)
Linha 208: Linha 208:
 
  clear
 
  clear
 
  function v=u0(x)
 
  function v=u0(x)
   // if( 1/4 <=x & x <= 3/4 ) then
+
   // if( 1/4 <=x & x <= 3/4 ) then
   //     v=1-abs(4*(x-1/2))
+
   //     v=1-abs(4*(x-1/2))
   // else
+
   // else
   //     v=0
+
   //     v=0
  // end
+
  //   end
  v=sin(x*(2*%pi))
+
    v=sin(x*(2*%pi))
 
  endfunction
 
  endfunction
 
+
 
  L=1    // comprimento do dominio
 
  L=1    // comprimento do dominio
 
  N=160    // intervalos  
 
  N=160    // intervalos  
 
  h=L/(N)
 
  h=L/(N)
  Tfinal=0.85
+
  Tfinal=2.5
  lambda=5
+
  lambda=0.8
 
  k=lambda*h
 
  k=lambda*h
 
  a=1
 
  a=1
 
   
 
   
  x=linspace(0,L,N+1)
+
  x=linspace(0,L+h,N+2)
  u=zeros(N+1)
+
  u=zeros(N+2)
 
   
 
   
 
  // condicao inicial
 
  // condicao inicial
  for i=1:N+1
+
  for i=1:N+2
    u(i)=u0( x(i) )
+
    u(i)=u0( x(i) )
 
  end
 
  end
 
  plot(x,u,'*-b');xgrid
 
  plot(x,u,'*-b');xgrid
  
A(1,1)=1;            // cond. contorno
 
 
  //A(N+1,N:N+1)=[-1  1]; // cond. numerica
 
  //A(N+1,N:N+1)=[-1  1]; // cond. numerica
 
  //A(N+1,N-1:N+1)=[1 -2 1]; // cond. numerica
 
  //A(N+1,N-1:N+1)=[1 -2 1]; // cond. numerica
  A(N+1,N+1)=[1]; // cond. numerica
+
 
   
+
A(1,1)    =[1]; // cc periodica
  for i=2:N
+
  A(1,N+1)    = -1
 +
A(N+2,N+2)=[1]; // cc periodica
 +
  A(N+2,2)  =-1
 +
  for i=2:N+1
 
     A(i,i-1:i+1)=[-a*lambda/4  1  a*lambda/4]
 
     A(i,i-1:i+1)=[-a*lambda/4  1  a*lambda/4]
 
  end
 
  end
 
   
 
   
 
  for n=1:(Tfinal/k)
 
  for n=1:(Tfinal/k)
    rhs(1)=0
+
    rhs(1)= 0 //u(N)
    rhs(N+1)=u(N)
+
    rhs(N+2)=0 //u(2)
    //rhs(N+1)=0
+
    for i=2:N+1
    for i=2:N    
+
        rhs(i)= -a*lambda/4*u(i+1)+u(i)+a*lambda/4*u(i-1)
        rhs(i)= -a*lambda/4*u(i+1)+u(i)+a*lambda/4*u(i-1)
+
    end
    end
+
    unew=inv(A)*rhs
+
    unew=inv(A)*rhs
    u=unew
+
    u=unew
    normav(n)=norm(unew(1:N)*sqrt(h))
+
    normav(n)=norm(unew(1:N)*sqrt(h))
end
+
    for i=1:N+2
for i=1:N+1
+
        exata(i)=u0( x(i)-a*k*n )
    exata(i)=u0( x(i)-a*k*n )
+
    end
 +
    erro=abs(exata-unew)
 +
    normaerro(n)=norm(erro(1:N)*sqrt(h)  )
 
  end
 
  end
 
  plot(x,u,'.r-')
 
  plot(x,u,'.r-')
  //plot(x,exata,'r.-')
+
  plot(x,exata,'g.-')
 
+
 
  //erro=v-exata
 
  //erro=v-exata
  

Edição das 15h03min de 22 de maio de 2017

MMCC3 - Modelagem matemática e computacão científica III

Prof.Dagoberto Adriano Rizzotto Justo

Notas de aula

Lista de Exercícios

  • Lista 1: 9.5
  • Lista 2: 9.8, 9.9, 10.1, 10.2 (escolha 4)
  • Lista 3: 10.10, 10.11, 10.12 (10/maio)
  • Lista 4: 11.4, 11.5, 11.10 (29/maio)



Trabalhos finais

Exemplos

  • Arquivo Maple para calcular fator de amplificacao FTCS, laxf.
  • Arquivo Maple para calcular raiz de polinomio e converter para latex.
  • Exemplo de arquivo Maple para resolver sistemas.

Scilab

Rodando um programa em Scilab

  • Digite editor no console para abrir o editor.
  • Digite o programa (como os exemplos abaixo)
  • Salve o programa com a extensão .sce ou .sci
  • Selecione o menu Execute e Load into Scilab (Control+L)
  • No console, digite o nome da função desejada, por exemplo,
iteracao(10)

Exemplos

  • Exercício 2.1
function [x]=iteracao(x0)
 x(1)=x0;
 for k=1:100
   x(k+1)=x(k)*(3-x(k)^2)/2;
 end
 plot(x,'.-')
endfunction
  • Exercício 2.2
function [c]=mandelbrot(Total)
 c=(rand()-0.5+%i*(rand()-0.5))*3
 z(1)=0;
 k=1;  
 while(k<Total) //&(abs(z(k))<2)
   z(k+1)=z(k)^2+c;
   k=k+1;
 end
 if( abs(z(k))<2 ) then
   plot(real(c),imag(c),'*m');
 end
 
endfunction
  • Adveccao com cond. contorno periódicas
function [v,normv]=adveccao(N,Tfinal)
L = 1;    // extremo direito
a = 1;    // velocidade
h = (L)/N;  //passo
k = 1.6*h; // passo de tempo
x = linspace(0,L+h,N+2); // dominio
v = exp(-8*(x-0.5).^2);
v = 0.0*x;
v(N/4:N/2)=1;
v = sin(2*%pi*x/L);

plot(x,v,'b.-')
ItTotal = round(Tfinal/k);
for n=1:ItTotal
   for i=2:N+1;
     vnew(i)=(v(i-1)+v(i+1))/2-a*k*(v(i+1)-v(i-1))/(2*h);
   end
   vnew(1)   = vnew(N+1); // cond.contorno
   vnew(N+2) = vnew(2); // cond.contorno
   v = vnew;
   normv(n)=norm(v(1:N),2)*sqrt(h);
end
plot(x,vnew,'r*-')

razao = normv(ItTotal)/normv(ItTotal-1);
disp(razao)

endfunction


  • Leapfrog
function [v,normv]=leapfrog(N,Tfinal)
L = 1;    // extremo direito
a = 1;    // velocidade
h = (2*L)/N;  //passo
k = 0.9*h; // passo de tempo
x = linspace(-L,L,N+1); // dominio
//v = exp(-8*(x-0.5).^2);
v=(abs(x)<=1/2).*cos(%pi*x).^2;
//v = 0.0*x;
//v(N/4:N/2)=1;
//v  = sin(2*%pi*x/L);
for i=2:N;
  vn(i)=v(i) -a*k*(v(i+1)-v(i-1))/(2*h);
end
vn(1)=0; vn(N+1)=0;

plot(x,v,'b.-')
ItTotal = round(Tfinal/k);
for n=1:ItTotal
  for i=2:N;
    vnew(i)=v(i) -a*(2*k)*(vn(i+1)-vn(i-1))/(2*h);
  end
  vnew(1)   = 0; // cond.contorno
  vnew(N+1)   = 0; // cond.contorno

  //vnew(N+1) = vnew(N);      // A cond.contorno 
  //vnew(N+1) = 2*vnew(N)-vnew(N-1); // B cond.contorno
  //vnew(N+1) = 2*vn(N)-v(N-1); // C cond.contorno

  //vnew(N+1) = vn(N); // D cond.contorno
  t=(n+1)*k;
  exata=((abs(x-a*t))<=1/2).*cos(%pi*(x-a*t)).^2;

  v = vn;
  vn= vnew;
  normv(n)=norm(v(1:N),2)*sqrt(h);
end
plot(x,vnew,'r*-')
plot(x,exata,'b.')
///plot(x,exata-vnew','b*-')
razao = normv(ItTotal)/normv(ItTotal-1);
disp(razao)

endfunction

CrankNicolson

clear
function v=u0(x)
  //  if( 1/4 <=x & x <= 3/4 ) then
  //      v=1-abs(4*(x-1/2))
  //  else
  //      v=0
 //   end
   v=sin(x*(2*%pi))
endfunction

L=1    // comprimento do dominio
N=160    // intervalos 
h=L/(N)
Tfinal=2.5
lambda=0.8
k=lambda*h
a=1

x=linspace(0,L+h,N+2)
u=zeros(N+2)

// condicao inicial
for i=1:N+2
    u(i)=u0( x(i) )
end
plot(x,u,'*-b');xgrid
//A(N+1,N:N+1)=[-1  1]; // cond. numerica
//A(N+1,N-1:N+1)=[1 -2 1]; // cond. numerica
A(1,1)    =[1]; // cc periodica
A(1,N+1)    = -1
A(N+2,N+2)=[1]; // cc periodica
A(N+2,2)  =-1
for i=2:N+1
   A(i,i-1:i+1)=[-a*lambda/4  1  a*lambda/4]
end

for n=1:(Tfinal/k)
    rhs(1)= 0 //u(N)
    rhs(N+2)=0 //u(2)
    for i=2:N+1
        rhs(i)= -a*lambda/4*u(i+1)+u(i)+a*lambda/4*u(i-1)
    end

    unew=inv(A)*rhs
    u=unew
    normav(n)=norm(unew(1:N)*sqrt(h))
    for i=1:N+2
       exata(i)=u0( x(i)-a*k*n )
    end
    erro=abs(exata-unew)
    normaerro(n)=norm(erro(1:N)*sqrt(h)   )
end
plot(x,u,'.r-')
plot(x,exata,'g.-')

//erro=v-exata

Referências

Softwares

Links para instalar Latex:

Veja como instalar o Latex: