-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdiferencas_finitas.m
86 lines (68 loc) · 1.96 KB
/
diferencas_finitas.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
function [w] = diferencas_finitas
a = 1;
b = 2;
w_start = 0;
w_final = log(256);
h = 0.05;
n = -1 + (b - a)/h;
a_v = [1:n];
b_v = [1:n];
c_v = [1:n];
d_v = [1:n];
l = [1:n];
u = [1:n];
z = [1:n];
t = [1:n];
for i = 1:n
w(i) = w_start + i * h * (w_final - w_start)/(b - a);
end
iteracoes = 0;
while(iteracoes < 10)
% Calculo dos valores da primeira linha da matriz
k = a + h;
t = (w(2) - w_start)/(2*h);
a_v(1) = 2 + h*h*fy(k, w(1), t);
b_v(1) = -1 + h*fy_linha(k, w(1), t)/2;
d_v(1) = -(2*w(1) - w(2) - w_start + h*h*f(k, w(1), t));
% Calculo dos valores dos valores das linhas 2 ate n-1 da matriz
i = 2;
while(i <= (n-1))
k = a + i*h;
t = (w(i+1) - w(i-1))/(2*h);
a_v(i) = 2 + h*h*fy(k, w(i), t);
b_v(i) = -1 + h*fy_linha(k, w(i), t)/2;
c_v(i) = -1 - h*fy_linha(k, w(i), t)/2;
d_v(i) = -(2*w(i) - w(i+1) - w(i-1) + h*h*f(k, w(i), t));
i = i + 1;
end
% Calculo dos valores da linha n da matriz
k = b - h;
t = (w_final - w(n-1))/(2*h);
a_v(n) = 2 + h*h*fy(k, w(n), t);
c_v(n) = -1 - h*fy_linha(k, w(n), t)/2;
d_v(n) = -(2*w(n) - w(n-1) - w_final + h*h*f(k, w(n), t));
% Resolvendo a matriz
l(1) = a_v(1);
u(1) = b_v(1)/a_v(1);
i = 2;
while(i <= (n-1))
l(i) = a_v(i) - c_v(i)*u(i-1);
u(i) = b_v(i)/l(i);
i = i + 1;
end
l(n) = a_v(n) - c_v(n)*u(n-1);
z(1) = d_v(1)/l(1);
for i = 2:n
z(i) = d_v(i) - c_v(i)*z(i-1)/l(i);
end
t(n) = z(n);
w(n) = w(n) + t(n);
i = n-1;
while(i >= 1)
t(i) = z(i) - u(i)*t(i+1);
w(i) = w(i) + t(i);
i = i-1;
end
iteracoes = iteracoes + 1;
end
end