Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Численное решение уравнения теплопроводности, расходится 
V
    Опции темы
plunger
Дата 29.1.2012, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 29.1.2012

Репутация: нет
Всего: нет



Здравствуйте,
Мне нужно решить уравнение теплопроводности  du/dt=-d(du/dx)/dx+exp(u)-sin(x)  с  граничными условиями u(0,t)=u(Pi,t)=1. Начальный профиль беру u(x,0)=1.  Меня интересует слой, когда u перестанет зависеть от времени.
Я написал следующую программу: 
Код

#include <stdio.h>
#include <math.h>
#include <iostream>
using namespace std;
const double pi=asin(1)*2;
const double t=0.0001; 
const int M=100;  
const double e=0.01; 
float u0 [M]; 
float u1 [M];      
float x [M];
int a,i,s,k,m;
float h;
int main()
{ 
k=1;
h=pi/float(M); 
for(i=0;i<=M;i++){
    x[i]=i*h;   
    u0[i]=1;    
}
u1[0]=1; u1[M]=1; 
while(k==1) { s=0;    
     for(i=1;i<=M-1;i++) { 
         u1[i]=u0[i]-(t*((1/(h*h))*(u0[i-1]-2*u0[i]+u0[i+1])-exp(u0[i])+sin(x[i])));    }   
     for(i=0;i<=M;i++) {
         if(fabs(u1[i]-u0[i])<=e) s++;
         if(s==M+1) k++; }            
     for(i=0;i<=M;i++){
         u0[i]=u1[i];    }       
}
for(i=0;i<=M;i++)
cout <<u1[i]<< endl;  
cin >>a;
return 0; }
 
Сетка равномерная, шаг времени - t, координаты - h. u0-старое поколение, u1 - новое.
while нужен, чтобы прекратить работу, когда перестанет меняться u.
Проблема в том, что результат работы этой программы расходится.
Я не смог найти ошибку, по-этому прошу вашей помощи.

Это сообщение отредактировал(а) plunger - 30.1.2012, 11:21
PM MAIL   Вверх
tzirechnoy
Дата 29.1.2012, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: -1
Всего: 16



Не знаю, есть ли ошыбки в программе -- но когда я увидел du/dt = ... exp(u) -- я сразу подумал, а не расходится ли? А тем более с начальными условиями u=1 (т.е. exp(u)=2.71), и компенсацыей этой экспоненты через sin(x), т.е. значение меньшэ 1. Тут уж будет удивительно, если это уравнение не разойдётся.
PM MAIL   Вверх
plunger
Дата 30.1.2012, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 29.1.2012

Репутация: нет
Всего: нет



Спасибо, проблема оказалась в методе)
PM MAIL   Вверх
Фантом
Дата 30.1.2012, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 4
Всего: 49



Цитата(plunger @  30.1.2012,  23:11 Найти цитируемый пост)
Спасибо, проблема оказалась в методе) 

Странное это какое-то уравнение теплопроводности - с отрицательным коэффициентом и экспоненциальным источниковым членом... Метод - методом, но Вы точно не перепутали само уравнение?
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0394 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.