-
切線法
鎖定
- 中文名
- 切線法
- 外文名
- tangents method
- 別 名
- 牛頓法
- 類 型
- 計算方法
- 領 域
- 數學
- 應用學科
- 數學
切線法方程求根方法
上述切線與
軸的交點為:
上面的迭代公式就是切線法的公式,不難看出這個公式實際就是牛頓公式。
(1)
(2)
;
(3)
在
上恆正;
(4) 初值
應滿足
。
切線法收斂性的證明
若(1)函數
在
上連續,且
;
(2)在區間
上,
,
。
則(1)方程
在區間
上存在唯一的實數根
;
(2)取初值
,由迭代公式
(
)定義的數列
一定收斂,且
。
即曲線在過
點的切線的上方,所以切線與
軸的交點
必滿足
,又因為
即
,根據單調性可知
。
則
,根據函數及導數的連續性可知
,
。
在迭代式
兩邊同求極限,可得
。從而可得
。
根據方程根的唯一性,可以斷定
就是方程
在區間
上存在唯一的實數根
。
切線法計算實例
切線法求方程實根
求方程
的實根。
由零點定理知原方程在
內有實根,
那麼迭代公式為:
取初始值
,迭代序列如下:
x0 | 1 |
x1 | 0.75036386784024 |
x2 | 0.73911289091136 |
x3 | 0.73908513338528 |
x4 | 0.73908513321516 |
x5 | 0.73908513321516 |
由此得到方程的實根為x=0.73908513321516...
上例的c語言程序代碼為:
#include "math.h" #include "stdio.h" #define ABS(a) ((a)<0?-(a):(a)) static double f(double x) { return x-cos(x); } static double df(double x) { return 1+sin(x); } void main() { int i; double x0=1, x1, err=1e-14; for(i=1; i<50; i++) { x1=x0-f(x0)/df(x0); printf("x[%d]=%.14f\n", i, x1); if(ABS(x1-x0)<err) break; x0=x1; } }
切線法任意數開n次方
設
,那麼
,
從而迭代公式為:
舉個例子:求
對應的迭代公式為:
取初值x0=2,迭代如下:
x0 | 2 |
x1 | 3.75000000000000 |
x2 | 3.18740740740741 |
x3 | 3.07642248706644 |
x4 | 3.07232230248782 |
x5 | 3.07231682569561 |
x6 | 3.07231682568585 |
x7 | 3.07231682568585 |
任意實數開n次方的c語言代碼為:
// 2015-12-24 // By: ChenYu #include "math.h" #include "stdio.h" #define ABS(a) ((a)<0?-(a):(a)) #ifdef _WIN32 typedef unsigned __int64 uint64; #else typedef unsigned long long uint64; #endif // calculate a approximate value static double calcInitRoot(double x, int n) { const uint64 exptMask=((uint64)1<<11)-1; const uint64 fracMask=((uint64)1<<52)-1; uint64 xInt=*(uint64*)&x; int xExpt=(int)((xInt>>52)&exptMask)-1023; xInt=((uint64)((xExpt+1024*n-1)/n)<<52)+(xInt&fracMask)/n; return *(double*)&xInt; } double calcRoot(double x, int n) { int i, j, s=1-((x<0)<<(n&1)); double a=ABS(x); double x1, x0=calcInitRoot(a, n); double err=x0*1e-14; if(x==0) return 0; for(i=1; i<50; i++) { double xn=1; for(j=0; j<n-1; j++) xn*=x0; x1=((n-1)*x0*xn+a)/(xn*n); // printf("x%d=%.14f\n", i, x1); if(ABS(x1-x0)<=err) break; x0=x1; } return s*x1; } void main() { double x=-31141.592653589793; int n=11; double y=calcRoot(x, n); printf("root(%g,%d)=%+.14f\n", x, n, y); printf("root(%g,%d)=%+.14f\n", x, n, pow(ABS(x), 1.0/n)); }
切線法文學中的表現
切線法股票術語
切線法是按一定方法和原則在由股票價格的數據所繪製的圖表中畫出一些直線,然後根據這些直線的情況推測股票價格的未來趨勢,這些直線就叫切線。切線的作用主要是起支撐和壓力的作用。支撐線和壓力線的往後的延伸亦對價格的趨勢起一定的制約作用。一般説來,股票價格在從下向上抬升的過程中,一觸壓力線,甚至遠未觸及到壓力線,就會調頭向下。同樣,股票價格在從上向下跌落的過程中,在支撐線附近就會轉頭向上。另外,如果觸及切線後沒有轉向,而是繼續向上或向下,這就叫突破。突破之後,這條切線仍然有實際作用,只是名稱變了。原來的支撐線變成壓力線,原來的壓力線變成支撐線。切線法分析股市主要是依據切線的這個特性。
[3]
切線的畫法是最為重要的,畫得好壞直接影響預測的結果。畫切線的方法有很多種,它們都是人類長期研究之後保留下來的精華。著名的有趨勢線、通道線等,此外還有黃金分割線、甘氏線、角度線等。在實際應用中,人們從這些線上獲益不少。
[3]
- 參考資料
-
- 1. 李世峯.資源與工程地球物理勘探:化學工業出版社,2008年
- 2. 切線法_深圳文獻港詞條搜索 .深圳文獻港[引用日期2013-12-22]
- 3. 劉大川.中國股民實用大辭典:北京圖書館出版社,2001:297