Дискуссионный математический форумМатематический форум

Математический форум Math Help Planet

Обсуждение и решение задач по математике, физике, химии, экономике

Теоретический раздел
Часовой пояс: UTC + 4 часа [ Летнее время ]
MathHelpPlanet.com RSS-лента Математического форума

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Программирование уравнения переноса
СообщениеДобавлено: 04 фев 2017, 18:57 
Не в сети
Начинающий
Зарегистрирован:
11 ноя 2016, 16:40
Сообщений: 15
Cпасибо сказано: 0
Спасибо получено:
0 раз в 0 сообщении
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
Сформулировалась такая задача по перенос

С помощью уравнения переноса нужно Единичную Функцию Хэвисайда "перенести"
Результат у меня должен быть сдвиг по оси и отрисовка функции Хэвисайда несколько раз(иными словами перенос по оси)

Функцию Хэвисайда запрограммировал вот так
public:static double fn(double T,double x)//Функция Хэвисайда
{
if (x>=0)
return T;
else if(x<0)
return 0;
}

Результат выполнения кода
Изображение

Но дальше возник вопрос

Данные формулы нужно использовать
[math]\frac{y^{j+1}_{i} - y^j_{i}}{\tau}+a\frac{y^j_{i+1} - y^j_{i}}{h}=0[/math] (формула 1)

[math]y^{j+1}_{k}=\gamma \cdot y^{j}_{k+1}+(1+\gamma) \cdot y^{j}_{k}[/math](формула 2) , где [math]\gamma=\frac{a\tau}{h}[/math]

В коде выглядит это так
gama=(a*ht)/hx; //Число Куранта
for(int i = 0;i<Nx;i++)
{
for(int j = 0;j<Nx;ij++)
{
wht[j+1][i]=((wht[j+1][i]-wht[j][i])/ht)+a*((wht[j][i+1]-wht[j][i])/hx);
wht[j+1][i]=gama*wht[j][i+1] + (1 + gama)*wht[j][i];
}
}


Разумеется результат на графике показывает что никаких сдвигов и переноса нету.

1)В каком направлении нужно мне двигаться чтобы прийти к правильному ответу?
2)Функцию Хэвисайда нужно в любом случае кроме вывода на экран куда-то применять и мне её подставлять в формулу где разностная схема или нужно выразить какой-либо коэффициент?

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Программирование уравнения переноса
СообщениеДобавлено: 05 фев 2017, 13:34 
Не в сети
Начинающий
Зарегистрирован:
11 ноя 2016, 16:40
Сообщений: 15
Cпасибо сказано: 0
Спасибо получено:
0 раз в 0 сообщении
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
Пока вот что получилось

Изображение

Для правильности решения нужно выровнять и убрать скачки которые остаются внизу

Для нынешнего результата применил формулу
for(int i = 0;i<Nx;i++)
{
for(int j = 0;j<Nt;j++)
{
wht[j+1][i]=(1-a*(ht/hx))*wht[j][i]+a*(ht/hx)*wht[j][i]+ht*fn(wx[i],wt[j]);
}
}


где fn это моя функция Хэвисайда,а wx[i]-моя ось с шагами h=0.1, а wt[j]-ось t с шагами [math]\tau[/math]

Пока мысль такова что я просто не те параметры передаю в свою функцию fn

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Программирование уравнения переноса
СообщениеДобавлено: 05 фев 2017, 13:44 
Не в сети
Light & Truth
Зарегистрирован:
06 дек 2014, 10:11
Сообщений: 3190
Cпасибо сказано: 55
Спасибо получено:
697 раз в 630 сообщениях
Очков репутации: 201

Добавить очки репутацииУменьшить очки репутации
zolla писал(а):
Функцию Хэвисайда запрограммировал вот так


Не знаю, что и зачем вы делали.
Но то что вы запрограммировали - это точно не функция Хэвисайда

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Программирование уравнения переноса
СообщениеДобавлено: 05 фев 2017, 19:14 
Не в сети
Начинающий
Зарегистрирован:
11 ноя 2016, 16:40
Сообщений: 15
Cпасибо сказано: 0
Спасибо получено:
0 раз в 0 сообщении
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
На промежуточном контроле сказали что да эта Единичная функция Хэвисайда,похожая на ступеньку.
А так да ещё можно вывести прямоугольный импульс с помощью другой функции Хэвисайда(которая пересекается с функцией Дирака)

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Программирование уравнения переноса
СообщениеДобавлено: 05 фев 2017, 22:44 
Не в сети
Начинающий
Зарегистрирован:
11 ноя 2016, 16:40
Сообщений: 15
Cпасибо сказано: 0
Спасибо получено:
0 раз в 0 сообщении
Очков репутации: 1

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

for(int i = 0;i<Nx;i++)
{
for(int j = 0;j<Nt;j++)
{
wht[i+1][j]=((wht[i][j+1]-wht[i][j])/ht)+a*((wht[i][j]-wht[i][j-1])/hx);//
}
}

for(int i = 0;i<Nx;i++)
{
for(int j = 0;j<Nt;j++)
{
wht[i+1][j]=(1-a*(ht/hx))*wht[i][j]+a*(ht/hx)*wht[i][j]+ht*fn(T,x);
}
}


Как оказалось в функции fn
нужно было другие параметры,а именно оригинальные параметры fn(T,x).
Да график немного стал получше..

Изображение

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Программирование уравнения переноса
СообщениеДобавлено: 07 фев 2017, 13:50 
Не в сети
Начинающий
Зарегистрирован:
11 ноя 2016, 16:40
Сообщений: 15
Cпасибо сказано: 0
Спасибо получено:
0 раз в 0 сообщении
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
Это было в качестве эксперимента(как выяснилось 2 цикла по отдельности делать это неудачное решение)

На данный момент я выразил [math]$y^{j+1}_i$[/math] (Здесь на форуме мне указали мои ошибки,спасибо)
Вот полная формула(Она была проверена руководителем и верна,процесс решения уравнения записан аналитически)

[math]y^{j+1}_i=\frac{-a\cdot \tau y^j_{i+1} + a\cdot \tau y^j_{i} + y^j_{i+1} \cdot h}{h}[/math]

Вопрос
до нахождения [math]y^{j+1}_i[/math]

Получается я должен найти аппроксимацию,сходимость,устойчивость формулы явной разностной схемы и только потом выразить [math]y^{j+1}_i[/math]?

P.S.
В учебниках Самарского и не только,в большинстве случаев идёт сначала формула схемы,а потом и последующие действия такие как аппроксимация,нахождения сходимости и устойчивости
но ключевое слово в большинстве(так как бывает сразу в метод гармоник уходит вычисление)

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Программирование уравнения переноса
СообщениеДобавлено: 08 фев 2017, 23:18 
Не в сети
Начинающий
Зарегистрирован:
11 ноя 2016, 16:40
Сообщений: 15
Cпасибо сказано: 0
Спасибо получено:
0 раз в 0 сообщении
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
И всё-таки вопрос что мне делать дальше чтобы найти решение уравнения переноса?с правильным графиком...

выразил [math]y_{j+1}^{i}[/math] а как дальше быть?

вот есть формула
[math]y_{j+1}^{i} = - \gamma*y_{j}^{i+1} + (1+ \gamma )*y_{j}^{i}[/math]

и есть метод гармоник

Что мне находить дальше?

Вернуться к началу
 Профиль  
Cпасибо сказано 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

 Похожие темы   Автор   Ответы   Просмотры   Последнее сообщение 
Решение уравнения переноса с помощью схемы Кранка-Николсона

в форуме Численные методы

Dellghin

2

149

03 мар 2017, 18:09

Привести к каноническому виду путем параллельного переноса

в форуме Аналитическая геометрия и Векторная алгебра

Vladptica

1

179

13 ноя 2013, 15:20

Программирование

в форуме Исследование операций и Задачи оптимизации

elena+++

6

690

15 фев 2014, 16:04

Линейное программирование

в форуме Исследование операций и Задачи оптимизации

Alina0712

0

182

29 сен 2014, 22:36

Математическое программирование

в форуме Исследование операций и Задачи оптимизации

alena_lepilova

0

130

18 ноя 2015, 13:19

Задача на мат. программирование

в форуме Исследование операций и Задачи оптимизации

UNIQUE

0

146

30 май 2015, 12:15

Динамическое программирование

в форуме Исследование операций и Задачи оптимизации

Zeleniy

2

195

18 окт 2015, 12:59

Динамическое программирование или нет

в форуме Исследование операций и Задачи оптимизации

chibi

3

254

10 янв 2012, 20:19

Линейное программирование

в форуме Исследование операций и Задачи оптимизации

SenkShow

5

162

04 сен 2016, 16:18

Нелинейное программирование

в форуме Линейная и Абстрактная алгебра

tmb-roman

0

175

03 апр 2015, 23:51


Часовой пояс: UTC + 4 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Яндекс.Метрика

Copyright © 2010-2016 MathHelpPlanet.com. All rights reserved