отчёт(2 задание)
.docxМинобрнауки России
Санкт-Петербургский государственный политехнический университет
Факультет физики и нанотехнологий
Кафедра физика плазмы
О Т Ч Ё Т
по лабораторной работе №2
Численное моделирование стационарного двумерного процесса
Вариант – В 6
по дисциплине
«Численное моделирование»
Выполнил
студент гр.4101 В.А.Захаров
<подпись>
Руководитель
доцент, к.ф.-м.н. И.Ю.Веселова
<подпись>
«___» __________ 2012 г.
Санкт-Петербург
2012
1) Постановка задачи
2) Аппроксимация уравнения и граничных условий
Введём равномерную сетку :
3) Вид алгебраической системы
Матрица алгебраической системы будет пятидиагональной
4) Выражения для главного члена погрешности аппроксимации уравнения и граничных условий.
(1)
5) Формулировка тестовых задач : с нулевой и не нулевой погрешностью аппроксимации.
А)Тестовая задача с нулевой погрешностью аппроксимации:
Пусть
Подставим u,k в (1),(2)
Тогда, получим что
Б)Тестовая задача с ненулевой погрешностью аппроксимации:
Пусть ,
Тогда используя (1),(2) получим , что
6)Программа на Фортране
program poiss_eq
implicit none
include 'link_fnl_static.h'
parameter nx=20,ny=20 !число узлов по х и у
integer i,j,k
parameter lda=nx+1-2,ldfact=nx+1-2,ncoda=nx-2
real*8 k1,k2,g1,g2,g3,g4,f,kappa3,kappa4,u
real*8 fact(nx+1-2,(nx-2)*ny),rcond,eps
real*8 hx,hy,x(nx),y(nx),ab(nx-2+1,(nx-2)*ny),v((nx-2)*ny),
& b((nx-2)*ny),err((nx-2)*ny)
!ab матрица коэфф инт интерп метода
!v вектор искомых значений ф-ции
!b вектор правой части
!задание интервалов интегрирования и узлов
open(1,file='out.dat')
kappa3=1.0d0
kappa4=1.0d0
! kappa3=-12.0d0
! kappa4=24.0d0
x(1)=1.0d0
x(nx)=4.0d0
y(1)=4.0d0
y(nx)=8.0d0
hx=(x(nx)-x(1))/(nx-1)
hy=(y(nx)-y(1))/(ny-1)
! write(1,*) ' x(i) ',' y(j)'
! write(1,*) x(1),y(1)
do i=2,nx
x(i)=x(i-1)+hx
y(i)=y(i-1)+hy
! write(1,*) x(i),y(i)
end do
write(1,*)
!задание коэфф во внутр точках с учётом гр усл 1 рода по х
do j=2,ny-1
do i=2,nx-1
k=(j-1)*(nx-2)+(i-1)
ab(nx-2+1,k)=hy/hx*(k1(x(i)+0.5d0*hx,y(j))+k1(x(i)-0.5d0*
& hx,y(j)))+hx/hy*(k2(x(i),y(j)+0.5d0*hy)+k2(x(i),y(j)-0.5d0*hy))
if(i.ne.(nx-1)) then
ab(nx-2,k+1)=-hy/hx*k1(x(i)+0.5d0*hx,y(j))
end if
ab(1,k+nx-2)=-hx/hy*k2(x(i),y(j)+0.5d0*hy)
if((3-(nx-2)).le.0) then
b(k)=hx*hy*f(x(i),y(j))
end if
if(i.eq.2) then
b(k)=hx*hy*f(x(i),y(j))+hy/hx*k1(x(i)-0.5d0*hx,y(j))*g1(y(j))
end if
if(i.eq.(nx-1)) then
b(k)=hx*hy*f(x(i),y(j))+hy/hx*k1(x(i)+0.5d0*hx,y(j))*g2(y(j))
end if
end do
end do
!гр усл 3 рода по у c учётом гран условий 1 рода по х
do i=2,nx-1
j=1
k=(j-1)*(nx-2)+(i-1)
ab(nx-2+1,k)=0.5d0*hy/hx*(k1(x(i)+0.5d0*hx,y(j))+k1(x(i)-0.5d0*
& hx,y(j)))+hx/hy*k2(x(i),y(j)+0.5d0*hy)+hx*kappa3
if(i.ne.(nx-1)) then
ab(nx-2,k+1)=-0.5d0*hy/hx*k1(x(i)+0.5*hx,y(j))
end if
ab(1,k+nx-2)=-hx/hy*k2(x(i),y(j)+0.5d0*hy)
if((3-(nx-2)).le.0) then
b(k)=0.5d0*hx*hy*f(x(i),y(j))+hx*g3(x(i))
end if
if(i.eq.2) then
b(k)=0.5d0*hx*hy*f(x(i),y(j))+hx*g3(x(i))+0.5d0*hy/hx*k1(x(i)-
& 0.5d0*hx,y(j))*g1(y(j))
end if
if(i.eq.(nx-1)) then
b(k)=0.5d0*hx*hy*f(x(i),y(j))+hx*g3(x(i))+0.5d0*hy/hx*k1(x(i)+
& 0.5d0*hx,y(j))*g2(y(j))
end if
j=ny
k=(j-1)*(nx-2)+(i-1)
ab(nx-2+1,k)=0.5d0*hy/hx*(k1(x(i)+0.5d0*hx,y(j))+k1(x(i)-0.5d0*
& hx,y(j)))+hx/hy*k2(x(i),y(j)-0.5d0*hy)+hx*kappa4
if(i.ne.(nx-1)) then
ab(nx-2,k+1)=-0.5d0*hy/hx*k1(x(i)+0.5d0*hx,y(j))
end if
if((3-(nx-2)).le.0) then
b(k)=0.5d0*hx*hy*f(x(i),y(j))+hx*g4(x(i))
end if
if(i.eq.2) then
b(k)=0.5d0*hx*hy*f(x(i),y(j))+hx*g4(x(i))+
& 0.5d0*hy/hx*k1(x(i)-0.5d0*hx,y(j))*g1(y(j))
end if
if(i.eq.(nx-1)) then
b(k)=0.5d0*hx*hy*f(x(i),y(j))+hx*g4(x(i))+
& 0.5d0*hy/hx*k1(x(i)+0.5d0*hx,y(j))*g2(y(j))
end if
end do
call dlfcqs((nx-2)*ny,ab,lda,ncoda,fact,ldfact,rcond)
call dlfsqs((nx-2)*ny,fact,ldfact,ncoda,b,v)
do j=1,ny
do i=2,nx-2
k=(j-1)*(nx-2)+i-1
err(k)=dabs(v(k)-u(x(i),y(j)))
end do
end do
eps=0.0d0
do i=1,(nx-2)*ny
if(err(i).gt.eps) then
eps=err(i)
end if
end do
write(1,*)
write(1,*)'rcond=',1.0d0/rcond
write(1,*) eps
end
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
double precision function k1(x,y)
real*8 x,y
k1=1.0d0
! k1=y*x**2.0d0
end
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
double precision function k2(x,y)
real*8 x,y
k2=1.0d0
! k2=y**2.0d0*x
end
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
double precision function g1(y)
real*8 y
g1=y
! g1=y**3.0d0
end
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
double precision function g2(y)
real*8 y
g2=4.0d0*y
! g2=64.0d0*y**3.0d0
end
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
double precision function g3(x)
real*8 x
g3=3.0d0*x
! g3=-768.0d0*x**3.0d0*(1.0d0+x)
end
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
double precision function g4(x)
real*8 x
g4=9.0d0*x
! g4=12288.0d0*x**3.0d0*(1.0d0+x)
end
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
double precision function f(x,y)
real*8 x,y
f=0.0d0
! f=-12.0d0*x**3.0d0*y**3.0d0*(x+y)
end
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
double precision function u(x,y)
real*8 x,y
u=x*y
! u=x**3.0d0*y**3.0d0
end
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7)Зависимость погрешности решения от числа разбиений интервала интегрирования
Таблица результатов работы программы на тестах (зависимость Чебышёвской нормы погрешности решения от удваивающегося количества разбиений ). N=20
|
Тест 1 |
|
Тест 2 |
|
|||
k |
|||||||
1 |
180 |
2.025046E-013 |
---- |
1428 |
16.375498 |
---- |
|
2 |
750 |
4.334310E-013 |
0,467 |
6264 |
3.8994412 |
4,20 |
|
3 |
3065 |
3.659295E-012 |
0,118 |
26191 |
0.9510698 |
4,10 |
|
4 |
12393 |
7.304379E-012 |
0,501 |
107064 |
0.2348392 |
4,05 |
|
5 |
49836 |
2.994227E-011 |
0,244 |
432883 |
0.0583454 |
4,02 |
По результатам теста 2 можно сделать вывод, что разностная схема имеет второй порядок точности, т.к. с увеличением количества разбиений в два раза чебышевская норма погрешности уменьшается в 4 раза. Анализируя результаты теста 1, приходим к выводу, что число обусловленности матрицы алгебраической системы увеличивается пропорционально размерности матрицы. Возрастающее с увеличением числа разбиений число обусловленности объясняет рост чебышевской нормы погрешности.