簡體   English   中英

使用MATLAB查找三角函數的Minimax多項式逼近

[英]Using MATLAB to find Minimax Polynomial Approximation of Trigonometric Functions

我正在嘗試使用MATLAB中的remez交換算法找到正弦和余弦的極小多項式逼近。 因為我要為IEEE-754浮點實現正弦和余弦函數,所以需要精確到23位。

使用此處的鏈接(請參閱第8至15頁),給出了使用Mathematica和Maple查找多項式的指令,但是,我不確定如何將這些方法外推到MATLAB。

根據表3,我需要使用5或6階多項式來獲得〜23位(小數點后)的精度。

我計划首先執行將所有傳入theta的范圍縮小到-pi / 4到+ pi / 4之間,然后根據需要執行正弦或余弦函數(最終目標是實現exp(i * x)= cos( x)+ i * sin(x)。

我也許可以自己按照本文的說明進行操作,但是在這里我不知道如何使用remez函數。 另外,我既不理解為什么作者使用方程式(6)(第9頁),也不理解k的方程式(第11頁)是如何確定的(2796021來自何處?)以及為什么要進行定義我們想以多項式的形式最終以sin9x)= x + kx ^ 3 + x ^ 5 * P(x ^ 2)結束。

改用firpm函數會更好嗎(因為不推薦使用remez )?

謝謝您,所有幫助和指導,以及進行編輯以確保對我的問題的最佳答案,我們深表感謝。

我不會嘗試開發自己的近似值。 更簡單的是拿起《計算機近似》的副本,Hart等人。 一個好的大學圖書館應該有它。 23位大約是7個十進制數字,因此只需選擇一個近似值即可為您提供所需的精度。 您可以選擇簡單的多項式逼近,也可以使用有理多項式,只要可以容忍除法,通常更好。

縮小范圍確實是有道理的,實際上,我在自己的工具中選擇了相同的范圍(+/- pi / 4),因為這種選擇范圍特別容易使用。

編輯:(一個示例的用法可以在Hart中找到。)

在這里,我將找到sin(x)的近似值,其中x位於間隔[0,pi / 4]中。 我的目標是在該間隔內選擇一個絕對精度至少為1.e-7的近似值。 當然,如果x的值為負,我們知道sin(x)是一個奇數函數,因此這是微不足道的。

我注意到,Hart中的近似值趨於采用sin(alpha pi x)的形式,其中x處於區間[0,1]中。 如果然后選擇alpha = 1/2的近似值,那么我得到的近似值在選定的時間間隔內有效。 因此,對於區間[0,pi / 4]的近似值,我們尋找alpha = 1/4。

接下來,我將尋找一個表示其絕對精度至少為7位數左右的近似值,並且我將更喜歡使用有理多項式近似值,因為它們往往會更有效率。 向下瀏覽第118頁的表格(我的Hart副本來自1978年),我發現α= 1/4的近似值適合該要求:索引3060。

這種近似形式為

sin(alpha*pi*x) = x*P(x^2)/Q(x^2)

因此,現在我轉到提供SIN 3060系數的頁面。在我的副本中,它位於199-200頁上。 有5個系數,P00,P01,P02,Q00,Q01。 (請注意此處使用的某種非標准科學符號。)因此,P(分子多項式)中有3個項,而Q分母有2個項。 寫出來,我得到這個:

sin(alpha*pi*x) = (52.81860134812 -4.644800481954*x^3 + 0.0867545069521*x^5)/ ...
    (67.250731777791 + x^2)

現在讓我們在MATLAB中嘗試一下。

x = linspace(0,pi/4,10001);
xt = x*4/pi; % transform to [0,1]
sine = @(x) (52.81860134812*x -4.644800481954*x.^3 + ...
     0.0867545069521*x.^5)./(67.250731777791 + x.^2);

max(abs(sin(x) -sine(xt)))
ans =
   1.6424e-09

plot(x,sin(x)- sine(xt),'-')

正弦逼近[0,pi / 4]的誤差

請注意1e-9附加到y軸。

看起來這是在該特定時間間隔內對sin(x)逼近的最合理選擇,盡管這提供了大約29位的精度,而不是您要求的23位。 如果您願意選擇其他范圍縮小間隔,則可以節省一些術語,這可能會節省一些不必要的費用。

log2(max(abs(sin(x) -sine(xt))))
ans =
      -29.182

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM