2014 dxdy logo

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

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




 
 Потоковый вариант метода прогонки
Сообщение09.08.2012, 17:21 
Привет всем!
Решаю одномерное уравнение теплопроводности по неявной схеме методом прогонки, но из-за того, что коэффициент теплопроводности сильно изменяется (от 0,1 до 70) - возникают ошибки во время расчета. У Самарского прочитал, что есть специальный метод потоковой прогонки, который позволяет решать задачи с сильно меняющимся коэффициентом (Самарский Теория Разностных Схем, Дополнение 2 стр. 637). Однако не очень понятно, как переделать существующий метод, чтобы получить метод потоковой прогонки. Вот реализация обычного метода прогонки:
Код:
function MP(A: Matr2; b: Matr1; nodes:integer): Matr1;      //Matr2 - матрица, Matr1 - вектор
    var i, n: integer;
        f, g: Matr1;
    begin
        n:=nodes-2;//Length(A);
        SetLength(f, n-1);
        SetLength(g, n-1);
        for i:=0 to n-1 do
                b[i]:=-1*b[i];
        f[0]:=-A[0,1]/A[0,0];
        g[0]:=-b[0]/A[0,0];
        for i:=1 to n-2 do
           begin
              f[i]:=-A[i,i+1]/(A[i,i]+A[i,i-1]*f[i-1]);
              g[i]:=-(b[i]+A[i,i-1]*g[i-1])/(A[i,i]+A[i,i-1]*f[i-1]);
           end;
        SetLength(result, n);
        result[n-1]:=-(b[n-1]+A[n-1,n-2]*g[n-2])/(A[n-1,n-1]+A[n-1,n-2]*f[n-2]);
        for i:=n-2 downto 0 do result[i]:=f[i]*result[i+1]+g[i];
end;

 
 
 [ 1 сообщение ] 


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