Форум программистов, компьютерный форум, киберфорум
Maple
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 27.04.2013
Сообщений: 7

Компьютерное моделирование термодинамических состояний

08.06.2013, 20:39. Показов 2032. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ищу человека со знанием физики, который поможет смоделировать в Maple термодинамические состояния. Очень срочно!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.06.2013, 20:39
Ответы с готовыми решениями:

Моделирование Линейных Непрерывных Систем в Пространстве Состояний
Здравствуйте! Как преобразовать в Матлабе lti-объект из tf-формы и zpk-формы в ss-форму если возникает ошибка Undefined function or...

Компьютерное моделирование
Глубинная бомба - торпеда , снабженная паромным двигателем установленная на взрыв ч-з заданное время , сбрасывается со стоящего...

Компьютерное моделирование в физике.
ЧИСЛЕННОЕ РЕШЕНИЕ УРАВНЕНИЙ ДВИЖЕНИЯ. Условие программы. Сначала переписываем V(t)=dy(t)/dt и a(t)=dv(t)/dt/ Обозначим через dt...

8
Модератор
Эксперт по математике/физике
 Аватар для VSI
5291 / 4073 / 1392
Регистрация: 30.07.2012
Сообщений: 12,489
08.06.2013, 21:26
Правила форума CyberForum.ru
4.6. Обсуждение тем - только на форуме. Приглашения к обсуждению еще где-либо запрещены.
0
27 / 20 / 1
Регистрация: 26.02.2013
Сообщений: 135
12.06.2013, 16:19
Если не трудно, можете подробнее разъяснить, что нужно смоделировать, в какой среде, программе и т.д.
0
0 / 0 / 0
Регистрация: 27.04.2013
Сообщений: 7
12.06.2013, 16:38  [ТС]
Нужно смоделировать термодинамические процессы в среде Maple. Обязательно должно быть отображено достижение газом равновесного состояния и изопроцессы. Например при изохорном процессе при изменении давления видеть, как меняется температура, скорость, энергия...
Есть готовая программа по похожей теме (здесь просто моделировалась молекулярная динамика), из которой можно переделать. Я ее набрала, но она не знаю по какой причине не работает (графики не рисуются).

Кликните здесь для просмотра всего текста
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
Определение параметров моделирования.
Число частиц:
>N:=60;
Длина грани кубической МД-ой ячейки:
> L:=50;
Шаг по времени:
> dt:=0.01;
Число шагов по времени межу усреднениями:
> Nt:=100;
Число наборов усреднения:
> Nn:=150;
 
ЗНАЧЕНИЕ НАЧАЛЬНЫХ СКОРОСТЕЙ И КООРДИНАТ
> r1:=rand(1000);
 
  r1 := proc()
    (proc() option builtin = RandNumberInterface;  end proc)(
    6, 1000, 10)
end proc
 
> for i to N do
> x[i]:=L*0.001*r1():y[i]:=0.1*L*0.001*r1():z[i]:=L*0.001*r1():
> end do:
> r2:=rand(-1000..1000);
 
  r2 := proc()
    (proc() option builtin = RandNumberInterface;  end proc)(
    6, 2001, 11) - 1000
end proc
 
> for i to N do
> Vx[i]:=3*0.001*r2():Vy[i]:=3*0.001*r2():Vz[i]:=3*0.001*r2():
> end do:
> Vxsum:=sum(Vx[k],k=1..N)/N;
 
                        Vxsum := 0.3553000000
 
> Vysum:=sum(Vy[k],k=1..N)/N;
 
                        Vysum := 0.2970000000
 
> Vzsum:=sum(Vz[k],k=1..N)/N;
 
                        Vzsum := -0.1954500000
 
> for i to N do Vx[i]:=Vx[i]-Vxsum:end do:
> for i to N do Vy[i]:=Vy[i]-Vysum:end do:
> for i to N do Vz[i]:=Vz[i]-Vzsum:end do:
> r:=sqrt(dx^2+dy^2+dz^2);
 
                              2     2     2 1/2
                      r := (dx  + dy  + dz )
 
> u:=4*(1/r^12-1/r^6);
 
                          4                    4
             u := ------------------ - ------------------
                     2     2     2 6      2     2     2 3
                  (dx  + dy  + dz )    (dx  + dy  + dz )
 
> fx:=-diff(u,dx):fy:=-diff(u,dy):fz:=-diff(u,dz);
 
                        48 dz                24 dz
            fz := ------------------ - ------------------
                     2     2     2 7      2     2     2 4
                  (dx  + dy  + dz )    (dx  + dy  + dz )
 
> Vmin:=0:Vmax:=10:nstep:=20:
> 
> step:=(Vmax-Vmin)/nstep:
> for j to nstep do particle[j]:=0:end do:
> a:=(0.136*10^7)/(165.324*3.405^3*6.02^2);
 
                           a := 5.749878567
 
> b:=(3.22*100)/(3.405^3*6.02);
 
                           b := 1.354902462
Нахождение ускорения частиц
> for i to N do ax[i]:=0:ay[i]:=0:az[i]:=0:end do:
> for i to N-1 do
> for j from (i+1) to N do
> dx:=x[i]-x[j]:dy:=y[i]-y[j]:dz:=z[i]-z[j]:
> if abs(dx)>0.5*L then dx:=dx-sign(dx)*L end if:
> if abs(dy)>0.5*L then dy:=dy-sign(dy)*L end if:
> if abs(dz)>0.5*L then dz:=dz-sign(dz)*L end if:
> ax[i]:=ax[i]+fx:ay[i]:=ay[i]+fy:az[i]:=az[i]+fz:
> ax[j]:=ax[j]-fx:ay[j]:=ay[j]-fy:az[j]:=az[j]-fz:
> end do;
> end do;
 
