[數學]Euler‘s Method 歐拉方法


1-思想原理

求解一階的常微分方程ODE,歐拉想出一種數值方法,得到一種線性近似Linear approximation
他並非求解出具體的y的方程,而是根據給定的初始值\((x_0,y_0=f(x_0)\)求得下個想要求得的點\(x_n\)的函數值\(y_n=f(x_0)\),當然這樣就得到了想要的點的坐標\((x_n,y_n=f(x_n)\)
那么他是怎么做的呢?
歐拉是利用倒數的幾何意義即斜率來求得下個點的坐標值
歐拉說 下個點的函數值近似等於 $$y_n = y_0 + \frac{dy}{dx}|_{x=x_0} * (x_n-x_0)$$
歐拉是借鑒了 這樣的一個事實: $$\frac{y_1-y_0}{x_1-x_0}=tan\alpha$$
歐拉說如果\(h=x_1-x_0\)足夠小,那么就結果值越精確

2-案例

下圖是一個example,初始值為(0,2),求得在區間[0,1]上的函數值,分成等長的四段,每段長0.25,這里就體現了線性近似(看結果圖)

對比圖

MATLAB 代碼



fun = @(x,y) (x+y);

% 歐拉近似值
re = euler_method(fun,0,2,1,0.25);
fprintf('result is %f\n',re);

% 准確值
xx = 0:0.25:1;
yy = 3*exp(xx)-xx-1;
plot(xx,yy,'b');

legend('Euler','Point','Exact');

% Euler Method
% f 表示一階常微分方程
% (x0,y0):初始值
% xn要求的函數值的自變量的值
% h 步長
function y = euler_method(f,x0,y0,xn,h)
    n = round((xn-x0)/h);
    y = y0;
    x = x0;
    xa = [];
    xa(1) =x0;
    re = [];
    re(1) = y;
    
    for i=1:n
        y = y + h*f(x,y);
        x = x + h;
        % 保存段點值,用於繪圖
        xa(i+1)=x;
        re(i+1)=y;
    end  
    plot(xa,re,'r');
    
    hold on;%不清除畫面
    scatter(xa,re,'*');% 描點
end

Result:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM