Колебание системы с двумя степенями свободы — различия между версиями
(→Решение) |
(→Решение) |
||
Строка 9: | Строка 9: | ||
{{#widget:Iframe |url= http://tm.spbstu.ru/htmlets/SakevichTS/K2.html |width=1250 |height=850}} | {{#widget:Iframe |url= http://tm.spbstu.ru/htmlets/SakevichTS/K2.html |width=1250 |height=850}} | ||
+ | |||
+ | '''Текст программы на языке JavaScript:''' <div class="mw-collapsible-content"> | ||
+ | window.addEventListener("load", program_code, false) ; | ||
+ | function program_code(){ | ||
+ | var ctx=canvas_example.getContext("2d"); | ||
+ | var w=canvas_example.width; | ||
+ | var l=canvas_example.height; | ||
+ | ctx.strokeRect(0,0,w,l); | ||
+ | function draw2() //оси | ||
+ | { | ||
+ | Y0=250; | ||
+ | X0=160; | ||
+ | ctx.strokeStyle = 'lightgrey'; | ||
+ | ctx.beginPath(); | ||
+ | ctx.moveTo(0, Y0); | ||
+ | ctx.lineTo(canvas_example.width, Y0); | ||
+ | ctx.moveTo(X0, 0); | ||
+ | ctx.lineTo(X0, canvas_example.height); | ||
+ | ctx.stroke(); | ||
+ | ctx.fillStyle = 'black'; | ||
+ | ctx.font = "20px Times"; | ||
+ | ctx.fillText("0",163, 330); | ||
+ | ctx.font = "italic 20px Times"; | ||
+ | ctx.fillText("t",1150,330); | ||
+ | ctx.fillText("x",150, 20); | ||
+ | } | ||
+ | draw2(); | ||
+ | function count() | ||
+ | { | ||
+ | var m1 = parseFloat(input_m1.value); | ||
+ | var m2 = parseFloat(input_m2.value); | ||
+ | var R= parseFloat(input_R.value); | ||
+ | var l= parseFloat(input_l.value); | ||
+ | var q0=parseFloat(input_q0.value); | ||
+ | var v0= parseFloat(input_v0.value); | ||
+ | var ix= parseFloat(input_ix.value); | ||
+ | var c1= parseFloat(input_c1.value); | ||
+ | var c2= parseFloat(input_c2.value); | ||
+ | var t= parseFloat(input_t.value) | ||
+ | |||
+ | var a1=0.75*m2; | ||
+ | var a2=m1*ix*ix; | ||
+ | |||
+ | var Q=9.8*m1*l+c1*l*l+4*c2*R*R; | ||
+ | var P=2.45*m2/R+c2; | ||
+ | var G=-4*c2*R; | ||
+ | |||
+ | var k1=(a1*P+a2*Q +Math.sqrt((a1*P+a2*Q)*(a1*P+a2*Q)-4*a1*a2*(Q*P-G*G)))/(2*a1*a2); | ||
+ | var k2=(a1*P+a2*Q -Math.sqrt((a1*P+a2*Q)*(a1*P+a2*Q)-4*a1*a2*(Q*P-G*G)))/(2*a1*a2); | ||
+ | |||
+ | var A1=q0; | ||
+ | var A2=v0/k1 | ||
+ | |||
+ | dt=0.02; | ||
+ | q=[]; | ||
+ | q[0]=q0; | ||
+ | n=t/dt; | ||
+ | var T=0; | ||
+ | for (var i=0; i<n; i++) { | ||
+ | T+=dt; | ||
+ | |||
+ | q[i]=10*(A1*Math.sin(k1*T)+A2*Math.sin(k2*T)); | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | function draw() | ||
+ | { | ||
+ | ctx.strokeRect(0,0,w,l); | ||
+ | draw2(); | ||
+ | ctx.strokeStyle = 'black'; | ||
+ | ctx.beginPath() | ||
+ | for (var i=0; i<n; i++) { | ||
+ | ctx.lineTo((i/(n-1)*w)+X0,(l-q[i]*l)/50+Y0); | ||
+ | ctx.stroke(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | button_alert.onclick=function(){ | ||
+ | ctx.clearRect(0,0,w,l); | ||
+ | count(); | ||
+ | draw(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </div> |
Версия 01:16, 31 мая 2018
Выполнила Сакевич Татьяна
Формулировка задачи
Определить частоты малых свободных колебаний и формы главных колебаний системы с двумя степенями свободы, пренебрегая силами сопротивления, массами пружин и моментами инерции скручиваемых валов.
Решение
[ Скачать курсовую работу]
Текст программы на языке JavaScript:
window.addEventListener("load", program_code, false) ;
function program_code(){ var ctx=canvas_example.getContext("2d");
var w=canvas_example.width; var l=canvas_example.height; ctx.strokeRect(0,0,w,l); function draw2() //оси { Y0=250; X0=160; ctx.strokeStyle = 'lightgrey';
ctx.beginPath(); ctx.moveTo(0, Y0); ctx.lineTo(canvas_example.width, Y0); ctx.moveTo(X0, 0); ctx.lineTo(X0, canvas_example.height); ctx.stroke(); ctx.fillStyle = 'black'; ctx.font = "20px Times"; ctx.fillText("0",163, 330); ctx.font = "italic 20px Times"; ctx.fillText("t",1150,330); ctx.fillText("x",150, 20);
} draw2(); function count() { var m1 = parseFloat(input_m1.value); var m2 = parseFloat(input_m2.value); var R= parseFloat(input_R.value); var l= parseFloat(input_l.value); var q0=parseFloat(input_q0.value); var v0= parseFloat(input_v0.value); var ix= parseFloat(input_ix.value); var c1= parseFloat(input_c1.value); var c2= parseFloat(input_c2.value); var t= parseFloat(input_t.value)
var a1=0.75*m2; var a2=m1*ix*ix;
var Q=9.8*m1*l+c1*l*l+4*c2*R*R; var P=2.45*m2/R+c2; var G=-4*c2*R;
var k1=(a1*P+a2*Q +Math.sqrt((a1*P+a2*Q)*(a1*P+a2*Q)-4*a1*a2*(Q*P-G*G)))/(2*a1*a2); var k2=(a1*P+a2*Q -Math.sqrt((a1*P+a2*Q)*(a1*P+a2*Q)-4*a1*a2*(Q*P-G*G)))/(2*a1*a2);
var A1=q0; var A2=v0/k1
dt=0.02; q=[]; q[0]=q0; n=t/dt; var T=0; for (var i=0; i<n; i++) { T+=dt;
q[i]=10*(A1*Math.sin(k1*T)+A2*Math.sin(k2*T));
}
} function draw() { ctx.strokeRect(0,0,w,l); draw2(); ctx.strokeStyle = 'black'; ctx.beginPath() for (var i=0; i<n; i++) { ctx.lineTo((i/(n-1)*w)+X0,(l-q[i]*l)/50+Y0); ctx.stroke(); } }
button_alert.onclick=function(){ ctx.clearRect(0,0,w,l); count(); draw();
}
}