Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.09.2012, 01:32   #1
АндрейА
Новичок
Джуниор
 
Регистрация: 04.09.2012
Сообщений: 1
По умолчанию Диф уравнения методом прогонки

Собственно решение ДУ методом разностных уравнений (метод прогонки)

При моем варианте - существует три матрицы.
Первая по большому счету независимая.
Со второй и третьей интереснее. Сначала заполняется вторая слева направо, затем третья справа налево - после чего переход на следующую строку второй матрицы.

#include <iostream>
#include <math.h>

using namespace std;
const double Cs=1e+20; //начальные условия
const double D=1e-12; //определяют констаты 0,009 и 1,018
const double t=3600;
const double d=0.001;


double Mas[10][5]; //10 строк, 5 столбцов. t/10, d/5
double Alfa[10][5];
double Beta[10][5];

int main()
{
int j;
int i;
int x;
int y;
for (x=0; x<=10; x++) //задает начальные условия
{
y=0;
Mas[x][y]=Cs;
}

//начинаем вычисления коэффициентов прогонки альфа
for (x=0; x<=10; x++)
{
for(y=1; y<=5; y++)
{
Alfa[x][y]=0.009/(1.018-Alfa[x][y-1]*0.009);
}
}
for (x=0; x<=10; x++)
{
for(y=0; y<=5; y++)
{
cout<<" Alfa[i"<<x<<"j"<<y<<"]="<<Alfa[x][y];}
cout <<"\n" ;

}
//начинаем вычисления коэффициентов прогонки бета. Отсюда начинаются проблемы. 4 вложенных цикла не корректно работают друг с другом.
for (i=0; i<=10; i++) //определение начальных условий бета
{
j=0;
Beta[i][j]=Cs;
}
for (x=1; x<=10; x++) //проблемный цикл. На каждом проходе он полностью меняет все значения беты. Должен - закончив расчет одной строки бета и мас - более их не менять.
{
for (y=4; y>=0; y--)
{
for (i=1; i<=10; i++)
{
for(j=1; j<=5; j++)
{
Beta[i][j]=(0.009*Beta[i][j-1]+Mas[x-1][y])/(1.018-Alfa[x][y-1]*0.009);
Mas[x][y]=Alfa[x][y]*Mas[x][y+1]+Beta[i-1][j-1];
}
}
}
}


for (x=0; x<=10; x++) //результаты
{
for(y=0; y<=5; y++)
{
cout<<" "<<Mas[x][y];}
cout <<"\n" ;

}


while(1);
}


Программа работает, но неверно (не может быть отрицательных коэффициентов и превышающих значение Cs).

Вопрос - как можно ещё реализовать совместный расчет второй и третьей матрицы, учитывая что они зависят друг от друга

Последний раз редактировалось АндрейА; 04.09.2012 в 01:38.
АндрейА вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
решение систем диф.уравнений методом Эйлера??? в VisualBasic goog2 Помощь студентам 0 14.12.2010 21:50
Приближенное решение диф-го уравнения методом Эйлера с уточнением. Адина Помощь студентам 0 14.11.2010 22:00
краевая задача диф.уравнения методом стрельбы Laplas Помощь студентам 2 26.12.2009 23:56
Решение уравнения методом деления отрезка пополам. Методом секущей. Panda196 Паскаль, Turbo Pascal, PascalABC.NET 3 25.11.2008 09:06
Решение системы диф уранений методом Эйлера Richi Microsoft Office Excel 5 13.05.2008 11:36