從泰勒級數說傅立葉級數

2021-02-10 matlab愛好者

What is taylor formula?

泰勒中值定理:若函數f(x)在含有x0的某個開區間內具有直到(n+1)階的導數,那麼對於任一x∈(a,b),有:

ζ為x0與x之間的某個值,f(x)稱為n階泰勒公式,其中:

稱為n次泰勒多項式,它與f(x)的誤差:

稱為泰勒餘項。

通俗地講解,泰勒公式也稱泰勒展開式。是用一個函數在某點的信息,描述其附近取值的公式。如果函數足夠平滑,在已知函數在某一點的各階導數值的情況下,泰勒公式可以利用這些導數值來做係數,構建一個多項式近似函數,求得在這一點的鄰域中的值。

泰勒公式的實際應用就是用一個多項式函數去逼近一個給定的函數(即儘量使多項式函數圖像擬合給定的函數圖像),注意,逼近的時候一定是從函數圖像上的某個點展開。如果一個非常複雜函數,想求其某點的值,直接求無法實現,這時候可以使用泰勒公式去近似的求該值,這是泰勒公式的應用之一。泰勒公式在機器學習中主要應用於梯度迭代。

過冷水在學習過程中曾經出現過一個誤解,「認為多項式擬合思想是基於泰勒公式」this is error!

多項式擬合是用一個多項式展開去擬合包含數個分析格點的一小塊分析區域中的所有觀測點,得到觀測數據的客觀分析場。展開係數用最小二乘擬合確定。

泰勒公式多項式係數由逼近點導數確定,泰勒公式是從某一點展開,即時假設該點是原點也不可以認為是多項式擬合。擬合&和逼近,喜歡摳字眼的人能夠給你講的很清楚。

多項式一般是用於擬合一些列點儘可能的讓點落在多項表示的函數上,泰勒公式是用多項式表示一個函數式,可用於求解數值積分。過冷水之前的一篇推文就把這個概念給弄混了。

現在給實際演示一下,用兩種不同方法表示下例函數:

計算結果:

原始碼:

syms xf1=((x.^4.*exp(x))./(exp(x)-1).^2);%泰勒公式在0點展開f2=taylor(f1,x,'ExpansionPoint',0,'Order',7);%在五點展開f3=taylor(f1,x,'ExpansionPoint',5,'Order',7);%泰勒公式在8點展開f4=taylor(f1,x,'ExpansionPoint',8,'Order',7);%多項式擬合x=linspace(0.1,10,100);y1=(x.^4.*exp(x))./(exp(x)-1).^2;p=polyfit(x,y1,6);f5= p(1)*x.^6 + p(2)*x.^5 + p(3)*x.^4+ p(4)*x.^3 + p(5).*x.^2 + p(6).*x+p(7);figure1 = figure;% 創建 subplot1subplot1 = subplot(2,3,1,'Parent',figure1);hold(subplot1,'on');h1=ezplot(f1,[0,10]);set(h1,'Color','r','LineWidth',2);text('Parent',subplot1,'FontSize',12,'Interpreter','latex','String',' $f_1=\frac{{x}^{4} {exp}({x})}{({exp}({x}) - {1})^{2}}$','Position',[2.04663212435233 0.642142934709296 0]);xlabel('{x}');title('原函數');xlim(subplot1,[0 10]);ylim(subplot1,[-0.503063977246079 5.39061349763272]);box(subplot1,'on');set(subplot1,'LineWidth',1.5);% 創建 subplot2subplot2 = subplot(2,3,2,'Parent',figure1);hold(subplot2,'on');h2=ezplot(f2,[0,10]);set(h2,'Color','b','LineWidth',2);xlabel('$$f_2=f(0)+f^{1}(0)x+...\frac{f^{7}(0)x^7}{7!}$$','Interpreter','latex');title('泰勒公式x_0=0,七次展開');text(5,2,' 2');xlim(subplot2,[0 10]);ylim(subplot2,[-174.382571609797 2791.21109645392]);box(subplot2,'on');set(subplot2,'LineWidth',1.5,'ZGrid','on');% 創建 subplot3subplot3 = subplot(2,3,3,'Parent',figure1);hold(subplot3,'on');h3=ezplot(f3,[0,10]);set(h3,'Color','g','LineWidth',2);xlabel('$$f_3=f(5)+f^{1}(5){(x-5)}+...\frac{f^{7}(5){(x-5)^7}}{7!}$$','Interpreter','latex');title('泰勒公式x_0=5,7次展開');text(5,2,' 1');xlim(subplot3,[0 10]);ylim(subplot3,[0.921374829561043 5.28031508945495]);box(subplot3,'on');set(subplot3,'LineWidth',1.5);% 創建 subplot4subplot4 = subplot(2,3,4,'Parent',figure1);hold(subplot4,'on');h4=ezplot(f4,[0,10]);set(h4,'Color','c','LineWidth',2);xlabel('$$f_4=f(8)+f^{1}(8){(x-8)}+...\frac{f^{7}(8){(x-8)^7}}{7!}$$','Interpreter','latex');title('泰勒公式x_0=8七次展開');
xlim(subplot4,[0 10]);ylim(subplot4,[-26.6703291235615 6.65080265872201]);box(subplot4,'on');set(subplot4,'LineWidth',1.5);% 創建 subplot5subplot5 = subplot(2,3,5,'Parent',figure1);hold(subplot5,'on');plot(x,f5,'Parent',subplot5,'LineWidth',2,'Color',[0 0 0]);text('Parent',subplot5,'Interpreter','latex','String','$$f5=p_1x^6+....p_6x^1+p_7$$','Position',[1.58031088082902 0.571428571428571 0]);title('多項式六次擬合');text(5,2,'5');box(subplot5,'on');set(subplot5,'LineWidth',1.5);% 創建 subplot6subplot6 = subplot(2,3,6,'Parent',figure1);hold(subplot6,'on');plot(x,f5,'Parent',subplot6,'LineWidth',2,'Color',[0 0 0]);h3=ezplot(f3,[0,10])set(h3,'Color','g','LineWidth',2)h1=ezplot(f1,[0,10])set(h1,'Color','r','LineWidth',2)xlabel('{x}');title('多項式、泰勒公式比較');xlim(subplot6,[0 10]);ylim(subplot6,[0.921374829561043 5.28031508945495]);box(subplot6,'on');set(subplot6,'LineWidth',1.5);

計算可知多項式能夠很好的替換原函數,泰勒公式在三個點處,用七次展開都不能很好的吻合原函數,是不是泰勒公式不好啊?我做的判斷能夠表示實際結果嗎?我又做了如下工作:

原始碼:

syms xf1=(x.^4.*exp(x))./(exp(x)-1).^2;%泰勒公式在0點展開f2=taylor(f1,x,'ExpansionPoint',0,'Order',7);%泰勒公式在5點展開f3=taylor(f1,x,'ExpansionPoint',5,'Order',10);%多項式擬合x=linspace(-50,50,500);y1=(x.^4.*exp(x))./(exp(x)-1).^2;p=polyfit(x,y1,10);f4=p(1)*x.^10+p(2)*x.^9+p(3)*x.^8 + p(4)*x.^7 + p(5)*x.^6+ p(6)*x.^5 + p(7).*x.^4 +p(8)*x.^3+p(9)*x.^2+p(10)*x.^1 + p(11);figure1 = figure;axes1 = axes('Parent',figure1);hold(axes1,'on');h1=ezplot(f1,[-50,50]);set(h1,'Color','r','LineWidth',2,'DisplayName','$$f_1=\frac{{x}^{4} {exp}({x})}{({exp}({x}) - {1})^{2}}$$');h2=ezplot(f2,[-50,50]);set(h2,'Color','b','LineWidth',2,'DisplayName','$$f_2=f(0)+f^{1}(0)x+...\frac{f^{7}(0)x^7}{7!}$$');h3=ezplot(f3,[-50,50]);set(h3,'Color','g','LineWidth',2,'DisplayName','$$f_3=f(5)+f^{1}(5){(x-5)}+...\frac{f^{10}(5){(x-5)^10}}{10!}$$');% 創建 plotplot(x,f4,'DisplayName','$$f_4=p_1x^{10}+....p_{10}x^1+p_{11}$$','LineWidth',2,'Color',[0 0 0]);xlabel('{x}');title('多項式擬合和泰勒級數展開比較');xlim(axes1,[-50 50]);ylim(axes1,[-1 6]);box(axes1,'on');set(axes1,'FontSize',14,'LineWidth',2);legend1 = legend(axes1,'show');set(legend1,'Position',[0.637438496065231 0.676591289840403 0.223608969388694 0.190075376826265],'Interpreter','latex','FontSize',10,'EdgeColor',[1 1 1]);

由圖可知:

當擴大函數區間,多項式擬合就不太適用於該函數。說明了多項式擬合的局限性。

泰勒展開式式在某一點附近展開,局部符合程度比較好,隨著遠離展開點,符合情況較差。

兩種方法各優缺點。不能一有問題就想到多項式擬合,多項式擬合是不能代替原函數或者某種變化趨勢的。泰勒公式也只是能夠描述簡單函數,對於複雜的函數就也不能做到替換原函數,不知道詳情的我之前一直以為泰勒公式是可以做到任意替換的,至少理論上是,實際是理論上都不是,這裡需要注意的是不同點展開的函數是不一樣的。

過冷水本打算用另一種基數展開式來藐視泰勒級數展開式的局限性的,奈何案例函數太複雜,求不出不出來展開式係數。所以上述案例就沒放。

傅立葉變化大家聽得很多,但提到傅立葉級數就不一定了解了,為什麼大家一致搞不懂傅立葉變化是什麼?因為沒搞懂什麼是傅立葉級數。過冷水現在就帶你弄明白什麼是傅立葉級數。

    傅立葉級數是一種特殊形式的函數展開。一個函數按泰勒展開時,基底函數取1、x2、x3而傅立葉級數展開時基底函數取1,cosx、sinx,cos2x、sin2xcosnx、sinnx,傅立葉級數一般情況下表示為:

我們看一個實戰案例:

原始碼:

syms xf1=x*(x-pi)*(x-2*pi);f2=taylor(f1,x,'ExpansionPoint',0,'Order',7);[an,bn,f]=fseries(fx,x,12,0,2*pi);%前12項展開f3=latex(f);%將f轉換成latex代碼figure1 = figure;axes1 = axes('Parent',figure1);hold(axes1,'on');h1=ezplot(f1,[0,2*pi]);set(h1,'LineWidth',4,'LineStyle',':','Color',[1 0 0],'DisplayName','$$f_1=\frac{{x}^{4} {exp}({x})}{({exp}({x}) - {1})^{2}}$$');h2=ezplot(f2,[0,2*pi]);set(h2,'LineWidth',3, 'Color',[0 0 1],'DisplayName','$$f_2=f(0)+f^{1}(0)x+...\frac{f^{7}(0)x^7}{7!}$$');h3=ezplot(f,[0,2*pi]);set(h3,'LineWidth',1,'Color',[0.929411768913269 0.694117665290833 0.125490203499794],'DisplayName','$$f_3=a_0+\sum_{n=1}^{12}{(a_ncosx+b_nsinnx)}$$');xlabel('{x}');title('傅立葉級數和泰勒級數展開比較');xlim(axes1,[-2 8]);ylim(axes1,[-10 14]);box(axes1,'on');set(axes1,'FontSize',14,'LineWidth',2);legend1 = legend(axes1,'show');set(legend1,'Interpreter','latex');

傅立葉級數函數

function [an,bn,f]=fseries(fx,x,n,a,b)%傅立葉級數展開%an為fourier餘弦項係數%bn為fourier正弦項係數%f為展開表達式if nargin==3    a=-pi;    b=pi;endl=(b-a)/2;if a+b    fx=subs(fx,x,x+l+a);endan=int(fx,x,-l,l)/l;bn=[];f=an/2;for ii=1:n    ann=int(fx*cos(ii*pi*x/l),x,-l,l)/l;    bnn=int(fx*sin(ii*pi*x/l),x,-l,l)/l;    an=[an,ann];    bn=[bn,bnn];    f=f+ann*cos(ii*pi*x/l)+bnn*sin(ii*pi*x/l);endif a+b    f=subs(f,x,x-l-a);end

用兩種不同的級數表示原函數表示,結果較好。說明傅立葉級數表達式有表示其它函數的功能,本期推文過冷水通過複習泰勒級數讓大家知道級數和多項式的區別,以及級數替代函數的形式的級數類型不是唯一的。

由於傅立葉級數這一部分內容比較多,學習起來較難,故會在下期給大家詳講。

往期回顧>>>>>>

你所不知道的Monte Carlo形式

數值計算——MATLAB數值積分原理詳講



相關焦點

  • 無窮級數:傅立葉級數原理概述
    數學中,無窮級數非常重要。它們廣泛用於計算器和計算機中。工程和科學中研究的許多現象本質上都是周期性的,例如。交流電路中的電流和電壓。可以通過傅立葉分析將這些周期函數分解為單個的組成成分(諧波)。這些特殊的三角函數的總和稱為傅立葉級數。傅立葉級數真的很有趣,因為它使用了您以前學過的許多數學技術,例如圖形,積分,微分,求和符號,三角學等。如果您遇到困難,希望這篇簡易的文章對你有所,首先了解下最基本的級數形式我們知道用泰勒級數如何將許多函數(如sin x,Inx,e^x等)重新表達為具有無限數量項的多項式。
  • 對傅立葉級數的理解
    有些講傅立葉級數的文章涉及的內容較深,對於一些數學知識不夠的學生來說有點兒難以看懂。本文從較基本概念出發,試圖將傅立葉級數的基本概念講清。由於本人才疏學淺,錯誤地方在所難免,望大家不吝賜教。閱讀本文有一個要求:希望大家能夠跟著計算,這樣才能真正理解。   首先,我們從最基本的矢量出發。
  • 傅立葉級數的幾何意義(先理解後記憶)
    你以為傅立葉和泰勒有什麼親戚關係嗎?你一定聽說過傅立葉展開和泰勒展開吧?展開的結果就是傅立葉級數和泰勒級數。他們是對一個函數的不同的【展開】方法。【相信我,傅立葉分解其實巨簡單!】【但是最開始的問題一定是:我們為什麼要展開一個函數????!!!!!一個函數:y=1 他的泰勒展開是神馬?還是y=1。那麼y=x的展開呢?
  • 一文秒懂傅立葉級數
    3.傅立葉級數如果函數f(x)以2l為周期,或者只定義在[-l,l]上,且函數f(x)在[-l,l]上可積。則函數f(x)能夠展開成如下形式的三角級數:則稱右邊的級數為函數f(x)的傅立葉級數,相關的係數為傅立葉係數。注意上方標綠的地方,此處用到的是單約號而不是等號!意思是,對於x的某個值,傅立葉級數可能收斂,但收斂值與f(x)的值不一定相等。
  • 傅立葉級數的見證——當空中飛人與攀巖者握手的時候
    許多特殊函數可以用這些基本的函數來直接表達,更重要的是,在一般情況下談論與研究函數往往是比較棘手的,於是便有了級數理論。在級數理論中,這些基本函數會用來表示或逼近一個函數,甚至可以直接作為線性空間的基。偉大的魏爾斯特拉斯晚年回憶自己的工作時說,「沒有別的,就是冪級數」。
  • 高等數學(二十六),無窮級數求和及傅立葉級數
    部分同學可能搞不懂傅立葉級數,我在此把自己的理解寫出來。如果一個以 為周期的函數可以展開成傅立葉級數,那麼可以設: 但是此時我們不知道這些 的表達式,因此我們要做的就是把 確定下來。明確了任務,那來看看我們需要使用什麼樣的技巧,我們先來做一個積分題目: ,根據: ,  ;可知: 因此: 這就是所謂的正交性!
  • 持續學習:數學分析子冪級數與傅立葉級數2
    0以2π為周期的函數的傅立葉級數:設f(x)以2π為周期,在[-π,π]上可積,an=1/π · ∫f(x)cosnxdx |-π->π;bn=1/π · ∫f(x)sinnxdx |-π->π;an,bn稱為傅立葉係數,由傅立葉係數確定的三角級數a0/2 + Σ(an·cosnx+bn·sinnx)稱為傅立葉級數根據三角恆等變換 y=πx
  • 傅立葉級數兩例
    而這些用數學的語言描述出來,也許正是傅立葉級數闡述的:動畫見:https://www.seditionart.com/memo-akten/simple-harmonic-motion-8傅立葉級數想要描述的是周期現象,所以討論的是周期函數。
  • 泰勒級數經典之作:有關泰勒級數前幾項的幾何原理
    泰勒級數大家應該都很熟悉了,如下所示,它可以計算任意函數f(x)所有階導數在a處的值如下就是e^x在0附近時的無窮級數形式,它是最簡單的也是最有用的級數之一,它的導數就是其本身我們現在用幾何原理來解釋泰勒級數的前幾項,這是非常有趣的,可以很好地拓展我們的數學視野
  • 傅立葉級數——這樣「魔法」波形的基本概述與動畫解釋
    傅立葉級數是與泰勒級數等價的圓和波。假設你不熟悉這一點,傅立葉級數只是一個長而令人畏懼的函數,它能將任何周期函數分解成一個個簡單的正弦和餘弦波。這似乎是一個令人困惑的概念,但幾乎任何函數都可以表示為由旋轉的圓周運動產生的一系列正弦和餘弦波。
  • 趣談無窮級數的終結者:泰勒級數
    這樣我們就得到了cosx函數的泰勒多項式。同理最終得到任意函數在x=0時的泰勒多項式。我們來分析他們的幾何意義首先假設多項式f(x)代表面積f(x)的在a處一階導數就是曲線上在a點的縱坐標,f(x)的在a處二階導數就是曲線在a點的斜率,所以得到圖中的等式。
  • 理解傅立葉級數——分析公式
    上一篇中使用相對直觀的方式建立了對傅立葉級數的初步印象,這一篇中,咱們將繼續探討傅立葉級數的理解問題。
  • 完全搞懂傅立葉變換和小波(5)——傅立葉級數展開之函數項級數的概念
    1.4 傅立葉級數展開本文引用地址:http://www.eepw.com.cn/article/201703/345383.htm  之前我們在介紹泰勒展開式的時候提到過傅立葉級數。
  • 非正弦周期信號的傅立葉級數分解
    一般電工技術中所涉及的周期函數通常都能滿足狄裡赫利條件,能展開為傅立葉級數,在後面討論中均忽略這一問題。在實際工程計算中,由於傅立葉級數展開為無窮級數,因此要根據級數展開後的收斂情況,電路頻率特性及精度要求,來確定所取的項數。
  • 冪級數和泰勒級數、泰勒公式之間的關係
    不少同學對冪級數和泰勒級數、泰勒公式,以及麥克勞林展開式之間的區別和聯繫不清楚,本文小編力圖說明它們之間的區別和聯繫。1.泰勒中值定理和泰勒公式對於複雜函數,往往不容易研究其性質。帶拉格朗日餘項的麥克勞林公式:帶皮亞諾餘項的麥克勞林公式:4.麥克勞林級數小編在前文已經講述了什麼是泰勒公式,那泰勒級數又是什麼鬼?
  • 傅立葉級數應知必會
    連續時間周期信號的傅立葉級數之所以重要:一方面在於周期信號的級數表示被作為過渡到非周期信號的傅立葉變換的必經之路
  • 泰勒級數為什麼不可以展開?
    泰勒級數展開的問題(關於這個問題,之前寫過「使用泰勒公式進行估算時,在不同點有啥區別?[3]」,更初級、更詳細一些,感興趣可以看下)。1.1   點的泰勒級數)為: 都是 1 :所以也說在  的泰勒級數(下圖中綠色的曲線)被鉗制在
  • 泰勒級數在高中導數中的應用
    泰勒級數是以於1715年發表了泰勒公式的英國數學家布魯克·泰勒(Sir Brook Taylor)的名字來命名的。通過函數在自變量零點的導數求得的泰勒級數又叫做邁克勞林級數,以蘇格蘭數學家科林·麥克勞林的名字命名。泰勒級數在近似計算中有重要作用。
  • 持續學習:數學分析之冪級數於傅立葉級數
    上一篇講到一般的無窮級數理論。就具體運用到的表達函數而言,由兩類特殊的函數項級數是十分重要的:冪級數與三角函數。冪級數是多項式的推廣,是無窮次的多項式,它的收斂域很特別,是以某點為中心的區間,而且在收斂區間內,和函數是無窮次可微的。
  • 完全搞懂傅立葉變換和小波(6)——傅立葉級數展開之函數項級數的性質
    傅立葉級數是一種函數項(三角函數)級數,本質上來說,一幅圖像(或者一組信號)就是一個函數,我們研究圖像的傅立葉變換,就是要探討如何將圖像函數用三角函數進行展開。所以如果要徹底搞清楚傅立葉變換,那麼討論函數項級數的性質是非常有必要的。在此基礎上,我們將引入傅立葉級數的概念。