0 / 0 / 0
Регистрация: 10.10.2017
Сообщений: 25
|
||||||
1 | ||||||
.NET 4.x Двумерная диффузия, теплообмен18.11.2018, 13:53. Показов 1661. Ответов 5
Метки нет (Все метки)
Товарищи, вновь обращаюсь к Вам за помощью, как-то стыдно уже даже.
В прошлый раз мне уже существенно помогли, в результате у меня теперь есть работающая модель для отрисовки в bitmap процесса теплообмена на двумерной карте. Мой руководитель
Спасибо.
0
|
18.11.2018, 13:53 | |
Ответы с готовыми решениями:
5
Анализ источника ошибки. Двумерная диффузия Теплообмен Диффузия Две жидкости в калориметрах, теплообмен |
18.11.2018, 15:27 | 2 | |||||
optimizator98,
Ну по правде говоря, считалось у вас неправильно. По крайней мере на границах - так точно. Вот так нужно:
0
|
0 / 0 / 0
Регистрация: 10.10.2017
Сообщений: 25
|
||||||
18.11.2018, 16:56 [ТС] | 3 | |||||
Storm23, действительно.. Спасибо большое, увидел.
Еще один вопрос, если позволите, при попытке подставить в Params значения, приближенные к природным
Кликните здесь для просмотра всего текста
System.ArgumentException
HResult=0x80070057 Сообщение = Значение '-815' недопустимо для 'red'. 'red' должно быть больше или равно 0 и меньше или равно 255. Источник = System.Drawing Трассировка стека: в System.Drawing.Color.CheckByte(Int32 value, String name) в System.Drawing.Color.FromArgb(Int32 alpha, Int32 red, Int32 green, Int32 blue) в System.Drawing.Color.FromArgb(Int32 red, Int32 green, Int32 blue) в Diffuse2d.Form1.DrawBitmap(Double[,] values) в C:\Users\...\дифуз_базовый\Diffuse2d\Form1.cs:строка 78 в Diffuse2d.Form1.trackBar1_ValueChanged(Object sender, EventArgs e) в C:\Users...\Diffuse2d\Form1.cs:строка 91 в System.Windows.Forms.TrackBar.OnValueChanged(EventArgs e) в System.Windows.Forms.TrackBar.WndProc(Message& m) в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) в System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) в System.Windows.Forms.UnsafeNativeMethods.SendMessage(HandleRef hWnd, Int32 msg, IntPtr wParam, IntPtr lParam) в System.Windows.Forms.Control.SendMessage(Int32 msg, IntPtr wparam, IntPtr lparam) в System.Windows.Forms.Control.ReflectMessageInternal(IntPtr hWnd, Message& m) в System.Windows.Forms.Control.WndProc(Message& m) в System.Windows.Forms.ScrollableControl.WmHScroll(Message& m) в System.Windows.Forms.ScrollableControl.WndProc(Message& m) в System.Windows.Forms.Form.WndProc(Message& m) в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) в System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) в System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam) в System.Windows.Forms.NativeWindow.DefWndProc(Message& m) в System.Windows.Forms.Control.DefWndProc(Message& m) в System.Windows.Forms.Control.WmKeyChar(Message& m) в System.Windows.Forms.Control.WndProc(Message& m) в System.Windows.Forms.TrackBar.WndProc(Message& m) в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) в System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) в System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) в System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNat iveMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) в System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) в System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) в System.Windows.Forms.Application.Run(Form mainForm) в Diffuse2d.Program.Main() в C:\Users...\дифуз_базовый\Diffuse2d\Program.cs:строка 17 Правильно ли я понимаю, что это вызвано Bitmap'ом и нарастающей погрешностью? И можно ли с этим бороться?
0
|
18.11.2018, 17:23 | 4 | |||||
Сообщение было отмечено optimizator98 как решение
Решение
dt - это шаг дифференцирования. Он должен быть как можно меньше, в идеале стремиться к нулю.
Дифференциальное уравнение нельзя решить в лоб численно. Для того, что бы это сделать применяется Метод конечных разностей, в которых производная заменяется конечной разностью. И dt - это шаг этих самых разностей. Чем он меньше, тем ближе разность к истинной производной, тем точнее расчеты. Поэтому вам нельзя ставить такие огромные числа в dt. Вместо этого, нужно увеличивать число шагов моделирования TimeSteps. Ну а если вас волнует только битмап, то после строки 76 добавьте такое:
1
|
0 / 0 / 0
Регистрация: 10.10.2017
Сообщений: 25
|
|
10.12.2018, 11:21 [ТС] | 5 |
Storm23, а можно ли увеличить "временной диапазон" моделирования в программе, добавив, например функцию очистки памяти после каждого цикла или поставить отрисовку в Bitmap только того тика, что выбран на scalebar, потому что как обходить SystemOutOfMem моя не понимай.
0
|
11.12.2018, 20:26 | 6 | |||||
Если ошибка возникает из-за большого числа битмапов, то да, их можно очистить.
Перед строкой 91 (в моем примере, в посте #2) нужно вставить:
0
|
11.12.2018, 20:26 | |
11.12.2018, 20:26 | |
Помогаю со студенческими работами здесь
6
Диффузия в клеточных автоматах Чем отличается понятия теплообмен, теплоотдача и теплопередача? Конвективный теплообмен при ламинарном течении жидкости в трубе Разностная схема системы реакция-диффузия на диске Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |