Matlab數值積分

2021-09-30 08:20:02 字數 1514 閱讀 9978

function [gc,ak,xk]=guasschebyshev(fun,n)

% 高斯-勒讓德數值積分

%% 引數說明

% fun:積分表示式,可以是函式控制代碼、inline函式、匿名函式、字串表示式,但是必須可以接受向量輸入

% a,b:積分上下限只能[-1 1],故忽略

% n:積分階數,可以任意正整數,但是不建議設定過大,大不一定能得到更好的精度

% gc:積分結果

% ak:求積係數

% xk:求積節點,滿足gc=sum(ak.*fun(xk))

%% 舉例說明

% fun=@(x)exp(x).*cos(x); % 必須可以接受向量輸入

% quadl(fun,-1,1) % 呼叫matlab內部積分函式檢驗

% [gc,ak,xk]=guasschebyshev(fun,7)

%% 高斯積分說明

% 1.高斯積分是精度最高的插值型數值積分,具有2n+1階精度,並且高斯積分總是穩定。一般插值型數值積分精度為至少n階,且具有高階不穩定性

% 2.高斯求積節點就是對應n階正交多項式的根,構建首項係數為1的正交多項式

% 3.高斯求積係數,可以由lagrange多項式插值係數進行積分得到

% 4.由高斯求積節點為根構成的多項式,與任何不超過n階的多項式正交

%% 勒讓德正交多項式說明

% 1.區間[-1,1]上關於權rho(x)=1/sqrt(1-x^2)的正交多項式系,滿足

%                                   |-   pi/2      (i=j≠0)

% ∫(ti(x)*tj(x)/sqrt(1-x^2),-1,1)= |    pi        (i=j=0)

%                                   |-   0         (i≠j)

% 2.切比雪夫正交多項式的通式為:t0=1, tn=cos(n*arcos(x))  (n=1,2,...)

% 3.tn(x)=0在[-1,1]有n個零點xk=cos((2k-1)/(2n)*pi) (k=1,2,...n),

%                  有n+1個最值點pk=cos(k*pi/n)  (k=0,2,...,n)

% 3.關於高斯-切比雪夫的數值積分的求積係數ak=pi/(n+1),求積節點xk=cos((2k+1)/(2n+2)*pi)  (k=0,2,...,n)

%% 計算求積係數

k=0:n;

ak=ones(1,n+1)*pi/(n+1);

% 計算求積節點

xk=cos((2*k+1)/(2*n+2)*pi);

% 計算權函式

rho=@(x)sqrt(1-x.^2);

% 積分函式有效性檢驗

fun=fcnchk(fun,'vectorize');

% 帶權的積分函式值

fx=fun(xk).*rho(xk);

% 計算積分值

gc=sum(ak.*fx);

matlab 數值積分!

1.梯形格式 2.其他格式 matlab提供了quad quadl 等函式命令計算一元函式的數值積分,其中quad 採用遍歷的自適應simpson法計算函式的數值積分,quadl採用遍歷的自適應lobatto法計算函式的數值積分。其呼叫格式一般為 q,fcnt quad function,a,b 其...

MATLAB 數值微積分

學習筆記 郭彥甫 yan fu kuo 台大生機系 matlab教學 10數值微積分 representing polynomials in matlab values of polynomials polyval a 9,5,3,7 x 2 0.01 5 f polyval a,x plot x,...

MATLAB 數值積分函式積分的表示形式

1.採用inline內聯函式 matlab中可以有採用幾種不同的方式來指定被積函式。對於簡單的 長度不超過一行的公式採用inline命令比較方便。例如,可用下面的語句進行計算 f inline 1 sqrt 1 x 4 採用inline內聯函式 f 內聯函式 f x 1 sqrt 1 x 4 q q...