Непонятное поведение кода
Вложений: 1
Есть задание написать страничку, которая ищет минимум функции методом деления интервала пополам. Все готово, но код ведет себя не адекватно (с моей точки зрения,
Вызывая 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> Вложение 4012 |
element.value : string
'1' : string + '2' : string -> '12', а не 3. С# бы вам сказал что тип не тот, а тут придётся самому думать. |
Было подозрение, но я думал type="number" все исправил. Надо парсить как инт? Я конечно проверю, когда код открою, но может вы быстрее меня исправите.
|
Надо парсить в int.
Ещё есть свойство valueAsNumber, но, как обычно, в ослике не работает. |
Большое спасибо
|
Часовой пояс GMT +3, время: 04:41. |