input輸入資料有多組,每組第一行為方程的序號。序號必須是1,2,3中的乙個。下面一行是兩個雙精度的實數,第乙個數是求解的初始值(初始值分別為:如果選方程(1),初始值在1.5附近,如果選方程(2),初始值在0.3附近,如果選方程(3),初始值在0.5附近;第二個數為求解精度,精度應在0.00001——0.00000001之間。牛頓迭代法解釋:如何通俗易懂地講解牛頓迭代法?output
對於每次輸入,輸出一行,共三個數,分別為:選擇方程的序號、指數表示的精度(保留兩位小數)、方程的根(保留5 位小數)
sample input
1 1.5 1e-6
2 0.3 1e-7
3 0.5 1e-8
output
1 1.00e-06 1.46557
2 1.00e-07 0.33767
3 1.00e-08 0.56714
1.首先搞懂題意,簡而言之就是給你乙個xn+1與xn的關係,根據所給x0推出符合精度要求的xn+1。
2.題目給了三個方程,根據已知條件將方程代入公式並進行化簡,得到最簡的根的表示式:
3.精度問題:此處的精度其實指的是xn+1與xn之差的絕對值,只要滿足此值小於所給精度即可。
4.輸出問題:題目要求要以珂學計數法來顯示輸出,所以用%.2e輸出即可(2是為了補零,本地測試輸出1.00e-006,但是瑞格測試輸出1.00e-06,原因咱也不知道)
5.**思路:
1.這道題不同指令來實現的過程很類似,故可以用乙個函式指標指向不同表示式來高效解題(硬用指標 )。
2.根據輸入指令的不同,寫出不同的函式計算式,並通過定義的函式指標呼叫。
3.若xn+1與xn之差的絕對值》所給精度值則繼續計算下乙個差值,否則認為找到了符合的xn,跳出。
4.3過程可通過迴圈也可通過遞迴實現。
簡單迴圈版
#include
#include
#include
double xx,gap;
//用全域性變數xx來儲存最後結果xn
voidf1(
double x,
double m)
voidf2(
double x,
double m)
voidf3(
double x,
double m)
intmain()
//根據輸入引數不同,函式指標指向的函式不同,從而實現多種呼叫
if(f==2)
if(f==3)
p(n,m)
; gap=
fabs
(n-xx)
;while
(gap>m)
//若xn+1與xn之差的絕對值》所給精度值則繼續計算下乙個差值
printf
("%d %.2e %.5lf\n"
,f,m,xx);}
return0;
}
未優化的復讀 但好實現 的遞迴寫法
#include
#include
#include
double xx,gap;
doublef1(
double x,
double m)
//遞迴實現公式,找到滿足解
else
}doublef2(
double x,
double m)
else
}doublef3(
double x,
double m)
else
}int
main()
if(f==2)
if(f==3)
p(n,m)
;printf
("%d %.2e %.5lf\n"
,f,m,xx);}
return0;
}
牛頓迭代法求方程解
牛頓迭代法 newton s method 又稱為牛頓 拉夫遜方法 newton raphson method 它是牛頓在17世紀提出的一種在實數域和複數域上近似求解方程的方法。多數方程不存在求根公式,因此求精確根非常困難,甚至不可能,從而尋找方程的近似根就顯得特別重要。方法使用函式f x 的泰勒級...
1 6 牛頓迭代法求方程的根
問題描述 編寫用牛頓迭代法求方程根的函式。方程為 a x 3 b x 2 c x d 0,係數a,b,c,d由主函式輸入。求x在1附近的乙個實根。求出根後,由主函式輸出。如下 include float slove int modulus 0pow,int modulus 1pow,int modu...
牛頓迭代法求多元方程近似根
問題.牛頓迭代法求ax 3 bx 2 cx d 0在1附近的根。係數由使用者自己輸入 因為此方法本身是數學問題這裡不做討論也無須討論。進入我們程式設計的主題。記住此法核心的公式 x x0 f x0 f x0 我們令x1 f x0 x2 f x0 這樣寫起來簡潔明瞭。步驟 1 在1附近任意找乙個實數作...