ПРОГРАММА МОЛЕКУЛЯРНОЙ ДИНАМИКИ
> t:=0:
> for k to Nn do
> virial:=0:n:=0:
> px:=0:py:=0:pz:=0:
> ke:=0:pe:=0:
> for it to Nt do
> for i to N do
> x[i]:=x[i]+Vx[i]*dt+0.5*ax[i]*dt^2:
> y[i]:=y[i]+Vy[i]*dt+0.5*ay[i]*dt^2:
> z[i]:=z[i]+Vz[i]*dt+0.5*az[i]*dt^2:
> Vx[i]:=Vx[i]+0.5*ax[i]*dt:
> Vy[i]:=Vy[i]+0.5*ay[i]*dt:
> Vz[i]:=Vz[i]+0.5*az[i]*dt:
> while x[i]<0 do x[i]:=x[i]+L: px:=px-Vx[i]:end do:
> while x[i]>L do x[i]:=x[i]-L: px:=px+Vx[i]:end do:
> while y[i]<0 do y[i]:=y[i]+L: py:=py-Vy[i]:end do:
> while y[i]>L do y[i]:=y[i]-L: py:=py+Vy[i]:end do:
> while z[i]<0 do z[i]:=z[i]+L: pz:=pz-Vz[i]:end do:
> while z[i]>L do z[i]:=z[i]-L: pz:=pz+Vz[i]:end do:
> end do:
> for i to N do
> if y[i]<=0.1*L then n:=n+1 end if:
> ax[i]:=0:ay[i]:=0:az[i]:=0:
> end do:
> for i to N-1 do
> for j from (i+1) to N do
> dx:=x[i]-x[j]:dy:=y[i]-y[j]:dz:=z[i]-z[j]:
> if abs (dx)>0.5*L then dx:=dx-sign(dx)*L end if:
> if abs (dy)>0.5*L then dy:=dy-sign(dy)*L end if:
> if abs (dz)>0.5*L then dz:=dz-sign(dz)*L end if:
> ax[i]:=ax[i]+fx:ay[i]:=ay[i]+fy:az[i]:=az[i]+fz:
> ax[i]:=ax[i]-fx:ay[i]:=ay[i]-fy:az[i]:=az[i]-fz:
> pe:=pe+u:
> end do:
> end do:
> for i to N do
> Vx[i]:=Vx[i]+0.5*ax[i]*dt:
> Vy[i]:=Vy[i]+0.5*ay[i]*dt:
> Vz[i]:=Vz[i]+0.5*az[i]*dt:
> ke:=ke+0.5*(Vx[i]^2+Vy[i]^2+Vz[i]^2):
> virial:=virial+x[i]*ax[i]+y[i]*ay[i]+z[i]*az[i]:
> if k>=Nn-1 then
> V:=sqrt(Vx[i]^2+Vy[i]^2+Vz[i]^2):
> for j to nstep do
> if (V>=(Vmin+step*(j-1)))and(V<(Vmin+step*j)) then particle[j]:=particle[j]+1 end if:
> end do:
> end if:
> end do:
> end do:
> t:=t+dt*Nt:
> conc[k]:=(n*10^5)/(Nt*0.1*(L*3.405)^3):
> Ke[k]:=(ke*165.324*10^(-4))/Nt:
> Pe[k]:=(pe*165.324*10^(-4))/Nt:
> E[k]:=(Pe[k]+Ke[k])/N:
> T[k]:=(2*ke*119.8)/(3*N*Nt):Pid:=N*1653.24*T[k]/(3.405*L)^3:
> PVdV:=((T[k]/(L^3/N-b))-((N^2*a)/L^6))*(1653.24/3.405^3):
> Pflux[k]:=((px+py+pz)*1653.24)/(3*L^2*3.405^3*dt*Nt):
> Pvirial[k]:=((N*T[k])/L^3+virial/(3*Nt*L^3))*(1653.24/3.405^3):
> dPflux1[k]:=Pflux[k]-Pid:dPvirial1[k]:=Pvirial[k]-Pid:
> dPflux2[k]:=Pflux[k]-PVdV:dPvirial2[k]:=Pvirial[k]-PVdV:
> end do:
Warning, computation interrupted
 
> for j to nstep do particle[j]:=particle[j]/(N*2*Nt):end do:
> EE:=[seq(E[i],i=1..Nn)]:TT:=[seq(T[i],i=1..Nn)]:
> PE:=[seq(Pe[i],i=1..Nn)]:KE:=[seq(Ke[i],i=1..Nn)]:
> PFLUX:=[seq(Pflux[i],i=1..Nn)]:
> PVIRIAL:=[seq(Pvirial[i],i=1..Nn)]:
> Conc:=[seq(conc[i],i=1..Nn)]:
> Particle:=[seq(particle[i],i=1..nstep)]:
> DPflux2:=[seq(dPflux2[i],i=1..Nn)]:
> DPvirial2:=[seq(dPvirial2[i],i=1..Nn)]:
> DPflux1:=[seq(dPflux1[i],i=1..Nn)]:
> DPvirial1:=[seq(dPvirial1[i],i=1..Nn)]:
> with(plots):
> listplot(PE);
> 
 
                             listplot(PE)
 
> listplot(KE);
 
                             listplot(KE)
 
> listplot(EE);
 
                             listplot(EE)
 
> listplot(PE);
 
                             listplot(PE)
 
> listplot(TT);
 
                             listplot(TT)
 
> listplot(PFLUX);
 
                           listplot(PFLUX)
 
> listplot(DPflux1);
 
                          listplot(DPflux1)
 
> listplot(DPflux2);
 
                          listplot(DPflux2)
 
> listplot(PVIRIAL);
 
                          listplot(PVIRIAL)
 
> listplot(DPvirial1);
 
                         listplot(DPvirial1)
 
> listplot(DPvirial2);
 
                         listplot(DPvirial2)
 
> listplot(Conc);
 
                            listplot(Conc)
 
> listplot(Particle);
0
27 / 20 / 1
Регистрация: 26.02.2013
Сообщений: 135
12.06.2013, 22:35
Вроде бы немного разобрался в этой проге. Я такую же делал на с++ builder, но чисто для визуализации молекулярной динамики без вычисления термо/д параметров и флуктуаций. Думаю, что действительно, эта программа то, что вам нужно. Но почему выдает ошибку пока не разобрался. Там море циклов, видать на каком-то этапе цикла происходит ошибка, может быть переполнения или выхода за пределы. У мапла всегда были проблемы с комментариями и пояснениями о причинах ошибок. А т.к. море циклов разобраться будет, думаю, очень сложно.

Есть неясные моменты. Например, какой смысл имеет Pvirial[k] ? Впервые слышу о вириальном давлении. Зачем в цикле 118 -127 нужно dx:=dx-sign(dx)*L ? Честно говоря, не понимаю. И еще непонятно с коэффициентами в строках 143 - 153: 3.405, 1653. Зачем там вообще нужен вириал, если кинетическая энергия уже подсчитана, а система находится в неравновесном состоянии, и кроме кин. энергии мы больше, вроде бы, ни для чего не можем использовать его. А так, вроде бы, остальное понятно. И кстати, как вы определите, достигнуто ли равновесное состояние в газе? Если вы будете определять это по равенству нулю флуктуаций, то скорей всего равновесие не будет достигнуто никогда, хотя, возможно и нет.

