Текущая версия |
Ваш текст |
Строка 7: |
Строка 7: |
| Группа 13632/1 Кафедра Теоретической механики | | Группа 13632/1 Кафедра Теоретической механики |
| | | |
− | Файл:[[http://tm.spbstu.ru/htmlets/Durnev_AA/Kursovaya.docx]]
| + | {{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Durnev_AA/home.html |width=1000 |height=1500 |border=0 }} |
− | | |
− | {{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Durnev_AA/home.html |width=1000 |height=1000 |border=0 }} | |
| | | |
| ==Код программы== | | ==Код программы== |
Строка 16: |
Строка 14: |
| <syntaxhighlight lang="javascript" line start="1" enclose="div"> | | <syntaxhighlight lang="javascript" line start="1" enclose="div"> |
| | | |
− | //Метод Монте-Карло | + | //Монте-Карло |
− | | |
| window.addEventListener("load", program_code, false); | | window.addEventListener("load", program_code, false); |
| function program_code() { | | function program_code() { |
Строка 205: |
Строка 202: |
| } | | } |
| } | | } |
− |
| |
− | //Метод трапеций
| |
− | window.addEventListener("load", program_code, false);
| |
− | function program_code() {
| |
− |
| |
− | var ctx = canvas_example.getContext("2d");
| |
− | var w = canvas_example.width;
| |
− | var h = canvas_example.height;
| |
− |
| |
− | var flag = false;
| |
− | var a;
| |
− | var b;
| |
− | var func;
| |
− | var max = -100000;
| |
− | var min = 100000;
| |
− | var scale, scale1, scale2;
| |
− | var x = [];
| |
− | var y = [];
| |
− | var result = 0;
| |
− |
| |
− | ctx.translate(w/2, h/2);
| |
− |
| |
− | //функция
| |
− | function f(x){
| |
− | return (eval(func));
| |
− | }
| |
− |
| |
− | function input(){
| |
− |
| |
− | a = parseFloat(document.getElementById("a1").value);
| |
− | b = parseFloat(document.getElementById("b1").value);
| |
− | func = document.getElementById("fun").value;
| |
− | number = parseFloat(document.getElementById('qual').value);
| |
− |
| |
− | //минимум и максимум
| |
− | for (var i = a; i < b; i+=0.001){
| |
− |
| |
− | //максимум
| |
− | if (f(i) > max){
| |
− | max = f(i);
| |
− | }
| |
− |
| |
− | //минимум
| |
− | if (f(i) < min){
| |
− | min = f(i);
| |
− | }
| |
− | }
| |
− |
| |
− | //масштаб
| |
− | scaley = 100/(Math.abs(max) + Math.abs(min));
| |
− |
| |
− | if (Math.abs(b) >= Math.abs(a)){
| |
− | scalex = 250/b * 0.9;
| |
− | }
| |
− |
| |
− | if (Math.abs(b) < Math.abs(a)){
| |
− | scalex = 250/Math.abs(a) * 0.9;
| |
− | }
| |
− |
| |
− | //сдвиг
| |
− | dx = (b + a)/2;
| |
− | dy = (max + min)/2;
| |
− | dt = (b - a)/number;
| |
− |
| |
− | //разбиение
| |
− | for (var i = a; i < b + 1/2 * dt; i += dt){
| |
− | x.push(i);
| |
− | y.push(f(i));
| |
− | }
| |
− | }
| |
− |
| |
− | function calculation(){
| |
− | for (var i = 0; i < number; i++){
| |
− |
| |
− | if (f(x[i]) >= 0 && f(x[i+1]) >= 0){
| |
− | result += (x[i + 1] - x[i]) * (Math.abs(y[i]) + Math.abs(y[i + 1])) * 0.5;
| |
− | }
| |
− |
| |
− | if (f(x[i]) < 0 && f(x[i+1]) < 0){
| |
− | result -= (x[i + 1] - x[i]) * (Math.abs(y[i]) + Math.abs(y[i + 1])) * 0.5;
| |
− | }
| |
− |
| |
− | else{
| |
− | result += 0;
| |
− | }
| |
− |
| |
− | }
| |
− | }
| |
− |
| |
− | function draw(){
| |
− |
| |
− | //оси
| |
− | ctx.beginPath();
| |
− | ctx.moveTo(0 - dx * scalex, -h/2);
| |
− | ctx.lineTo(0 - dx * scalex, h/2);
| |
− | ctx.moveTo(w/2 , 0 + dy * scaley);
| |
− | ctx.lineTo(-w/2 , 0 + dy * scaley);
| |
− | ctx.stroke();
| |
− |
| |
− | ctx.font = '10px Arial';
| |
− | ctx.strokeText('1', (1 - dx) * scalex, (-0.1 + dy) * scaley);
| |
− | ctx.strokeText('1', (0.1 -dx) * scalex, (-1 + dy) * scaley);
| |
− |
| |
− | //кривая
| |
− | ctx.beginPath();
| |
− | for (var i = a; i < b; i+=0.01){
| |
− | ctx.moveTo((i - dx) * scalex, (-f(i) + dy) * scaley);
| |
− | ctx.lineTo((i + 0.01 - dx) * scalex, (-f(i + 0.01) + dy) * scaley);
| |
− | }
| |
− | ctx.stroke();
| |
− |
| |
− |
| |
− | ctx.strokeStyle = 'red';
| |
− |
| |
− | //разбиение
| |
− | ctx.beginPath();
| |
− | for (var i = 0; i < number + 1; i++){
| |
− | ctx.moveTo((x[i] - dx) * scalex, dy * scaley);
| |
− | ctx.lineTo((x[i] - dx) * scalex, (-y[i] + dy) * scaley)
| |
− | }
| |
− | ctx.stroke();
| |
− |
| |
− | ctx.beginPath();
| |
− | for(var i = 0; i < number; i++){
| |
− | ctx.moveTo((x[i] - dx) * scalex, (-y[i] + dy) * scaley);
| |
− | ctx.lineTo((x[i+1] - dx) * scalex, (-y[i+1] + dy) * scaley);
| |
− | }
| |
− | ctx.stroke();
| |
− |
| |
− | }
| |
− |
| |
− |
| |
− | knopka.onclick = function(){
| |
− |
| |
− | if (flag){
| |
− | location.reload();
| |
− | }
| |
− |
| |
− | flag = true;
| |
− | knopka.value = 'Очистить';
| |
− | input();
| |
− | calculation();
| |
− | result1.innerHTML = Math.round(result * 100)/100;
| |
− | draw();
| |
− | }
| |
− | }
| |
− |
| |
− |
| |
− | //Метод прямоугольников
| |
− | window.addEventListener("load", program_code, false);
| |
− | function program_code() {
| |
− |
| |
− | var ctx = canvas_example.getContext("2d");
| |
− | var w = canvas_example.width;
| |
− | var h = canvas_example.height;
| |
− |
| |
− | var flag = false;
| |
− | var a;
| |
− | var b;
| |
− | var func;
| |
− | var max = -100000;
| |
− | var min = 100000;
| |
− | var scale, scale1, scale2;
| |
− | var x = [];
| |
− | var y = [];
| |
− | var result = 0;
| |
− | var dt;
| |
− | var dx = 0;
| |
− | var dy = 0;
| |
− |
| |
− | ctx.translate(w/2, h/2);
| |
− |
| |
− | //функция
| |
− | function f(x){
| |
− | return (eval(func));
| |
− | }
| |
− |
| |
− | function input(){
| |
− |
| |
− | a = parseFloat(document.getElementById("a1").value);
| |
− | b = parseFloat(document.getElementById("b1").value);
| |
− | func = document.getElementById("fun").value;
| |
− | var number = parseFloat(document.getElementById('qual').value);
| |
− | dx = (b - a)/number;
| |
− |
| |
− | //минимум и максимум
| |
− | for (var i = a; i < b; i+=0.001){
| |
− |
| |
− | //максимум
| |
− | if (f(i) > max){
| |
− | max = f(i);
| |
− | }
| |
− |
| |
− | //минимум
| |
− | if (f(i) < min){
| |
− | min = f(i);
| |
− | }
| |
− | }
| |
− |
| |
− | //масштаб
| |
− | scaley = 100/(Math.abs(max) + Math.abs(min));
| |
− |
| |
− | if (Math.abs(b) >= Math.abs(a)){
| |
− | scalex = 250/b * 0.9;
| |
− | }
| |
− |
| |
− | if (Math.abs(b) < Math.abs(a)){
| |
− | scalex = 250/Math.abs(a) * 0.9;
| |
− | }
| |
− |
| |
− | //сдвиг
| |
− | dx = (b + a)/2;
| |
− | dy = (max + min)/2;
| |
− | dt = (b - a)/number;
| |
− |
| |
− | }
| |
− |
| |
− | function calculation(){
| |
− |
| |
− | if (menu.value == 'first'){
| |
− | console.log('a');
| |
− | for (var i = a; i < b; i += dt){
| |
− |
| |
− | if (f(i) >= 0 & f(i + dt) >= 0){
| |
− | result += Math.abs(f(i))*dt;
| |
− | }
| |
− |
| |
− | if (f(i) < 0 & f(i + dt) < 0){
| |
− | result -= Math.abs(f(i))*dt;
| |
− | }
| |
− |
| |
− | else{
| |
− | result += 0;
| |
− | }
| |
− |
| |
− | }
| |
− | }
| |
− |
| |
− | if (menu.value == 'second'){
| |
− | for (var i = a + dt; i < b; i += dt){
| |
− | if (f(i) >= 0 & f(i + dt) >= 0){
| |
− | result += Math.abs(f(i))*dt;
| |
− | }
| |
− |
| |
− | if (f(i) < 0 & f(i + dt) < 0){
| |
− | result -= Math.abs(f(i))*dt;
| |
− | }
| |
− |
| |
− | else{
| |
− | result += 0;
| |
− | }
| |
− | }
| |
− | }
| |
− |
| |
− | if (menu.value == 'third'){
| |
− | for (var i = a + dt/2 ; i < b; i += dt){
| |
− | if (f(i) >= 0 & f(i + dt) >= 0){
| |
− | result += Math.abs(f(i))*dt;
| |
− | }
| |
− |
| |
− | if (f(i) < 0 & f(i + dt) < 0){
| |
− | result -= Math.abs(f(i))*dt;
| |
− | }
| |
− |
| |
− | else{
| |
− | result += 0;
| |
− | }
| |
− | }
| |
− | }
| |
− |
| |
− | }
| |
− |
| |
− | function draw(){
| |
− |
| |
− | //оси
| |
− | ctx.beginPath();
| |
− | ctx.moveTo(0 - dx * scalex, -h/2);
| |
− | ctx.lineTo(0 - dx * scalex, h/2);
| |
− | ctx.moveTo(w/2 , 0 + dy * scaley);
| |
− | ctx.lineTo(-w/2 , 0 + dy * scaley);
| |
− | ctx.stroke();
| |
− |
| |
− | ctx.font = '10px Arial';
| |
− | ctx.strokeText('1', (1 - dx) * scalex, (-0.1 + dy) * scaley);
| |
− | ctx.strokeText('1', (0.1 -dx) * scalex, (-1 + dy) * scaley);
| |
− |
| |
− | //кривая
| |
− | ctx.beginPath();
| |
− | for (var i = a; i < b; i+=0.01){
| |
− | ctx.moveTo((i - dx) * scalex, (-f(i) + dy) * scaley);
| |
− | ctx.lineTo((i + 0.01 - dx) * scalex, (-f(i + 0.01) + dy) * scaley);
| |
− | }
| |
− | ctx.stroke();
| |
− |
| |
− | ctx.strokeStyle = 'red';
| |
− |
| |
− | if (menu.value == 'first'){
| |
− | for (var i = a; i < b - dt/2; i += dt){
| |
− | if(f(i) >= 0){
| |
− | ctx.strokeRect((i - dx) * scalex, (-f(i) + dy) * scaley, dt * scalex, Math.abs(f(i)) * scaley);
| |
− | }
| |
− | else{
| |
− | ctx.strokeRect((i - dx) * scalex, (dy) * scaley, dt * scalex, Math.abs(f(i)) * scaley);
| |
− | }
| |
− | }
| |
− | }
| |
− |
| |
− | if (menu.value == 'second'){
| |
− | for (var i = a + dt; i < b + dt/2; i += dt){
| |
− | if(f(i) >= 0){
| |
− | ctx.strokeRect((i - dx) * scalex, (-f(i) + dy) * scaley, dt * scalex, Math.abs(f(i)) * scaley);
| |
− | }
| |
− | else{
| |
− | ctx.strokeRect((i - dx) * scalex, (dy) * scaley, dt * scalex, Math.abs(f(i)) * scaley);
| |
− | }
| |
− | }
| |
− | }
| |
− |
| |
− | if (menu.value == 'third'){
| |
− | for (var i = a + dt/2; i < b + dt/4; i += dt){
| |
− | if(f(i) >= 0){
| |
− | ctx.strokeRect((i - dt/2 - dx) * scalex, (-f(i) + dy) * scaley, dt * scalex, Math.abs(f(i)) * scaley);
| |
− | }
| |
− | else{
| |
− | ctx.strokeRect((i - dt/2 - dx) * scalex, (dy) * scaley, dt * scalex, Math.abs(f(i)) * scaley);
| |
− | }
| |
− | }
| |
− | }
| |
− |
| |
− | }
| |
− |
| |
− | knopka.onclick = function(){
| |
− |
| |
− |
| |
− | if (flag){
| |
− | location.reload();
| |
− | }
| |
− |
| |
− | flag = true;
| |
− | knopka.value = 'Очистить';
| |
− | input();
| |
− | calculation();
| |
− | draw();
| |
− | result1.innerHTML = Math.round(result * 100)/100;
| |
− |
| |
− | }
| |
− | }
| |
− |
| |
− |
| |
− | </syntaxhighlight>
| |
− |
| |
− | </div>
| |