這是一個很典型的不動點問題:設 則原方程可表為 並且 很好地滿足不動點定理的條件: 於是隻要不停地迭代就可得到結論: 選取初值 ,迭代 次後誤差不超過 (見上圖). 如圖。 應該只能求數值解 首先確定一個範圍 畫個圖,看到 和 交點在0.7左右。直接迭代: f(x) =sin(cos(x)) x = 0.7; error = 1e-6 While (true) { y = f(x); if (abs((x-y)/x) &< error) break x = y } return x 牛頓法迭代f(x)=sin(cos(x))-x; df(x)=-1 - cos(cos(x)) sin(x); x0 = 0.7; error = 1e-6; while (true): { x1 = x0-f(x0)/df(x0); if (abs((x1-x0)/x1) &< error) break; x0 = x1; } return x1; 都收斂到0.69482,但是牛頓法更快一點 此方程只能近似解,右-1&得cosX&>0→sin&>0,→0&(等號均不可取,)且左是減函數,sin1→cos1, 右是增函數。,0→1,用插值無限逼近,唯一解:x=0.69481969……沒公式解的: 推薦閱讀:
這是一個很典型的不動點問題:設
則原方程可表為
並且 很好地滿足不動點定理的條件:
於是隻要不停地迭代就可得到結論:
選取初值 ,迭代 次後誤差不超過 (見上圖).
應該只能求數值解
首先確定一個範圍
畫個圖,看到 和 交點在0.7左右。
直接迭代:
f(x) =sin(cos(x)) x = 0.7; error = 1e-6 While (true) { y = f(x); if (abs((x-y)/x) &< error) break x = y } return x
牛頓法迭代
f(x)=sin(cos(x))-x; df(x)=-1 - cos(cos(x)) sin(x);
x0 = 0.7; error = 1e-6; while (true): { x1 = x0-f(x0)/df(x0); if (abs((x1-x0)/x1) &< error) break; x0 = x1; } return x1;
都收斂到0.69482,但是牛頓法更快一點
此方程只能近似解,右-1&
得cosX&>0→sin&>0,→0&
(等號均不可取,)
且左是減函數,sin1→cos1,
右是增函數。,0→1,
用插值無限逼近,
唯一解:x=0.69481969……
沒公式解的: