Ćw. 11 - Równania cząstkowe różniczkowe
Demski Łukasz, Duchnowski Mateusz
AiR sem. 4
gr. 2, sekcja 1
29.05.2009
Listing 1: Równania różniczkowe cząstkowe typu parabolicznego
1
#include <
i o s t r e a m>
2
#include <
cmath>
3
using namespace
s t d ;
4
5
double
e p s i l o n ( double t , double x ) {
6
return
7 . 0 ∗ M PI ∗ s i n ( M PI∗x ) ∗ s i n ( 7 . 0 ∗ M PI∗ t ) ∗ exp(−M PI∗M PI∗ t ) ;
7
}
8
double
f y ( double t , double x ) {
9
return
s i n ( M PI∗x ) ∗ exp(−M PI∗M PI∗ t ) ∗ (1− c o s ( 7 ∗ M PI∗ t ) ) ;
10
}
11
12
i n t
main ( ) {
13
const i n t
k = 1 0 0 , l = 1 0 0 ;
14
const double
h = 1 . 0 / ( k −1) ,
15
g = 1 . 0 / ( l −1) ,
16
d e l t a = 0 . 5 − ( g ∗ g ) / ( 1 2 . 0 ∗ h ) ,
17
A = −d e l t a / ( g∗ g ) ,
18
B = ( 2 . 0 ∗ d e l t a ) / ( g∗ g ) + 1 . 0 / h ,
19
C = −d e l t a / ( g∗ g ) ;
20
double
F [ k + 1 ] [ l + 1 ] ,
21
y [ k + 1 ] [ l + 1 ] ,
22
a l f a [ l + 1 ] ,
23
beta [ l + 1 ] ;
24
25
a l f a [ 2 ] = beta [ 2 ] = 0 ;
26
f o r
( i nt j =1; j<=l ; j ++)
27
y [ 1 ] [ j ] = 0 ;
28
f o r
( i nt i =1; i<=k ; i ++) {
29
y [ i ] [ 1 ] = 0 ;
30
y [ i ] [ l ] = 0 ;
31
}
32
33
f o r
( i nt i =1; i <k ; i ++) {
34
f o r
( i nt j =2; j <l ; j ++) {
35
F [ i ] [ j ] = − e p s i l o n ( ( i −1)∗h , ( j −1)∗g ) − (1.0 − d e l t a ) / ( g ∗g )
36
∗ ( y [ i ] [ j +1]+y [ i ] [ j − 1 ])
37
+ ( ( 2 ∗ ( 1 . 0 − d e l t a ) ) / ( g ∗ g ) −1.0/h ) ∗ y [ i ] [ j ] ;
38
a l f a [ j +1] = (C)/( −B−a l f a [ j ] ∗A ) ;
39
beta [ j +1] = (A∗ beta [ j ]+F [ i ] [ j ])/ ( −B−a l f a [ j ] ∗A ) ;
40
}
41
f o r
( i nt j=l −1; j >0; j −−)
42
y [ i + 1 ] [ j ] = a l f a [ j +1] ∗ y [ i + 1 ] [ j +1] + beta [ j + 1 ] ;
43
}
44
45
double
suma = 0 ;
46
f o r
( i nt i =1; i <k ; i ++)
47
f o r
( i nt j =1; j <l ; j ++)
48
suma += pow ( y [ i ] [ j ] − f y ( ( i −1)∗h , ( j −1)∗g ) , 2 ) ;
49
50
double
bla d = s q r t ( suma ) / ( k∗ l ) ;
51
co ut << bla d << e n d l ;
52
53
return
0 ;
54
}
1
1
Wstęp
Celem ćwiczenia było numeryczne rozwiązanie równania
δy
(t, x)
δt
−
δ
2
y
(t, x)
δx
2
= η (t, x)
dla x, t ∈ h0; 1) i
η
(t, x) = 7π sin (πx) sin (7πx) e
−π
2
t
Jest to równanie różniczkowe cząstkowe typu parabolicznego. Można rozwiązać je analitycznie
uzyskując w wyniku szukaną funkcję
y
(t, x) = sin (πx) e
−π
2
t
(1 − cos (7πt))
2
Wyniki działania programu, wykresy
0 0.1 0.2
0.3 0.4 0.5
0.6 0.7 0.8
0.9 1 0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
0
0.1
0.2
0.3
0.4
0.5
0.6
Analitycznie
Rysunek 1: Funkcja obliczona analitycznie
2.1
Wpływ rozmiaru siatki na dokładność obliczeń
Wykresy wykonano dla następujących rozmiarów siatek: 10x10, 10x20, 10x50, 50x50 oraz 100x100.
Wykorzystano δ obliczoną ze wzoru δ = 0.5 −
g
2
12h
.
Rozmiar
Błąd
10x10
0.0137368
10x20
0.00996236
10x50
0.00639677
50x50
0.000409789
100x100
9.67617e-05
Tabela 1: Tabela zbiorcza dla różnych wielkości siatek
2
0 0.1 0.2
0.3 0.4 0.5
0.6 0.7 0.8
0.9 0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
-0.1
-0.05
0
0.05
0.1
0.15
0.2
0.25
0.3
0.35
Siatka 10x10
Rysunek 2: Mała rozdzielczość siatki
0 0.1 0.2
0.3 0.4 0.5
0.6 0.7 0.8
0.9 0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
-0.1
-0.05
0
0.05
0.1
0.15
0.2
0.25
0.3
0.35
Siatka 10x20
Rysunek 3: Mała rozdzielczość siatki
3
0 0.1 0.2
0.3 0.4 0.5
0.6 0.7 0.8
0.9 0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
-0.1
-0.05
0
0.05
0.1
0.15
0.2
0.25
0.3
0.35
Siatka 10x50
Rysunek 4: Duża rozdzielczość siatki
0 0.1 0.2
0.3 0.4 0.5
0.6 0.7 0.8
0.9 1 0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
-0.1
0
0.1
0.2
0.3
0.4
0.5
0.6
Siatka 50x50
Rysunek 5: Duża rozdzielczość siatki
4
0 0.1 0.2
0.3 0.4 0.5
0.6 0.7 0.8
0.9 1 0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
-0.1
0
0.1
0.2
0.3
0.4
0.5
0.6
Siatka 100x100
Rysunek 6: Duża rozdzielczość siatki
0 0.1 0.2
0.3 0.4 0.5
0.6 0.7 0.8
0.9 1 0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
-0.12
-0.1
-0.08
-0.06
-0.04
-0.02
0
0.02
0.04
0.06
Błąd dla siatki 50x50
Rysunek 7: Błąd dla stosunkowo dużej rozdzielczości siatki
5
0 0.1 0.2
0.3 0.4 0.5
0.6 0.7 0.8
0.9 1 0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
-0.4
-0.3
-0.2
-0.1
0
0.1
0.2
0.3
0.4
0.5
0.6
δ
= 0.4
Rysunek 8: Wynik działania programu dla zbyt małej wartości δ
2.2
Wpływ wartości δ na dokładność obliczeń
W pomiarach wykorzystano siatkę o wymiarach 100x100. Wartość delty wyznaczonej ze wzoru
δ
= 0.5 −
g
2
12h
wynosi δ = 0.499158.
δ
Błąd
0.1
1.65177e+69
0.2
1.07884e+36
0.3
9.08774e+13
0.4
0.000166118
0.5
9.67928e-05
0.6
0.000100744
0.7
0.000105153
0.8
0.000109940
0.9
0.000115037
Tabela 2: Porównanie błędów w zależności od wartości δ
3
Wnioski
• Rozmiar siatki ma pewne znaczenie dla dokładności obliczeń. Dla bardzo rzadkich siatek
jak 10x10 lub 10x20 błąd jest około 10
4
raza większy niż dla siatek o wymiarach 100x100.
Jednak nie jest on na tyle duży by funkcja przybliżona przestała przypominać tą obliczoną
analitycznie.
• W przypadku wartości parametru δ sprawa wygląda zupełnie inaczej. Dla zbyt małych δ
błąd średni osiąga ogromne wartości. Dodatkowo na brzegach badanego obszaru zaczynają
pojawiać się dziwne kształty zupełnie nie pasujące do kształtu obliczonej analitycznie funkcji.
Natomiast gdy δ jest większa od swojej nominalnej wartości błąd rośnie tylko nieznacznie
oraz nie pojawiają się wspomniane wyżej zakłócenia kształtu funkcji.
6