0 / 0 / 0
Регистрация: 10.10.2017
Сообщений: 25
|
|||||||||||
1 | |||||||||||
.NET 4.x Анализ источника ошибки. Двумерная диффузия12.12.2017, 17:30. Показов 781. Ответов 3
Метки нет (Все метки)
Программа, реализующая уравнение детерминированной диффузии.
В моем случае, используется для наглядной реализации дифф. уравнения теплопроводности. Соответственно, в вкладке Params задаются значения в СИ. В моей задаче примерные показатели kx, ky (коэф. диффузии) равны ~10-6 Площадь желательна 1000м:1000м (dx, dy) dt - желательно ставить как можно больше. Для соответствия реальным условиям - порядка 10 тыс лет. В СИ 315360000000 сек. TimeSteps не принципиален с точки зрения реальности задачи. y0 - массив для высчитанных значений
Суть моей проблемы заключается в том, что данная система моделирования работает только, если соблюдается условие стабильности. В противном случает происходит дестабилизация системы и график начинает амплитудно прыгать из + в -, что невозможно (теплообмен от холодного к теплому). И выскакивает ошибка. Все мои попытки высчитать оптимальные значения не помогают, даже с учетом удовлетворения неравенству. Логическую ошибку я найти не могу. Все правильно работает, например, с такими параметрами.
Необходимо реализовать данную задачу либо в формате Bitmap, либо каким-то еще способом, о котором, я могу не знать. Помогите нубу, пожалуйста. Заранее, спасибо!
0
|
12.12.2017, 17:30 | |
Ответы с готовыми решениями:
3
Двумерная диффузия, теплообмен Поиск источника ошибки Диффузия Анализ шаблона на ошибки в верстке |
0 / 0 / 0
Регистрация: 10.10.2017
Сообщений: 25
|
|
12.12.2017, 19:52 [ТС] | 2 |
Если я не до конца понятно сформулировал проблему, то суть заключается получении такого dt, чтобы он с учётом остальных переменных удовлетворил неравенству
0
|
933 / 461 / 233
Регистрация: 02.06.2016
Сообщений: 732
|
||||||
12.12.2017, 19:59 | 3 | |||||
нет, "многократное умножение" на числа kx = 0.000001, ky = 0.000001 не может дать бесконечноть и отрицательное число. Можно предположить, что там накапливается суммарная погрешность, ведущая к бесконечности, но в представленных тестах она всеравно гасится (сумма малых величин) умножением на близкое к нулю число.
Имхо, проблема первая - в размере картинки, она должна была реагировать на пропорции dx/dy, т.к. в примере dx=100 и dy=100, то размер картинки становится равным ~20000*20000 пикселей (почитай тут). И вторая - в том, что TimeSteps должен иметь порядок обратный порядку dt*коэффициент диффузии (в примере он 10^-6), т.е. диффузия есть, но на картинке её нифига не видно, в програме используется линейная растяжка, а чтобы увидеть нужна эквализация (про термины), либо правильно подбирать параметры мат.модели * возможно, конечно же идет сильная потеря точности, из-за использования double. т.е. при малом коэф. диффузии маааленькая часть большого столбика должна перейти на соседний, но часть этого кусочка теряется при переносе. Это я не могу сейчас оценить, вроде используются числа, которые далеки от границ double. вот, здесь я убрал влияние dx и dy (т.е. квадраты всегда будут квадратные) и записал числа в экспотенциальном формате, чтобы видеть, что они не нулевые и меняются: Кликните здесь для просмотра всего текста
если картинка не нужна - не рисуй её, не сохраняй значения всех вызовов метода Tick, распечатай матрицу в текстовом формате для нужного TimeSteps(очень большого) и работай с ней. Кстати, этод метод, по сути, является обычным фильтром Гаусса, его можно разложить на строковую и столбцовую составляющую и заставить работать быстрее. Добавлено через 7 минут * попробуй существено увеличить dt, например, до 1000000
1
|
0 / 0 / 0
Регистрация: 10.10.2017
Сообщений: 25
|
|
12.12.2017, 21:16 [ТС] | 4 |
Спасибо большое, что объяснил. Буду разбираться.
0
|
12.12.2017, 21:16 | |
12.12.2017, 21:16 | |
Помогаю со студенческими работами здесь
4
Анализ кода программы на ошибки Диффузия в клеточных автоматах Один Ping на чтение нескольких токенов и анализ ошибки Разностная схема системы реакция-диффузия на диске Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |