Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.10.2018, 23:56
Новичок на форуме
Отправить личное сообщение для Torq Посмотреть профиль Найти все сообщения от Torq
 
Регистрация: 16.10.2018
Сообщений: 3

Непонятное поведение кода
Есть задание написать страничку, которая ищет минимум функции методом деления интервала пополам. Все готово, но код ведет себя не адекватно (с моей точки зрения, программист на C#). Я вообще не могу понять, в чем проблема, может гуру подскажут. Надеюсь на вашу помощь.
Вызывая Bisection() выводит один результат, а Calculate() второй, но итераций одинаковое количество. Calculate() внутри себя вызывает Bisection().
Область поиска бага - функции Calculate() и Bisection(-6, 6, 0.01). Для вызова Calculate() из консоли, заполните страничку значениями -6, 6, 0.01 . Кнопки работают.
function F(x) {
    return ((6 * x + 3) ** 2 - 2 * x - 1)
}

function Calc_point_left(a, b) {
    return a + ((b - a) / 4)
}

function Calc_point_right(a, b) {
    return b - ((b - a) / 4)
}

function Bisection(a, b, tol) {
    k = 0
    Xk = (a + b) / 2
    while (Math.abs((b - a)) > tol) {
        k += 1
        Yk = Calc_point_left(a, b)
        Zk = Calc_point_right(a, b)
        if (F(Yk) < F(Xk)) {
            b = Xk
            Xk = Yk
        }
        else {
            if (F(Zk) < F(Xk)) {
                a = Xk
                Xk = Zk
            }
            else {
                a = Yk
                b = Zk
            }
        }
    }
    //alert([Xk, k]);//контрольный алерт
    return [Xk, k]
}

function Calculate(){
    var rightPoint = document.getElementById('idRightPoint').value;
    alert(rightPoint);
    var leftPoint = document.getElementById('idLeftPoint').value;
    alert(leftPoint);
    var accuracy = document.getElementById('idAccuracy').value;
    alert(accuracy);
    var array =  Bisection(leftPoint, rightPoint, accuracy);
    var output = "Минимум функции на отрезке [" + leftPoint + ";" + rightPoint + "] равен: " + array[0] + "\nбыло выполнено " + array[1] + " вычислений функции";
    alert(array);
    alert(output);
}


<html>

<head>
  <title></title>
  <meta content="">
  <style></style>
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO"
    crossorigin="anonymous">
  <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy"
    crossorigin="anonymous"></script>
  <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
    crossorigin="anonymous"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49"
    crossorigin="anonymous"></script>
</head>

<body>

  <div class="container">
    <div class="row">
      <div class="col-3"></div>
      <div class="col-6 text-center">
        </br>
        <div class="input-group">
          <div class="input-group-prepend">
            <span class="input-group-text">Левая и правая границы интервала</span>
          </div>
          <input type="number" id="idLeftPoint" aria-label="left point" class="form-control">
          <input type="number" id="idRightPoint" aria-label="right point" class="form-control">
        </div>
        </br>
        <div class="input-group">
          <div class="input-group-prepend">
            <span class="input-group-text">Точность вычислений</span>
          </div>
          <input type="number" step="0.01" id="idAccuracy" aria-label="accuracy" class="form-control">
        </div>
        </br>
        <button type="button" class="btn btn-success" onclick="Calculate();">Вычислить</button>
        <button type="button" class="btn btn-success" onclick="Bisection(-6, 6, 0.01);">Вычислить контрольный</button>
      </div>
      <div class="col-3"></div>
    </div>
  </div>

  <script src="scripts/main.js"></script>

</body>

</html>


BisectionMethodProgram.zip
Ответить с цитированием
  #2 (permalink)  
Старый 17.10.2018, 01:46
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,577

element.value : string
'1' : string + '2' : string -> '12', а не 3.

С# бы вам сказал что тип не тот, а тут придётся самому думать.
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 17.10.2018, 08:59
Новичок на форуме
Отправить личное сообщение для Torq Посмотреть профиль Найти все сообщения от Torq
 
Регистрация: 16.10.2018
Сообщений: 3

Было подозрение, но я думал type="number" все исправил. Надо парсить как инт? Я конечно проверю, когда код открою, но может вы быстрее меня исправите.
Ответить с цитированием
  #4 (permalink)  
Старый 17.10.2018, 09:10
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,577

Надо парсить в int.
Ещё есть свойство valueAsNumber, но, как обычно, в ослике не работает.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 17.10.2018, 17:26
Новичок на форуме
Отправить личное сообщение для Torq Посмотреть профиль Найти все сообщения от Torq
 
Регистрация: 16.10.2018
Сообщений: 3

Большое спасибо, пошел смотреть как поставить typescript.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятное поведение скрипта eucalipt jQuery 15 14.10.2014 23:10
Непонятное поведение <textarea> nkl Элементы интерфейса 2 22.05.2014 14:13
Непонятное поведение - console.log Artyom Общие вопросы Javascript 20 28.11.2013 20:50
Непонятное поведение в Chrome main.c Opera, Safari и др. 3 10.10.2013 18:52
Непонятное поведение бордеров antserg (X)HTML/CSS 14 14.06.2013 09:10