複製鏈接
請複製以下鏈接發送給好友

切線法

鎖定
切線法是通過曲線上的一些特徵點的切線的交點座標關係來計算磁性體的產狀。 [1] 
中文名
切線法
外文名
tangents method
別    名
牛頓法
類    型
計算方法
領    域
數學
應用學科
數學

切線法方程求根方法

切線法又稱為牛頓法,是一種一般情況下具有二階收斂速度的非線性方程的數值解法。
具體方法如下: [2] 
是方程
的根,又
附近的一個值,過
切線,則切線方程為:
上述切線與
軸的交點為:
如果曲線在
鄰域保持凹凸性不變,從圖中不難看出,
更接近方程的真實值
,由此可以得到一個迭代公式:
上面的迭代公式就是切線法的公式,不難看出這個公式實際就是牛頓公式。
可以證明,當
,且滿足以下條件時,由以上遞推式產生的序列最後收斂
上的唯一實根
(1)
(2)
(3)
上恆正;
(4) 初值
應滿足

切線法收斂性的證明

下面給出牛頓切線法迭代格式收斂的充分條件,為了配合插圖,將充分條件具體表述為: [2] 
若(1)函數
上連續,且
(2)在區間
上,
則(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
從上面可以看出,只要迭代6次即可求出15位精度的近似值。 [2] 
任意實數開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] 
切線法所依據的理論便稱為切線理論 [3] 
參考資料
  • 1.    李世峯.資源與工程地球物理勘探:化學工業出版社,2008年
  • 2.    切線法_深圳文獻港詞條搜索  .深圳文獻港[引用日期2013-12-22]
  • 3.    劉大川.中國股民實用大辭典:北京圖書館出版社,2001:297