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

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

Теоретический раздел
Часовой пояс: UTC + 3 часа [ Летнее время ]
новый онлайн-сервис
число, сумма и дата прописью

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




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Программирование уравнения переноса
СообщениеДобавлено: 04 фев 2017, 17:57 
Не в сети
Начинающий
Зарегистрирован:
11 ноя 2016, 15: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, 12:34 
Не в сети
Начинающий
Зарегистрирован:
11 ноя 2016, 15: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, 12:44 
Не в сети
Последняя инстанция
Зарегистрирован:
06 дек 2014, 09:11
Сообщений: 7070
Cпасибо сказано: 115
Спасибо получено:
1662 раз в 1508 сообщениях
Очков репутации: 283

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


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

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

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

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Программирование уравнения переноса
СообщениеДобавлено: 05 фев 2017, 21:44 
Не в сети
Начинающий
Зарегистрирован:
11 ноя 2016, 15: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, 12:50 
Не в сети
Начинающий
Зарегистрирован:
11 ноя 2016, 15: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, 22:18 
Не в сети
Начинающий
Зарегистрирован:
11 ноя 2016, 15: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пасибо сказано 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему      Страница 1 из 1 [ Сообщений: 7 ]

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

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

Dellghin

2

954

03 мар 2017, 17:09

Уравнение переноса, явная схема

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

constantin01

1

687

29 окт 2020, 22:02

Построение методом параллельного переноса

в форуме Геометрия

_Astarta_

5

711

28 апр 2018, 21:37

Как можно менять знаки переменных без переноса за знак равно

в форуме Алгебра

koderman

7

340

04 фев 2020, 08:17

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

в форуме Размышления по поводу и без

Kirillytfvh

2

163

10 ноя 2022, 23:08

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

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

MalinkaAmnyam

11

618

17 май 2020, 14:46

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

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

Alina0712

0

492

29 сен 2014, 21:36

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

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

lizasimpson

1

416

02 сен 2014, 16:07

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

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

nonick11111

0

551

15 окт 2021, 17:00

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

в форуме MathCad

veronikarnd

4

418

23 июн 2020, 13:48


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



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

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


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

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

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

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