ИДЕАЛЬНЫЙ ГАЗ И ПОСТРОЕНИЕ ЗАВИСИМОСТИ КОЛИЧЕСТВА ЧАСТИЦ ОТ ВРЕМЕНИ
Исполнитель: Васильева Анастасия
Группа 23604/1 Кафедра Теоретической механики
Формулировка задачи[править]
Цель данной курсовой работы – создать модель поведения идеального газа в двухмерном сосуде с открытым отверстием. Актуальность темы: Решение важных теоретических и прикладных задач механики сплошных сред практически невозможно без математического моделирования. Основной элемент решений которых строятся с помощью предложенного подхода.
Описание моделируемого процесса[править]
В данной курсовой работе мы рассмотрим идеальный газ — математическая модель газа, в которой предполагается, что потенциальной энергией молекул можно пренебречь по сравнению с их кинетической энергией. Между молекулами не действуют силы притяжения или отталкивания, соударения со стенками сосуда абсолютно упруги, а время взаимодействия между молекулами пренебрежимо мало по сравнению со средним временем между столкновениями. Понятие об идеальном газе является практически удобной абстракцией. Такое понятие дало возможность построить молекулярно-кинетическую теорию, рассмотреть вопросы о вычислении теплоемкостей, явления переноса и др. В определенных границах выводы этой теории хорошо подтверждаются экспериментами. Модель широко применяется для решения задач термодинамики газов и задач аэрогазодинамики. Например, воздух при атмосферном давлении и комнатной температуре с большой точностью описывается данной моделью. В случае экстремальных температур или давлений требуется применение более точной модели, например модели газа Ван-дер-Ваальса, в котором учитывается притяжение между молекулами. Данная модель описывает поведение частиц в двухмерном сосуде, а конкретно, показывает зависимость вылетания этих частиц через щель. Входными параметрами будут являться количество частиц и температура газа. Процесс движения идеального газа описывается уравнениями, задающими компоненты скоростей, подчиняющимся распределению Максвелла:
while (massivx.length<n){ //задаем массив скоростей по X a=Math.random()*2; b=Math.random()*2; position = surface(a, b); if((Math.exp(-(position.x*position.x)/(2*T))*(position.x*position.x))>position.y) { massivx.push(position.x); } } while (massivy.length<n){ //задаем массив скоростей по Y a=Math.random()*2; b=Math.random()*2; position = surface(a, b); if((Math.exp(-(position.x*position.x)/(*T))*(position.x*position.x))>position.y) { massivy.push(position.x); }
Визуализация проекта[править]
Данная работа выполнена на JavaScript. Программа рисует сосуд, где жирной линией изображено отверстие. Ниже в окошке есть три поля для заполнения: первый показывает сколько частиц уже вылетело (числа появляются после запуска программы), другие два обязательны для ввода данных-количество частиц и температура. Также можно исследовать зависимость количества оставшихся частиц от времени, смотря на график.
Скачать курсовую работу архивом
<syntaxhighlight lang="cpp" line start="1" enclose="div">
<!DOCTYPE html> <html> <head> <title>Laboratory work of Canvas</title> <style>
- canvas {
display: block; margin: 0; border: 1px solid #000; } </style> <script type="text/javascript"> function graph() { var dps = []; var chart = new CanvasJS.Chart("chartContainer",{ title :{ text: "N(t)" }, data: [{ type: "line", dataPoints: dps }] }); var xVal = 0; var yVal = 0; var j=0; var updateInterval = 1000; var dataLength = 0; var updateChart = function(count) { count = count || 1; for(j = 0; j < count; j++) { yVal = n - counter; dps.push({ x: xVal, y: yVal }); xVal++; }; chart.render(); if (yVal==0){clearInterval(drawing);} }; updateChart(dataLength); vardrawing = setInterval(function(){updateChart()}, updateInterval); } </script> <script type="text/javascript" src="http://canvasjs.com/assets/script/canvasjs.min.js"></script> </head> <body>
<canvas id="canvas"></canvas>
Pole: <input id="pole" value="0">
Enter number of parcticles: <input id="partcount" value="">
Enter temperature: <input id="temperature" value="">
<button onclick="counter=0; n=partcount.value; T=temperature.value;
init(); graph();">Submit</button>
<script>
var W, H, ctx, n;
var counter = 0;
var massivx=[], massivy=[], a, b, T;
var k=38*Math.pow(10, -23);
var timer = 0;
var Circle = function(x,y,radius, color, vx, vy){
this.x = x;
this.y = y;
this.r = radius;
this.color = color;
this.vx = vx;
this.vy = vy;
};
var circles = [];
function surface(a, b) {
return{
x: a*10,
y: b*10
};
}
function init(){
var canvas = document.getElementById("canvas");
canvas.width = window.screen.width/2;
canvas.height = window.screen.height/2;
ctx = canvas.getContext('2d');
var pole = document.getElementById("pole");
W = canvas.width;
H = canvas.height;
//задаем массив скоростей по X
while(massivx.length<n){
a=Math.random()*2;
b=Math.random()*2;
position = surface(a, b);
if ((Math.exp(-(position.x*position.x)/(2*T))*(position.x*position.x))>position.y) {
massivx.push(position.x);
}
}
//задаем массив скоростей по Y
while (massivy.length<n){
a=Math.random()*2;
b=Math.random()*2;
position = surface(a, b);
if ((Math.exp(-(position.x*position.x)/(2*T))*(position.x*position.x))>position.y) {
massivy.push(position.x);
}
}
for (var i=0;i<n;i++)
{
var randomRadius = Math.random()*200;
var randomColor = 'rgb(' + Math.floor(0) + ','+ Math.floor(0) +
',0)';
var newCircle = new Circle(W/2-randomRadius,
H/2-randomRadius,
4,
randomColor,
massivx[i], //скорость vx
massivy[i] // скорость vy
);
circles.push(newCircle);
}
setInterval("draw()", 1000/66);
}
function draw(){ // START draw()
ctx.clearRect(0,0,W,H);
for (var i=0;i<n;i++) // START FOR
{
var tempCircle = circles[i];
tempCircle.x += tempCircle.vx;
tempCircle.y += tempCircle.vy;
ctx.fillRect(W/8, H-3, W/2.75, H-3);
if ((tempCircle.y+tempCircle.r) > H && (tempCircle.x+tempCircle.r) >
(W/8) && (tempCircle.x+tempCircle.r) < (W/2)){
delete tempCircle.x
delete tempCircle.y;
delete tempCircle.r;
delete tempCircle.color;
delete tempCircle.vx;
delete tempCircle.vy;
counter++;
pole.value=counter;
}
if ((tempCircle.y+tempCircle.r) > H || (tempCircle.y-tempCircle.r) <
0)
{
tempCircle.vy = -tempCircle.vy;
}
if ((tempCircle.x+tempCircle.r) > W || (tempCircle.x-tempCircle.r) <
0)
{
tempCircle.vx = -tempCircle.vx;
}
ctx.beginPath();
ctx.arc(tempCircle.x, tempCircle.y, tempCircle.r, 0, 2*Math.PI,
false);
ctx.fillStyle = tempCircle.color;
ctx.fill();
} // END FOR
} // END draw()
</script>
</body>