Непонятное поведение кода
Вложений: 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:18. |