В общем главная цель - найти ошибку в коде. Саму программу, думаю, вам заново писать не надо, т.к. здесь есть почти все, что надо, и ее можно будет легко дописать. Если удастся исправить обязательно выложу. Но повторюсь - сделать это будет очень непросто.
0
0 / 0 / 0
Регистрация: 27.04.2013
Сообщений: 7
12.06.2013, 22:58  [ТС]
Ой, спасибо Вам большое.. Ну эта прога не совсем то, что мне нужно.. исправлять ее по любому придется. В завершении этого модеирования строятся графики срених значений полученных величин.
Вот передо мной лежит описание этого моделирования.. Переменные virial, px, py, pz нужны для вычисления давления, переменная n - для концентрации, ke и pe - кинетической и потенциальной энергий.
Равновесие считается достигнутым, если система срелаксировала к определенным средним значениям кинетической и потенциальной энергии. так же можно судить о достижении равновесия по концентрации частиц в части объема, где они были собраны в начальном состоянии. По рез-ам этого моделирования выяснилось, что время достижения равновесного состояния значительно сокращается при увеличении в ней числа частиц. и есть графики, по которым это видно. Но как это объяснить по этой программе, я, увы, не могу(
0
Модератор
Эксперт по математике/физике
 Аватар для VSI
5291 / 4073 / 1392
Регистрация: 30.07.2012
Сообщений: 12,489
12.06.2013, 23:00
...В общем главная цель - найти ошибку в коде...
По-моему, основные "непонятки" начинаются здесь: строки с 134-ой и по 153-ю... IF есть, END IF как-то сразу и нет..., а начинается цикл... (а может быть так и надо?) и целая "куча" END IF и END DO... И кол-во DO и END DO не совпадает. И программу в этом месте "глючит"... Ищите ошибку...
0
27 / 20 / 1
Регистрация: 26.02.2013
Сообщений: 135
13.06.2013, 18:23
Получилось, заработало.
Здесь было 3 косяка.
Первый ( очень серьезный) - в строчке 124 - здесь автор программы спутал индексы i с j. Он написал i, а надо было j т.к. вторые в рассмотрении молекулы еще не взаимодействовали, а он, получается, 2 раза приписал одним молекулам взаимодействие, а другие вообще не рассматривал, получается.
Второй, точно не знаю, но по-моему связан с глюком самого мапла: в фразе
if abs (dx)>0.5*L then dx:=dx-sign(dx)*L end if:
он говорит об ошибке, хотя вроде бы все правильно, не считая действия, dx:=dx-sign(dx)*L, которое на мой взгляд бессмысленно, хотя на работу мапла влиять не может. В общем, я просто удалил эти три строчки и все. Хотя может они для чего-то и нужны, просто я не понимаю, если кто знает, поделитесь соображениями.
Третий (очень серьезынй, может привести к расходимости и полному сбою) - строчка 52: r := (dx + dy + dz ). Ее просто надо закомментировать. Тем более, что r:=sqrt(dx^2+dy^2+dz^2); уже стоит перед ним.

Кстати, сократил число усреднений и число шагов в усреднении в 10 раз, иначе считать будет жутко долго.

После этих изменений все заработало.
Скидываю исходник и скриншоты (мапл - 17, если не пойдет, значит у вас более старая версия, скачайте новую).

Полностью разобрался, как она работает.
Механизм движения и взаимодействия молекул - классический. На каждом шаге мы просто пересчитываем силы ускорение, скорость, координаты. И еще там ошибка: автор в одном цикле 2 раза пересчитывет скорость, тогда как координаты - один раз, первый пересчет желательно удалить.
Затем, во время k успеднения, при n шаг Nt циклов в усреднении мы просто подсчитываем термод. параметры:
кинетическую и потенциальную энергию, энергию одной молекулы, их все по числу циклов в усреднении ( кстати - интересный прием, вместо, к примеру, 1000, шагов, сделать, 10 в каждом по 100, тем самым уменьшая число точек, но зато повышая их точность, тем самым наши кривые станут более плавными и понятными и мы не получим непонятную кривую с миллионом точек в одном месте, как в экг, спасибо автору за интересную идею, возьму на вооружение). В Также вычисляется 4 давления: реальное Pflux (почему flux, никакой флуктуации нет здесь), грубое - неточное - для идеального газа Pid, и более точное (через уравнение Ван-дер-Ваальса) PVdV и второе в вириальном разложении Pvirial, вроде бы так.

Осталось разобраться с коэффициентами и затем можете переделывать программу как вам нужно.
Но вот с коэффициентами я ничего не понимаю. Автор сделал свою систему отсчета, или он просто повторил эту ячейку много раз, я не понимаю.
К стати я не проверял толком графики, правильно ли там все (времени нет, завтра экзамен), проверьте, может там все ерунда. Надеюсь, что ничего не напутал. Извиняюсь, если где соврал.
Вложения
Тип файла: rar MaplePrg.rar (309.2 Кб, 29 просмотров)
0
0 / 0 / 0
Регистрация: 27.04.2013
Сообщений: 7
13.06.2013, 19:22  [ТС]
Огромное спасибо! Сейчас попробую во всем разобраться и довести до ума!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.06.2013, 19:22
Помогаю со студенческими работами здесь

Компьютерное моделирование в экологии
Провести моделирование динамики численности популяций в системе «хищник-жертва» (модель (7.34)) при значениях параметров r = 5, a = 0,1, q...

Компьютерное моделирование в Excel
Здравствуйте! Помогите сделать лабораторную работу &quot;Распространение тепла в стержне&quot; соответственно за денюжки мой icq...

Компьютерное моделирование падения тела
Дана программа падения шара. При запуске вводится только радиус шара. Нужно добавить еще какие нибудь входные данные, например падение под...

Выполните компьютерное моделирование наведения ракеты в точку на экране
Помогите решить следующую задачу: Выполните компьютерное моделирование наведения ракеты в точку на экране, указываемую нажатием на...

В каких термодинамических процессах расширения и сжатия внутренняя энергия рабочего тела уменьшается
В каких термодинамических процессах расширения и сжатия внутренняя энергия рабочего тела уменьшается? Желательно со ссылками на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru