Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
83
Добавлен:
17.04.2013
Размер:
388.61 Кб
Скачать

Для явной схемы:

% <<< Явная схема >>>

clc;

M = input('Введите число отрезков на осиX:');

N = input('Введите число отрезков на оси T:');

tau = 1/N;

h = 1/M;

nu = 4;

fu = 10*pi;

u = zeros(M+1,N+1);

i = 0;

j = 0;

% <<< Вычисление матрицы решений >>>

for i = 1:M+1

u(i,1) = defp((i-1)*h);

end;

for j = 1:N+1

u(M+1,j)=nu;

end

for j = 1:N

for i = 2:1:M

u(i,j+1)=u(i,j)+(tau/(h^2))*(u(i-1,j)-2*u(i,j)+u(i+1,j))+tau*deff((i-1)*h);

end;

end;

for j = 2:N+1

u(1,j) = (u(2,j) - ((h^2)/(2*tau))*u(1,j-1) + ((h^2)/2)*deff(0)-h*fu)/(1+(h^2)/(2*tau));

end;

% <<< Вывод результата >>>>

%u

pause

max = u(1,1);

min = u(1,1);

x = 0:h:1;

t = 0:tau:1

V = zeros(20,1);

for i=1:1:M+1

for j=1:1:N+1

if max<u(i,j)

max = u(i,j);

end;

if min>u(i,j)

min = u(i,j);

end;

end;

end;

v = min:(max-min)/21:max;

contour(u,v,t,x);

grid;

xlabel(' T ');

ylabel(' X ');

pause

for rotv = 0:30:180

for rotg = 0:30:180

mesh(u,[rotv,rotg])

pause

end;

end;

Для неявной схемы:

% <<< Неявная схема >>>

clc;

clear;

%for ncycle = 1:1:2

M = input('Введите число отрезков на осиX:');

N = input('Введите число отрезков на оси T:');

h = 1/M;

tau = 1/N;

u = zeros(M+1,N+1);

alfa = zeros(M+1,1);

beta = zeros(M+1,1);

i = 0;

j = 0;

for i=1:M+1

u(i,1)=defp((i-1)*h);

end;

% <<< вычисление коэффициентов для метода прогонки >>>

c0 = 1+(h^2)/(2*tau);

b0 = 1;

ai = 1;

ci = 2+(h^2)/tau;

bi = 1;

am = 0;

cm = 1;

fm = 4;

alfa(2) = b0/c0;

for i=3:1:M+1

alfa(i) = bi/(ci-ai*alfa(i-1));

end;

% <<< основной цикл >>>

for j=2:1:N+1

f0 = (h^2)*u(1,j-1)/(2*tau) + (h^2)*deff(0)/2 - h*10*pi;

beta(2) = f0/c0;

for i=3:1:M+1

fi = (h^2)*deff((i-2)*h) + (h^2)*u(i-1,j-1)/tau;

beta(i) = (fi + ai*beta(i-1))/(ci - ai*alfa(i-1));

end;

u(M+1,j) = (fm + am)/(cm - am*alfa(M+1));

for i=M:-1:1

u(i,j) = alfa(i+1)*u(i+1,j) + beta(i+1);

end;

end;

% <<<Оценка >>>

%if ncycle == 1

% u1 = u;

% M1 = M;

% N1 = N;

%end;

%end;

%Q = 0;

%for j = 1:1:N1

%for i = 1:1:M1

%rif = floor(i*(M+1)/(M1+1));

%ric = ceil(i*(M+1)/(M1+1));

%rjf = floor(j*(N+1)/(N1+1));

%rjc = ceil(j*(N+1)/(N1+1));

%tu = u(rif,rjf)+(u(ric,rjf)-u(rif,rjf))*(i*M/M1-rif)+(u(rif,rjc)-u(rif,rjf))*(j*N/N1-rjf);

%Q = Q + (u1(i,j)-tu)^2;

%end;

%end;

%disp(sqrt(Q));

%pause;

%return;

% <<< Вывод результатов >>>>

max = u(1,1);

min = u(1,1);

x = 0:h:1;

t = 0:tau:1

v = zeros(21,1);

for i=1:1:M+1

for j=1:1:N+1

if max<u(i,j)

max = u(i,j);

end;

if min>u(i,j)

min = u(i,j);

end;

end;

end;

v = min:(max-min)/21:max;

contour(u,v,t,x);

grid;

xlabel(' T ');

ylabel(' X ');

pause

for rotv = 0:30:180

for rotg = 0:30:180

mesh(u,[rotv,rotg]);

pause;

end;

end;

Рисунок 3.

Рисунок 4.

Рисунок 5.

Рисунок 6.

Рисунок 7.

Соседние файлы в папке mpm_19b