不藉助Math函數求開根值 1、二分迭代法求n開根後的值 思路: left=0 right=n mid=(left+right)/2 比較mid^2與n大小 =輸出; >改變範圍,right=mid,mid重新計算; <改變範圍,left=mid,mid重新計算; 如此迴圈,不過只能是逼近,並不能完 ...
不藉助Math函數求開根值
1、二分迭代法求n開根後的值
思路: left=0 right=n mid=(left+right)/2
比較mid^2與n大小
=輸出;
>改變範圍,right=mid,mid重新計算;
<改變範圍,left=mid,mid重新計算;
如此迴圈,不過只能是逼近,並不能完全正確,常識
2、牛頓迭代法求n開根後的值
1)理論上來講,開根後的值為x,那麼x^2=n,即可以將其轉換為數學問題
2)令y=x^2-n,那麼只需要求方程與x軸正方向的焦點就可以得出想要的結果
3)我們作x=a與方程交於(a^2-n),求得他的切線與x軸的交點(a,a^2-n),a一般從n開始
4)然後求得該點切線與x軸交點,此處需要瞭解切線公式:記曲線為y=f(x),則在點(a,f(a))處的切線方程為:y=f'(a)(x-a)+f(a),
5)重覆步驟3,令x=步驟4的x值,如此迴圈即可逼近
有點繞,簡單來講就是設開根後的值為x,然後轉換成方程,通過求切線與x軸交點值不斷逼近方程的解,一般從x=n與方程交點的切線開始求,原因嘛:求根肯定是小於等於它自身的值,那麼從n開始就沒有疑問了,而且方程是曲線,方程一側所有點切線與x軸交點的值一定是全部大於或者小於解的,迭代下去只會逼近解
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
// 普通迭代法,initNum要開根的值 , 保留saveNum位小數,
function sqr(initNum,saveNum){
var leftNum=0;
var rightNum=initNum;
var middleNum=(leftNum+rightNum)/2;
for(var i=0;i<20;i++){
var result=middleNum*middleNum;
if(initNum===result){
middleNum=middleNum.toFixed(saveNum);
document.getElementById("result").value=middleNum;
}
else if (initNum>result){
leftNum=middleNum;
middleNum=(leftNum+rightNum)/2;
}
else{
rightNum=middleNum;
middleNum=(leftNum+rightNum)/2;
}
}
middleNum=middleNum.toFixed(saveNum);
document.getElementById("result").value=middleNum;
}
/*記曲線為y=f(x),則在點(a,f(a))處的切線方程為:y=f'(a)(x-a)+f(a)*/
//牛頓迭代法
function sqrt(initNum,saveNum) {
//當n>=1時,從n開始迭代;當n<1時,從1開始迭代
let result = initNum >= 1 ? initNum : 1;
// 當迭代值^2與原值之差滿足一個很小的差值時,即可認為逼近開根值
while(result * result - initNum > 1e-8)
result = 0.5 * (result + initNum / result);
result=result.toFixed(saveNum);
document.getElementById("result").value=result;
}
</script>
</head>
<body>
<div class="mui-input-row">
<label>請輸入</label>
<input type="text" placeholder="開根值" id="inuptNum">
</div>
<div class="mui-input-row">
<label>保留</label>
<input type="text" placeholder="幾位小數" id="saveNum">
</div>
<div class="mui-input-row">
<label>結果</label>
<input type="text" id="result">
</div>
<button type="button" class="mui-btn mui-btn-blue mui-btn-block" onclick="sqrt(parseInt(document.getElementById('inuptNum').value),parseInt(document.getElementById('saveNum').value))">計算</button>
</body>
</html>