一、odeset函數(shù)
Matlab的ode求解器是用于解決常微分方程組(ODE)的函數(shù)。odeset函數(shù)可以使用戶控制其中大多數(shù)選項的值。這個函數(shù)返回一個structure。Odset結構體可以在ODE求解器中作為參數(shù)使用。ODE求解器采用Odset中指定的選項的值。用法如下:
options = odeset('Name1',value1,'Name2',value2,...)
options就是返回的structure,Name1,value1等為其可選項與值。
如下的代碼段,指定sine函數(shù)的初值問題求解器ode15s的舍入誤差容忍值為1e-3,絕對誤差容忍度為1e-6,并繪制結果:
tspan = [0,10];
y0 = 0;
options = odeset('RelTol',1e-3, 'AbsTol', 1e-6);
[t,y] = ode15s(@(t,y) sin(t),tspan,y0,options);
plot(t,y)
二、odeset控制步長
在ODE的數(shù)值解法中,步長是決定數(shù)值穩(wěn)定性和解的精度的因素之一。ODE求解器用絕對誤差、相對誤差和幾個事件等條件進行調(diào)整。設步長和狀態(tài)的修改發(fā)生在離散塊中的固定時刻;當狀態(tài)改變時調(diào)用事件函數(shù)。ODE求解器使用odeset函數(shù)返回的選項結構來設置絕對和相對誤差容忍度、與事件相關的參數(shù)等值。下面的代碼演示使用options參數(shù)重式調(diào)整求解器ode45的默認步長:
tspan = [0,10];
y0 = [1,0];
options = odeset('RelTol', 1e-6, 'AbsTol',1e-10,'MaxStep',0.1);
[t,y] = ode45(@odefcn,tspan,y0,options);
function dydt = odefcn(t,y)
dydt = [y(2); -y(1)];
end
MaxStep選項是指定最大步長,ode45設置的默認步長為0.1左右。
三、odeset中的reltol
相對最大誤差范圍,定義為 abs(當前步長計算的值-olsolve函數(shù)返回的值) / max(atol,abs(當前計算的值)* reltol)。定下來的認識是在與客觀測量數(shù)據(jù)進行比較時,如果求解器成功誤差要小于設定的容忍范圍,否則算法就繼續(xù)迭代并重新計算相應的步長 在線性求解器中,誤差通常按照量表T,解向量Y和時間變量T進行測量,通過向量來測量誤差。ODE45中reltol默認值是1e-3:
tspan [0,30];
y0 = [2 0];
options = odeset('RelTol',1e-2);
[t,y] = ode45(@odefcn,tspan,y0,options);
function dydt = odefcn(t,y)
dydt = [y(2); -y(1)];
end
四、ode to,odeset兩個events耦合怎么寫
如果您要在多個例程中使用odeset選項,則可以創(chuàng)建一個options結構,然后將它傳遞給每個例程:
options = odeset('RelTol',1e-3);
[t1,y1] = ode45(@odefcn,tspan,y0,options);
[t2,y2] = ode23(@odefcn,tspan,y0,options);
它可以幫助改變相同的相對誤差,即盡管它的默認值不同。在ODE求解器中支持事件函數(shù)(式)。您可以在特定的時間進入或離開事件。每次輸入事件函數(shù)時,必須告訴ODE求解器是否計算相應的事件。 如果計算相應的事件,則必須提供一個組成向量的事件結果和指示哪個事件被觸發(fā)的事件檢測向量。最后,您必須告訴ODE求解器下一個時間段的結束時間。下面的示例展示了如何使用“ode23”甚至偶數(shù)次方運行情況:
tspan = [0 10];
y0 = 1;
[D,c] = ode23(@ode1,tspan,y0,odeset('events',@ode2));
plot(D,c),xlabel('Time'),ylabel('Solution')
function dy = ode1(t,y)
dy = y;
end
function [value,isterminal,direction] = ode2(t,y)
value = mod(t,2) == 0; % 奇數(shù)次方
isterminal = false; %不終止迭代器
direction = 0; % 無方位可指定
end
五、odeset matlab
對于不同的求解器和問題,ODE求解器有很多選項設置。在控制求解器行為方面,odeset函數(shù)是個非常重要的函數(shù)。Matlab函數(shù)庫提供的ode45、ode23、ode113、ode15s等都適用odeset函數(shù),它們都包含多個選項和值。以下是一個示例,其中設定求解器ode45的初始步長為0.01,傭金步長為0.1,相對容錯為1e-6的絕對容錯為1e-10:
tspan = [0,10];
y0 = [2,2];
options = odeset('IntialStep',0.01,'MaxStep',0.1,'RelTol',1e-6,'AbsTol',1e-10);
[t,y] = ode45(@(t,y) [y(2) ; -y(1)],tspan,y0,options);
plot(t,y(:,1))
六、ode to you
ODE(Ordinary Differential Equation)是指普路伐斯微分方程,大學數(shù)學中的常微分方程概念。數(shù)學家們對ODE這個領域做了很多研究,除了很多解析方法,還有很多數(shù)值求解器。比如一些經(jīng)典的方法:歐拉法、改進歐拉法、龍格庫塔法(RK)等,它們都能幫助我們求解ODE問題,但是數(shù)值精度和時間效率不同。ode45函數(shù)是在所有數(shù)值求解器中精度和時間效率均衡的算法。因此,ode45是求解ODE問題的函數(shù),類似的函數(shù)還有:ode15s、ode23、ode23tb、ode113等。
七、ode to joy
在ODE求解器中,ode45函數(shù)用于求解常微分方程組,下面是一個關于ode45函數(shù)求解簡單雙擺的例子:
%簡單雙擺
tspan=[0,70]; % 時間范圍
y0=[0,pi/2,pi/2,0]; %初值
[t,y] = ode45(@fxy,tspan,y0); % 返回時間刻度“t”和值“y”
%繪制紅色線條
line([0 2*sin(y(1,1))],[0 -2*cos(y(1,1))],'color','r') %擺錘1
hold on
line([2*sin(y(1,1)) 2*sin(y(1,1))+2*sin(y(1,2))],[-2*cos(y(1,1)) -2*cos(y(1,1))-2*cos(y(1,2))],'color','r') %擺錘2
axis([-3 3 -3 3]); % 繪圖區(qū)間
whitebg('w'); % 背景顏色
box('on') % 繪制邊界
title('Double Pendulum') % 標題
xlabel('x (m)') % x軸標簽
ylabel('y (m)') % y軸標簽
% 第一列與第三列
function dy = fxy(t,y)
g=9.8; % 重力加速度
l = 2; % 擺桿長
dy=zeros(4,1);
dy(1)=y(2);
dy(2)=(-g*2*sin(y(1))-2*sin(y(1)-y(3))*((y(4)^2)+(y(2)^2)*cos(y(1)-y(3))))/(2-l*cos(y(1)-y(3))^2);
dy(3)=y(4);
dy(4)=(2*sin(y(1)-y(3)))*((y(2)^2)+(2*g*cos(y(1))) +(y(4)^2)*cos(y(1)-y(3)))/(2-l*cos(y(1)-y(3))^2);
八、ode to a nightingale
Matlab的ode求解器是用于解決常微分方程組(ODE)的函數(shù),odeset函數(shù)可以使用戶控制選項的值。ode生態(tài)系統(tǒng)中有一個很大的工具箱,可以輕松解決大多數(shù)的ODE問題。ond45是其中一種求解器,能夠順利解決大多數(shù)的知名ODE問題。
以下是ode45函數(shù)的代碼實現(xiàn):
tspan = [0,10]; %時間范圍
y0 = [1, 0]; % 初值
options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-5]); %選項
[t,y] = ode45(@model,tspan,y0,options); % 函數(shù)調(diào)用
function dydt = model(t,y)
dydt = zeros(2,1);
dydt(1) = y(2);
dydt(2) = -4*y(1) - 2*y(2);
end
plot(t,y(:,1))