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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2012, 20:09   #1
asusGEN
Пользователь
 
Регистрация: 18.01.2012
Сообщений: 11
По умолчанию Неявная схема и метод Прогонки.С++

Подскажите, или лучше объясните, как можно применить метод прогонки к неявной схеме.Явную схему реализовал на С++, результаты верные, но начинаю решать неявной схемой, результаты различаются.Так же реализовал на С++. Краевые условия найдены верно. Вот таблица, которая получилась при решении явной схемой.(вложенный файл)
В общем вопрос такой, как правильно решать уравнение теплопроводности неявной схемы? Когда заданна такая таблица,конечно без внутренних значений.
Вот код неявной схемы и метода прогонки.

Цитата:
#include <stdio.h>
#include <windows.h>
#include <math.h>
#include <locale.h>

double h=0.1;
double ep=0.0001;//зачем она ???Нет же явного условия на ограничение...
double pi=180;
double teT=0.005;
int const n=12;//размерность


double func_result(double x)//u0(x). функция
{
double y;
y=(x+7)*sin(x*pi);

return y;
}
double func_granic(double x)//u2(t)=sin(pi * t)
{
double y;
y=sin(x * pi);
return y;
}


int main()
{
double res[n][n],tmp;
double a,b;
double P[n], Q[n];
setlocale(LC_ALL, "");
for(int i=0; i<n; i++)
{
for(int j=0 ;j<n; j++)//сброс значений
{
res[i][j]=0;
}
P[i]=0;
Q[i]=0;
}

a=-teT/(h*h);
b=(1+2*teT/(h*h));//задаём параметры a,b

res[1][11]=0;
P[2]=0;
Q[2]=0;// по заданию u1(t)=0! u2(t)=sin(pi * t)! Q1(n+1)=u1(tn+1)!!!

int k=0;
for(float t=0; t<0.05; t+=teT)
{
k++;
res[k][n-1]=func_granic(t);// yN(n+1) !!!
res[k][1]=0;//левая граница
}
k=0;
for(float x=0; x<1; x+=h)
{
k++;
res[1][k]=func_result(x);//точки определяемые из краевых условий~
}
//Метод прогонки. Три цикла, внешний для строк, внутренний по j для поиска коэфициентов P,Q Слева направо!!!
//Другой, внутренний цикл, для обратной прогонки.То есть заносим значения справа налево!!!
int l1=0;
for(int i=2; i<n; i++)
{
for (int j=3;j<n; j++)
{
l1=j-1;
if((tmp=a*P[j-1]+b) == 0)//проверка знаменателя для коэфициентов.
{
printf("Деление на ноль...!\n");
return 0;
}
P[j]=-a/tmp;//Коэфициенты
Q[j]=(res[i-1][(n-1)-(l1-1)]-a*Q[j-1])/tmp;//Коэфициенты искомые. res[i-1][(n-1)-(l1-1)] -это значения, которые лежат выше строкой.
}
for(int r=n-1; r>2; r--)//Обратная прогонка.
{
res[i][r-1]=P[r]*res[i][r]+Q[r];//res[i][r] -это значения нашей строки, на которой мы находимся,правые значения
}
}
printf("Решение уравнения Теплопроводности. \nДанная схема решения уравнения теплопроводности - неявная \n\n");
for(int i=1; i<n; i++)
{
for(int j=1; j<n; j++)
{
printf("%.7f ",res[i][j]);
printf(" \n");
}
printf(" \n");
}
return 0;
}
Изображения
Тип файла: jpg 12.JPG (131.4 Кб, 218 просмотров)
asusGEN вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод Прогонки (Алгоритм Томаса) в Матлаб (MatLab) Саша Дмитриева Помощь студентам 7 06.06.2015 13:50
Метод прогонки, Зейделя, Якоби для СЛАУ(Paskal) Мельхиора Паскаль, Turbo Pascal, PascalABC.NET 1 29.04.2014 18:15
Метод прогонки! mashuta_ya Помощь студентам 2 13.12.2011 03:36
Метод прогонки в Visual Studio DeadChild Помощь студентам 2 29.06.2011 17:50
метод прогонки решения линейных уравнений Laplas Общие вопросы C/C++ 4 03.10.2009 12:13