0% found this document useful (0 votes)
71 views7 pages

(CC297) Série 04 - Fortunato Neto pt2

This document contains MATLAB code for solving partial differential equations numerically using various Runge-Kutta methods (RK2, RK4). It includes: 1) Code to set up the PDE problem, define matrices, and calculate numerical solutions over time steps for 1D and 2D cases. 2) Calculations of exact solutions to compare with numerical results. 3) Bisection searches to find the stability limits for different Runge-Kutta methods by finding the root of the stability function.

Uploaded by

Fortunato Neto
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
71 views7 pages

(CC297) Série 04 - Fortunato Neto pt2

This document contains MATLAB code for solving partial differential equations numerically using various Runge-Kutta methods (RK2, RK4). It includes: 1) Code to set up the PDE problem, define matrices, and calculate numerical solutions over time steps for 1D and 2D cases. 2) Calculations of exact solutions to compare with numerical results. 3) Bisection searches to find the stability limits for different Runge-Kutta methods by finding the root of the stability function.

Uploaded by

Fortunato Neto
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 7

1 %% Pos-Graduacao ITA - [CC297]

2 %% Aluno: Fortunato Martins Neto


3 %% Professor: João Luiz Filgueiras de Azevedo
4 %% Serie 04 | Semestre: 01/2021 | Questao 01
5 clear all; clc; close all;
6
7 w0 = 1;
8 cm = w0;
9 lambda = -0.97736;
10 Tmax = 2;
11
12 %% Solucao Analitica:
13 for t=1:Tmax
14 we(t,1) = cm*exp(lambda*t);
15 end
16
17 %% Solucao Numerica:
18 questao = input('Qual letra deseja resolver? [b] 1 | [c] 2 | [d] 3 | [e] 4');
19
20 %% b) RK4
21 if questao ==1
22
23 Npassos = 5;
24 h = Tmax/Npassos; % h = deltat;
25
26 wa_b(1,1) = 1;
27 for n=1:Npassos
28 wtil(n,1) = wa_b(n,1) + (1/2)*h*lambda*wa_b(n,1);
29 wbar(n,1) = wa_b(n,1) + (1/2)*h*lambda*wtil(n,1);
30 wcha(n,1) = wa_b(n,1) + h*lambda*wbar(n,1);
31 wa_b(n+1,1) = wa_b(n,1) + (1/6)*h*(lambda*wcha(n,1) + 2*(lambda*wbar(n,1) +
lambda*wtil(n,1)) + lambda*wa_b(n,1));
32 end
33
34 %% c) RK4
35 elseif questao ==2
36 Npassos = 3;
37 h = Tmax/Npassos; % h = deltat;
38 wa_c1(1,1) = 1;
39 for n=1:Npassos
40 wtil(n,1) = wa_c1(n,1) + (1/2)*h*lambda*wa_c1(n,1);
41 wbar(n,1) = wa_c1(n,1) + (1/2)*h*lambda*wtil(n,1);
42 wcha(n,1) = wa_c1(n,1) + h*lambda*wbar(n,1);
43 wa_c1(n+1,1) = wa_c1(n,1) + (1/6)*h*(lambda*wcha(n,1) + 2*(lambda*wbar(n,1)
+ lambda*wtil(n,1)) + lambda*wa_c1(n,1));
44 end
45
46 Npassos = 10;
47 h = Tmax/Npassos; % h = deltat;
48 wa_c2(1,1) = 1;
49 for n=1:Npassos
50 wtil(n,1) = wa_c2(n,1) + (1/2)*h*lambda*wa_c2(n,1);
51 wbar(n,1) = wa_c2(n,1) + (1/2)*h*lambda*wtil(n,1);
52 wcha(n,1) = wa_c2(n,1) + h*lambda*wbar(n,1);
53 wa_c2(n+1,1) = wa_c2(n,1) + (1/6)*h*(lambda*wcha(n,1) + 2*(lambda*wbar(n,1)
+ lambda*wtil(n,1)) + lambda*wa_c2(n,1));
54 end
55
56 %% d) RK2
57 elseif questao ==3
58 Npassos = 10;
59 h = Tmax/Npassos; % h = deltat;
60 w(1,1) = 1;
61 for n=1:Npassos
62 wtil(n+1,1) = w(n,1) + h*lambda*w(n,1);
63 w(n+1,1) = 1/2*(w(n,1) + wtil(n+1,1) + h*lambda*wtil(n+1,1));
64 end
65
66 %% e) RK1
67 elseif questao==4
68 Npassos = 20;
69 h = Tmax/Npassos; % h = deltat;
70 w(1,1) = 1;
71 for n=2:Npassos+1
72 w(n,1) = w(n-1,1) + lambda*h*w(n-1,1);
73 end
74 end
75
76
77
1 %% Pos-Graduacao ITA - [CC297]
2 %% Aluno: Fortunato Martins Neto
3 %% Professor: João Luiz Filgueiras de Azevedo
4 %% Serie 04 | Semestre: 01/2021 | Questao 02
5 clear all; clc; close all; format long;
6
7 questao = input('Escolha a questão: [1] 2-a,b,c,e | [2] 2-d | [3] 2-e');
8
9 M = 5;
10 % Criando matriz de autovetores;
11 for j=1:M
12 for m=1:M
13 x_m(j,m) = sin((j*m*pi)/(M+1));
14 end
15 end
16
17 DeltaX = (pi/(M+1));
18 % Criando matriz coluna de autovalores;
19 for m=1:M
20 lambda_m(m,1) = -2*(1-cos((m*pi)/(M+1))).*(1/(DeltaX^2));
21 end
22
23 if questao == 1
24 Npassos = 10;
25 elseif questao == 2
26 Npassos = 5;
27 elseif questao == 3
28 Npassos = 10;
29 end
30
31 wt_0 = [1.0 0.1 0.1 0.1 0.1]'; % Espaco onda;
32 X = x_m; % Matriz [X];
33 ut_0 = X*wt_0; % t=0, u(0);
34
35 Tmax = 2; % Passo de tempo maximo;
36 h = Tmax/Npassos; % h = deltat;
37 u(:,1) = ut_0; % Condicoes iniciais em t=0;
38
39 B = (1/(DeltaX^2)).*[-2 1 0 0 0; % Matriz banda (bc = 0);
40 1 -2 1 0 0;
41 0 1 -2 1 0;
42 0 0 1 -2 1;
43 0 0 0 1 -2];
44
45 if questao == 1 || questao == 2
46 for n=1:Npassos
47 util(:,n) = u(:,n) + (1/2)*h.*B*u(:,n);
48 ubar(:,n) = u(:,n) + (1/2)*h.*B*util(:,n);
49 ucha(:,n) = u(:,n) + h.*B*ubar(:,n);
50 u(:,n+1) = u(:,n) + (1/6).*h.*(B*ucha(:,n) + 2*(B*ubar(:,n) + B*util(:,n)) +
B*u(:,n));
51 end
52 elseif questao == 3
53 for n=1:Npassos
54 util(:,n) = u(:,n) + h.*B*u(:,n);
55 u(:,n+1) = (1/2).*(u(:,n) + util(:,n) + h.*B*util(:,n));
56 end
57 end
58
59 ut_max(:,1) = u(:,end); % t = 2s, u(2);
60 X_inv = (2/(M+1)).*X; % Calculando a inversa de X pelo método fornecido na
serie;
61 M_I = X*X_inv; % Testando a matriz inversa, resultado dever ser matriz
identidade;s
62
63 for j=1:M
64 wt(:,j) = X_inv*u(:,j);
65 end
66 wt_2 = X_inv*ut_max; % Convertendo para o espaco de onda t = 2s, w(2);
67
1 %% Pos-Graduacao ITA - [CC297]
2 %% Aluno: Fortunato Martins Neto
3 %% Professor: João Luiz Filgueiras de Azevedo
4 %% Serie 04 | Semestre: 01/2021 | Questao 03
5 clear all; clc; close all; format long;
6
7 %% Condicional da questao:
8
9 questao = input('[1] a | [2] b');
10
11 %% Solucao Numerica Calculada:
12 M = 11; Npassos = 10;
13 if questao == 1
14 Tmax = 2;
15 elseif questao == 2
16 Tmax = 0.02;
17 end
18
19 % Criando matriz de autovetores;
20 for j=1:M
21 for m=1:M
22 x_m(j,m) = sin((j*m*pi)/(M+1));
23 end
24 end
25 X = x_m; % Matriz [X];
26 DeltaX = (pi/(M+1));
27 % Criando matriz coluna de autovalores;
28 for m=1:M
29 lambda_m(m,1) = -2*(1-cos((m*pi)/(M+1))).*(1/(DeltaX^2));
30 end
31
32 for j=1:M
33 if questao == 1
34 ut_0(j,1) = sin(j*DeltaX);
35 elseif questao == 2
36 ut_0(j,1) = sin(3*j*DeltaX);
37 end
38 end
39
40 h = Tmax/Npassos; % h = deltat;
41 u_nc(:,1) = ut_0;
42
43 B = (1/(DeltaX^2)).*[-2 1 0 0 0 0 0 0 0 0 0;
44 1 -2 1 0 0 0 0 0 0 0 0;
45 0 1 -2 1 0 0 0 0 0 0 0;
46 0 0 1 -2 1 0 0 0 0 0 0;
47 0 0 0 1 -2 1 0 0 0 0 0;
48 0 0 0 0 1 -2 1 0 0 0 0;
49 0 0 0 0 0 1 -2 1 0 0 0;
50 0 0 0 0 0 0 1 -2 1 0 0;
51 0 0 0 0 0 0 0 1 -2 1 0;
52 0 0 0 0 0 0 0 0 1 -2 1;
53 0 0 0 0 0 0 0 0 0 1 -2];
54
55 for n=1:Npassos
56 util(:,n) = u_nc(:,n) + h.*B*u_nc(:,n);
57 u_nc(:,n+1) = (1/2).*(u_nc(:,n) + util(:,n) + h.*B*util(:,n)); % Solucao
numerica calculada;
58 end
59
60 X_inv = (2/(M+1)).*X; % Calculando a inversa de X pelo método fornecido na serie;
61 for j=1:M
62 wt_nc(:,j) = X_inv*u_nc(:,j);
63 end
64
65 %% Solucao Numerica Exata:
66
67 sigma(:,1) = ((h^2).*(lambda_m(:,1).^2))./2 + (h.*lambda_m(:,1)) + 1;
68 cm(:,1) = X_inv*u_nc(:,1); % Calculo das constantes;
69
70 for j=1:M
71 u_ne(:,j) = X(:,j).*(cm(j,1).*sigma(j,1).^(j-1)); % Solucao numerica exata;
72 end
73 for j=1:M
74 wt_ne(:,j) = X_inv*u_ne(:,j);
75 end
1 %% Pos-Graduacao ITA - [CC297]
2 %% Aluno: Fortunato Martins Neto
3 %% Professor: João Luiz Filgueiras de Azevedo
4 %% Serie 04 | Semestre: 01/2021
5 clear all; clc; close all; format long;
6
7 %% Metodo da Bisseccao: verificar raiz para RK2;
8
9 n = 1; nmax = 1000;
10 TOL = 0.0000001;
11 lambda = -13.612888988503967;
12
13 a = 0.6;
14 b = 0.1;
15
16 it = 0;
17 while n <= nmax
18 it = it + 1;
19 c = (a+b)/2;
20 h = c;
21 sigma = lambda*h + ((lambda^2)*(h^2))/2;
22 tol = (b-a)/2;
23 if sigma >= 0
24 if sigma == 0 || sigma < TOL
25 raiz = lambda*h;
26 n = nmax+1;
27 end
28 end
29 if sign(sigma) == sign(a)
30 a = c;
31 else
32 b = c;
33 end
34 n = n +1;
35 end
1 %% Pos-Graduacao ITA - [CC297]
2 %% Aluno: Fortunato Martins Neto
3 %% Professor: João Luiz Filgueiras de Azevedo
4 %% Serie 04 | Semestre: 01/2021
5 clear all; clc; close all; format long;
6
7 %% Metodo da Bisseccao: verificar raiz para RK4;
8
9 n = 1; nmax = 1000;
10 TOL = 0.0000001;
11 lambda = -13.612888988503967;
12
13 a = 0.22;
14 b = 0.18;
15
16 it = 0;
17 while n <= nmax
18 it = it + 1;
19 c = (a+b)/2;
20 h = c;
21 sigma = lambda*h + ((lambda^2)*(h^2))/2 + ((lambda^3)*(h^3))/6 +
((lambda^4)*(h^4))/24;
22 tol = (b-a)/2;
23 if sigma >= 0
24 if sigma == 0 || sigma < TOL
25 raiz = lambda*h;
26 n = nmax+1;
27 end
28 end
29 if sign(sigma) == sign(a)
30 a = c;
31 else
32 b = c;
33 end
34 n = n +1;
35 end

You might also like