Теплопроводность с краевым условием — различия между версиями
Материал из Department of Theoretical and Applied Mechanics
(→Визуализация) |
(→Визуализация) |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 9: | Строка 9: | ||
{{#widget: Iframe | url=http://tm.spbstu.ru/htmlets/js2020/Fedorov/newpj4.html | width=500 | height=500 | border = 0 }} | {{#widget: Iframe | url=http://tm.spbstu.ru/htmlets/js2020/Fedorov/newpj4.html | width=500 | height=500 | border = 0 }} | ||
*Визуализация решения второго уравнения | *Визуализация решения второго уравнения | ||
− | {{#widget: Iframe | url=http://tm.spbstu.ru/htmlets/js2020/Fedorov/newpj6.html | width= | + | {{#widget: Iframe | url=http://tm.spbstu.ru/htmlets/js2020/Fedorov/newpj6.html | width=700 | height=700 | border = 0 }} |
== Код программы первого решения == | == Код программы первого решения == |
Текущая версия на 17:51, 1 июня 2020
Содержание
Авторы[править]
Цель работы[править]
Визуализация процесса теплопередачи в неравномерно нагретой пластине. Постановка задачи в приложенном файле.
Визуализация[править]
- Визуализация решения первого уравнения
- Визуализация решения второго уравнения
Код программы первого решения[править]
JS:
1 function main() {
2 var ctx = canvas_example.getContext('2d');
3 var s = 400;
4 var p = 400;
5 var a = 1;
6 var b = 4;
7 function fe(x,y) {
8 return Math.sin(b*x*Math.PI/p)*Math.sin(b*y*Math.PI/s);
9 }
10 var i = [];
11 var m = [];
12 for (var k = 1; k<1+b; k++) {
13 i[k] = [];
14 m[k] = [];
15 for (var n = 1; n<1+b; n++) {
16 var t = 0;
17 var L = 0;
18 for (var x = 1; x<1+p; x++) {
19 for (var y=1; y<1+s; y++) {
20 t = t + fe(x,y)*Math.sin(x*k*Math.PI/p)*Math.sin(y*n*Math.PI/s);
21 }
22 }
23 L = Math.PI*Math.PI*k*k/p/p+Math.PI*Math.PI*n*n/s/s;
24 i[k][n] = t*4/p/s;
25 if (Math.abs(i[k][n]) < 0.001) {
26 i[k][n] = 0;
27 }
28 var j = 1/Math.exp(a*a*L);
29 m[k][n] = j;
30 }
31 }
32 var dc = 255/2;
33 var r = 1;
34 var xn = 100;
35 var yn = 100;
36 var vr = 0;
37 function control() {
38
39 for (x=1; x<1+p; x++) {
40 for (y=1; y<1+s; y++) {
41 var ot=0;
42 var q=0;
43 for (k = 1; k<1+b; k++) {
44 for (n = 1; n<1+b; n++) {
45 ot = ot + i[k][n]*Math.sin(x*k*Math.PI/p)*Math.sin(y*n*Math.PI/s)*Math.pow(m[k][n],vr);
46 }
47 }
48 ot = (ot+1)*dc;
49 c = `rgb(${ot},${ot/2},${0})`;
50 ctx.fillStyle = c;
51 ctx.beginPath();
52 ctx.arc(x+xn, y+yn, r, 0, 0.5 * Math.PI);
53 ctx.fill();
54 }
55 }
56 vr = vr + 100;
57 }
58 setInterval(control, 300)
59 }
Код программы второго решения[править]
JS:
1
2 window.addEventListener('load', main, false);
3
4 function main() {
5 var ctx = canvas_example.getContext('2d');
6 var s = 400;
7 var p = 400;
8 var a = 1;
9 var b = 3;
10 function fe(x,y) {
11 return x*(x-s)*y*(y-p);
12 }
13 var i = [];
14 var m = [];
15 for (var k = 1; k<1+b; k++) {
16 i[k] = [];
17 m[k] = [];
18 for (var n = 1; n<1+b; n++) {
19 var t = 0;
20 var L = 0;
21 for (var x = 1; x<1+p; x++) {
22 for (var y=1; y<1+s; y++) {
23 t = t + fe(x,y)*Math.sin(x*k*Math.PI/p)*Math.sin(y*n*Math.PI/s);
24 }
25 }
26 L = Math.PI*Math.PI*k*k/p/p+Math.PI*Math.PI*n*n/s/s;
27 i[k][n] = t*4/p/s;
28 if (Math.abs(i[k][n]) < 0.001) {
29 i[k][n] = 0;
30 }
31 var j = 1/Math.exp(a*a*L);
32 m[k][n] = j;
33 }
34 }
35 var max = s*s*p*p/16;
36 var dc = 255/max;
37 var r = 1;
38 var xn = 100;
39 var yn = 100;
40 var vr = 0;
41 function control() {
42
43 for (x=1; x<1+p; x++) {
44 for (y=1; y<1+s; y++) {
45 var ot=0;
46 var q=0;
47 for (k = 1; k<1+b; k++) {
48 for (n = 1; n<1+b; n++) {
49 ot = ot + i[k][n]*Math.sin(x*k*Math.PI/p)*Math.sin(y*n*Math.PI/s)*Math.pow(m[k][n],vr);
50 }
51 }
52 ot = (ot+1)*dc;
53 c = `rgb(${ot},${ot/2},${0})`;
54 ctx.fillStyle = c;
55 ctx.beginPath();
56 ctx.arc(x+xn, y+yn, r, 0, 0.5 * Math.PI);
57 ctx.fill();
58 }
59 }
60 vr = vr + 1000;
61 }
62 setInterval(control, 300)
63 }