Mudanças entre as edições de "Mmcc3"
De WikiLICC
m (→Lista de Exercícios) |
m (→Scilab) |
||
Linha 205: | Linha 205: | ||
endfunction | 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=0.85 | ||
+ | lambda=5 | ||
+ | k=lambda*h | ||
+ | a=1 | ||
+ | |||
+ | x=linspace(0,L,N+1) | ||
+ | u=zeros(N+1) | ||
+ | |||
+ | // condicao inicial | ||
+ | for i=1:N+1 | ||
+ | u(i)=u0( x(i) ) | ||
+ | end | ||
+ | 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-1:N+1)=[1 -2 1]; // cond. numerica | ||
+ | A(N+1,N+1)=[1]; // cond. numerica | ||
+ | |||
+ | for i=2:N | ||
+ | A(i,i-1:i+1)=[-a*lambda/4 1 a*lambda/4] | ||
+ | end | ||
+ | |||
+ | for n=1:(Tfinal/k) | ||
+ | rhs(1)=0 | ||
+ | rhs(N+1)=u(N) | ||
+ | //rhs(N+1)=0 | ||
+ | for i=2:N | ||
+ | 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)) | ||
+ | end | ||
+ | for i=1:N+1 | ||
+ | exata(i)=u0( x(i)-a*k*n ) | ||
+ | end | ||
+ | plot(x,u,'.r-') | ||
+ | //plot(x,exata,'r.-') | ||
+ | |||
+ | //erro=v-exata | ||
==Referências== | ==Referências== |
Edição das 15h18min de 10 de maio de 2017
MMCC3 - Modelagem matemática e computacão científica III
Prof.Dagoberto Adriano Rizzotto Justo
Índice
Notas de aula
- Notas de Aula: para impressão. (Sujeito a mudancas durante o semestre.)
- Slides de Aula: para visualização na tela.
Lista de Exercícios
- Arquivo Latex exemplo de tema de casa.
- 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)
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=0.85 lambda=5 k=lambda*h a=1 x=linspace(0,L,N+1) u=zeros(N+1) // condicao inicial for i=1:N+1 u(i)=u0( x(i) ) end 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-1:N+1)=[1 -2 1]; // cond. numerica A(N+1,N+1)=[1]; // cond. numerica for i=2:N A(i,i-1:i+1)=[-a*lambda/4 1 a*lambda/4] end for n=1:(Tfinal/k) rhs(1)=0 rhs(N+1)=u(N) //rhs(N+1)=0 for i=2:N 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)) end for i=1:N+1 exata(i)=u0( x(i)-a*k*n ) end plot(x,u,'.r-') //plot(x,exata,'r.-')
//erro=v-exata
Referências
- Página de Numérico, Apostila, listas de exercícios e material extra.
- Introdução ao Scilab, prof. Leonardo Guidi.
- Intro to Scilab.
- Análise Numérica:Livros
Softwares
Links para instalar Latex:
Veja como instalar o Latex: