Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Model_graph.m



%Решение модельной задачи

%Параметры N1, N2 - количество узлов по осям x и t

function [U,U_n] = fun(N1,N2)

%Задание границ области дискретного изменения аргумента

L_const=1;

T_const=2^(3/2)/3;

x_begin=0;

x_end=L_const;

t_begin=0;

t_end=T_const;

%Определение шага по осям x и t

h=L_const/N1;

tau=T_const/N2;

gamma=tau/h;

%Определение координат узлов сетки

X=x_begin:h:x_end;

T=t_begin:tau:t_end;

N=length(X);

M=length(T);

%Сеточная функция внешней силы f(x,t)

for i=1:N

for j=1:M

f(i,j)=-81/4*X(i)-27/4;

end;

end;

%------------------------------------------------------------------------------------------

%--------------Сеточный аналог теоретического решения----------------------

%------------------------------------------------------------------------------------------

for i=1:N

for j=1:M

U_a(i,j)=27/8*X(i)^3-27/8*T(j)^2;

end;

end;

figure;

mesh(T,X,U_a);

title('Teoretic function');

xlabel('t');

ylabel('x');

zlabel('U(x,t)');

figure;

contour(U_a,20);

%---------------------------------------------------------------------------------------------------

%-------Решение краевой задачи с применением явной разностной схемы--------

%---------------------------------------------------------------------------------------------------

%Сеточная функция U(x,t)

U=zeros(N,M);

%Задание первого начального условия U(x,0)

for i=1:N

U(i,1)=27/8*X(i)^3;

end;

%Задание первого граничного условия U(L,t)

for j=1:M

U(N,j)=27/8-27/8*T(j)^2;

end

%Задание второго начального условия Ut(x,0) - по известным U(i,0)

%определяем значения U(i,1) для i=1,...,N-1

for i=2:N-1

U(i,2)=(1-gamma^2)*U(i,1)+gamma^2*U(i-1,1)/2+gamma^2*U(i+1,1)/2+tau^2*f(i,1)/2;

end

%Определение значения U(0,1) из начальных и граничных условий

U(1,2)=gamma^2*U(2,1)-(gamma^2-1)*U(1,1)+tau^2*f(1,1)/2;

%Вычисление значения функции в узлах

for j=2:M-1

%Из второго граничного условия находим U(0,j) для j=2,...,M

U(1,j+1)=2*gamma^2*U(2,j)+2*(1-gamma^2)*U(1,j)-U(1,j-1)+tau^2*f(1,j);

%Находим значения сеточной функции во внутренних узлах сетки

for i=2:N-1

U(i,j+1)=2*(1-gamma^2)*U(i,j)+gamma^2*(U(i-1,j)+U(i+1,j))-U(i,j-1)+tau^2*f(i,j);

end

end

%Построение сеточной функции с использованием явной схемы

figure;

mesh(T,X,U);

title('Evident scheme');

xlabel('t');

ylabel('x');

zlabel('U(x,t)');

figure;

contour(U,20);

%---------------------------------------------------------------------------------------------------

%------Решение краевой задачи с применением неявной разностной схемы-------

%----------------------------------------------------------------------------------------------------

%Сеточная функция U(x,t)

U_n=zeros(N,M);

%Задание первого начального условия U(x,0)

for i=1:N

U_n(i,1)=27/8*X(i)^3;

end;

%Задание первого граничного условия U(L,t)

for j=1:M

U_n(N,j)=27/8-27/8*T(j)^2;

end

%Вычисление значений сеточной функции U(i,1) методом прогонки

%Определение прогоночных коэффициентов

A=zeros(N-1,1);

B=zeros(N-1,1);

ALPHA=zeros(N-1,1);

F=zeros(N,1);

C=zeros(N,1);

BETA=zeros(N,1);

for i=1:N-2

A(i)=gamma^2/2;

B(i+1)=gamma^2/2;

C(i+1)=1+gamma^2;

F(i+1)=U_n(i+1,1)+tau^2*f(i+1,2)/2;

end;

A(N-1)=0;

B(1)=gamma^2;

C(1)=1+gamma^2;

C(N)=1;

F(1)=U_n(1,1)+tau^2*f(1,1)/2;

F(N)=27/8-27/8*T(1)^2;

%Прямой ход прогонки

ALPHA(1)=B(1)/C(1);

BETA(1)=F(1)/C(1);

for i=2:N-1

ALPHA(i)=B(i)/(C(i)-A(i-1)*ALPHA(i-1));

BETA(i)=(F(i)+A(i-1)*BETA(i-1))/(C(i)-A(i-1)*ALPHA(i-1));

end;

BETA(N)=(F(N)+A(N-1)*BETA(N-1))/(C(N)-A(N-1)*ALPHA(N-1));

%Обратный ход прогонки

U_n(N,2)=BETA(N);

for i=N-1:-1:1

U_n(i,2)=ALPHA(i)*U_n(i+1,2)+BETA(i);

end;

%Вычисление значений сеточной функции U(i,j) j=2,...,M методом прогонки

%Определение прогоночных коэффициентов

A=zeros(N-1,1);

B=zeros(N-1,1);

ALPHA=zeros(N-1,1);

F=zeros(N,1);

C=zeros(N,1);

BETA=zeros(N,1);

for i=1:N-2

A(i)=gamma^2;

B(i+1)=gamma^2;

C(i+1)=1+2*gamma^2;

end;

A(N-1)=0;

B(1)=2*gamma^2;

C(1)=1+2*gamma^2;

C(N)=1;

for j=3:M

F=zeros(N,1);

F(1)=2*U(1,j-1)-U(1,j-2)+tau^2*f(1,j-1);

F(N)=27/8-27/8*T(j)^2;

ALPHA=zeros(N-1,1);

BETA=zeros(N,1);

%Прямой ход прогонки

ALPHA(1)=B(1)/C(1);

BETA(1)=F(1)/C(1);

for i=2:N-1

F(i)=2*U(i,j-1)-U(i,j-2)+tau^2*f(i,j-1);

ALPHA(i)=B(i)/(C(i)-A(i-1)*ALPHA(i-1));

BETA(i)=(F(i)+A(i-1)*BETA(i-1))/(C(i)-A(i-1)*ALPHA(i-1));

end;

BETA(N)=(F(N)+A(N-1)*BETA(N-1))/(C(N)-A(N-1)*ALPHA(N-1));

%Обратный ход прогонки

U_n(N,j)=BETA(N);

for i=N-1:-1:1

U_n(i,j)=ALPHA(i)*U_n(i+1,j)+BETA(i);

end;

end;

%Построение сеточной функции с использованием неявной схемы

figure;

mesh(T,X,U_n);

title('Not evident scheme');

xlabel('t');

ylabel('x');

zlabel('U(x,t)');

figure;

contour(U_n,20);





Дата публикования: 2014-11-28; Прочитано: 314 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.014 с)...