2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Одномерное уравнение теплопроводности matlab
Сообщение06.11.2020, 13:25 
Здравствуйте, уже несколько дней ломаю голову с получением решения в матлабе. Вроде как прогонка получается, матлаб рисует первоначальную параболу, но при точном решении массив uExact уходит в нули. В чем может быть ошибка?


код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
clc;
clear all;
n=50;
x=1;
h=x/(n-1); %шаг по пространству
tau=0.001; %шаг по времени
sigma=0.4;
kappa=0.5;
tEnd=0.1;
t=0;
u=ones(1,n);
u(1)=0;
u(n)=0;
uN=u;
a=0;
b=1;
x=[a:h:b];
while(t < tEnd)  
 
for i=1:n-2
    a(i)=1;
        b(i)=2+h^2/(kappa*tau*sigma);
    c(i)=1;
    d(i)=(2*(1-sigma)/sigma-h^2/(kappa*tau*sigma))*u(i+1)-(1-sigma)/sigma*(u(i)+u(i+2));
end

e(1)=0;
k(1)=0;
for i=1:n-2
    e(i+1)=c(i)/(b(i)-a(i)*e(i));
    k(i+1)=(a(i)*k(i)-d(i))/(b(i)-a(i)*e(i));
end


U(n-1)=k(n-1);
for i=n-2:-1:2
U(i)=e(i)*U(i+1)+k(i);
end


a1=0;
b1=1;
x=[a1:h:b1];
y = quad('sin(pi*x*50)',0.001,1,1e-4);

kappa0=0.5;
for i=1:n
alfa(i)=2*y;
uExact(i)=sum(alfa(i)*exp(-pi^2*n^2*kappa0*t)*y);
end

U(n)=0;
u=U;
t=t+tau;
plot(x,U);
% norm=sum(abs(uExact - U))*h;
end
 

 
 
 
 Re: Одномерное уравнение теплопроводности matlab
Сообщение07.11.2020, 01:47 
За неимением MATLAB засунул это в Octave и получил следующее:
Цитата:
warning: quad: passing function body as a string is obsolete; please use anonymous functions
warning: called from
qq at line 45 column 3
(на qq не обращайте внимания - это название файла, в который был помещен ваш код).

Впрочем, считать-то оно считает, но строго запрошенное, поэтому всегда получается y = -0.000078378. По-видимому, вы ожидали чего-то другого?

 
 
 [ Сообщений: 2 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group