Mudanças entre as edições de "Mmcc3"
De WikiLICC
m (→Scilab) |
m (→Lista de Exercícios) |
||
(2 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 15: | Linha 15: | ||
* Lista 2: 9.8, 9.9, 10.1, 10.2 (escolha 4) | * Lista 2: 9.8, 9.9, 10.1, 10.2 (escolha 4) | ||
* Lista 3: 10.10, 10.11, 10.12 (10/maio) | * Lista 3: 10.10, 10.11, 10.12 (10/maio) | ||
− | + | * Lista 4: 11.4, 11.5, 11.10 (29/maio) | |
− | + | * Lista 5: 12.3, 13.6, 13.9 (19/jun) | |
<!-- | <!-- | ||
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)) |
− | // else | + | // else |
− | // | + | // v=0 |
− | + | // end | |
− | + | 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= | + | Tfinal=2.5 |
− | lambda= | + | lambda=0.8 |
k=lambda*h | k=lambda*h | ||
a=1 | a=1 | ||
− | x=linspace(0,L,N+ | + | x=linspace(0,L+h,N+2) |
− | u=zeros(N+ | + | u=zeros(N+2) |
// condicao inicial | // condicao inicial | ||
− | for i=1:N+ | + | for i=1:N+2 |
− | + | u(i)=u0( x(i) ) | |
end | end | ||
plot(x,u,'*-b');xgrid | plot(x,u,'*-b');xgrid | ||
− | |||
//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+ | + | |
− | + | 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 //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 | end | ||
plot(x,u,'.r-') | plot(x,u,'.r-') | ||
− | + | plot(x,exata,'g.-') | |
− | + | ||
//erro=v-exata | //erro=v-exata | ||
Edição atual tal como às 17h36min de 6 de junho 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)
- Lista 4: 11.4, 11.5, 11.10 (29/maio)
- Lista 5: 12.3, 13.6, 13.9 (19/jun)
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
- 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: