瑞格 牛頓迭代法求方程

2021-10-23 02:18:23 字數 2354 閱讀 8845

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附近任意找乙個實數作...