函式位址做函式引數和相關牛頓法二分法求解方程例項

2021-10-24 22:23:55 字數 2204 閱讀 8913

函式位址做引數的意義是為了實現各個函式對同乙個操作步驟的復用

實現父函式對子函式的復用(注意不是呼叫)

他的定義方法是在父函式的引數列表中定義函式名為指標的的子函式抽象原型(注意這裡定義的函式返回值和引數必須要和子函式一致)

它的實現方法是將子函式首位址作為指標傳遞到引數中

1.求函式f(x

)f(x)

f(x)

,導數為f′(

x)

f'(x)

f′(x

)2.選擇∀

\forall∀xx

x,不妨設x=−

100x=-100

x=−100

,重複計算x=x

−x=x-

x=x−

f (x

)f′(

x)

\cfrac

f′(x)f

(x)​

直到f(x)<ε,所求x

xx即為方程的解。

即可寫出答案。

求解方程:①2x3

−4x2

+3x−

6=

02x^3-4x^2+3x-6=0

2x3−4x

2+3x

−6=0

\qquad\qquad

②x 3−

4x2+

3x−6

=0

x^3-4x^2+3x-6=0

x3−4x2

+3x−

6=0

#include

#include

#define epsilon 1e-6

//定義數學符號ε

doublef(

double x)

//定義子函式f(x)

double

f_prime

(double x)

//f'(x)

doubleh(

double x)

//定義子函式h(x)

double

h_prime

(double x)

//h'(x)

double

newton

(double

(*fp)

(double),

double

(*fp_prime)

(double))

return x;

}//牛頓法操作

intmain()

若事先知道函式f(x

)f(x)

f(x)

零點所在區間[m,n],

計算f (m

)⋅f(

(m+n

)/2)

f(m)·f((m+n)/2)

f(m)⋅f

((m+

n)/2

)和f(n)

⋅f((

m+n)

/2

)f(n)·f((m+n)/2)

f(n)⋅f

((m+

n)/2

),選擇為負值的區間為新區間,繼續計算知道區間的大小|m-n|<ε,此時(m-n)/2即為所求零點

#include

#include

#define epsilon 1e-7

//定義ε

double

bisection

(int p,

int q,

double

(*func)

(int

,int

,double))

;doublef(

int p,

int q,

double x)

;int

main()

double

bisection

(int p,

int q,

double

(*func)

(int

,int

,double))

else

elseif(

f(p,q,n)*f

(p,q,temp)

<0)

else}}

}}doublef(

int p,

int q,

double x)

函式指標做函式引數

函式指標是指向函式的指標變數,即本質是乙個指標變數。int f int x 宣告乙個函式指標 f func 將func函式的首位址賦給指標f 指向函式的指標包含了函式的位址,可以通過它來呼叫函式。宣告格式如下 型別說明符 函式名 引數 其實這裡不能稱為函式名,應該叫做指標的變數名。這個特殊的指標指向...

函式指標做函式引數

define crt secure no warnings include include include int myadd int a,int b 子任務的實現者 int myadd2 int a,int b 子任務的實現者 int myadd3 int a,int b 子任務的實現者 int ...

函式指標 函式指標做函式引數

陣列型別如何定義 typedef int myarray 5 這是我定義的陣列型別,這個型別的名字是myarray,它的本質是乙個記憶體固定大小模板 myarray arr arr是乙個陣列 大小為5 型別的變數。可以這樣訪問arr 0 arr 1 arr 2 typedef int myp 5 定...