Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Limpando o console
- clear;
- clc;
- tic
- //Variáveis
- xmin = 0; //Início do domínio
- xmax = 1; //Fim do domínio
- L = (xmax - xmin); //Domínio
- a = 0.4; //Limitador inferior de S
- b = 0.5; //Limitador superior de S
- N = 500; //Número de partições
- dt = 0.002; //Passo de tempo
- t = 0; //Tempo atual
- tmax = 5; //Tempo máximo
- v = 1; //Velocidade
- Q0 = zeros(1,N);
- //Discretizando o domínio
- dx = L/N; //Tamanho das células
- x = xmin - dx/2 : dx : xmax + dx/2; //Delimitando as células no domínio e adicionando células para condições de contorno
- C = (dt/dx);
- //Condições iniciais
- i=1
- for y=xmin -dx / 2:dx:xmax + dx/2
- if(y>=a & y<=b)
- s = 1;
- else
- s = 0;
- end
- Q0(i) = exp(-200.*((y+dx/2)-0.3).^2) + s;
- i = i + 1;
- end
- Q = [Q0(1) Q0 Q0(i-1)];
- Qnmais1 = Q0;
- //Passo iterativo
- npassos = tmax/dt;
- //Quantidade de iterações
- qntItera = 0;
- //Configurando a exibição
- f0=figure('figure_position',[420,0],'figure_size',[800,500],'auto_resize','on','BackgroundColor',[0.75 0.75 0.75],'figure_name','Métodos Numéricos para Equações Diferenciais II');
- xgrid(1, 1, 2)
- a = get("current_axes");
- a.data_bounds = [xmin xmax -0.5 1.5];
- xlabel('x','fontsize',5);
- ylabel('c(x,t)','fontsize',5);
- for n = 1 : npassos;
- //Calculo do Lax-Friedrichs
- for i = 2 : N + 1
- Qnmais1(i) = ( Q(i-1) + Q(i+1) )/2 -(C/2)*v*( Q(i+1) -2*Q(i) + Q(i-1) );
- qntItera = qntItera + 1;
- end
- //Atualizando t e Q
- t = t + dt;
- Q = Qnmais1;
- Q(1) = Q(N+1);
- end
- //Propriedades do Gráfico
- plot(x,Q0,'r-','thickness', 2);
- plot(x,Q,'b-','markersize',5);
- legend(['exata';'numérica']);
- title(sprintf('tempo = %1.3f - número de iterações: %d - tempo de execução: %1.3f s',t, qntItera, toc()),'fontsize',4); //Mostra o tempo atual no gráfico
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement