2016-03-28 86 views
0

我解微分方程系統用Matlab這樣從MATLAB ODE求解如何比較結果

tspan = [0 10];  
res = ode15s(@(t,x) func,tspan,x0); 

,我有另外一個系統,它比@func指定的slighlty不同,解決像

res2 = ode15s(@(t,x) func2,tspan,x0); 

我想通過計算每個時間步的差異來比較結果。但由於Matlab解算器是可變時間步長,因此res.y(解)矩陣具有不同的列數。我如何使結果具有可比性?我試過

tspan = [0:0.01:10]; 

但是求解器似乎仍然使用可變的時間步長。那麼我怎樣才能使結果具有可比性?先謝謝你。

編輯:我想澄清,我不需要強制解算器採取任何具體步驟,只需要一種方法來插入結果或其他東西。換句話說,this不能幫助我。

回答

2

使用Matlab的內置的樣條插值:

tFine = 0:0.01:10; 
resFine = interp1(res.x,res.y,tFine,'spline'); 
res2Fine = interp1(res2.x,res2.y,tFine,'spline'); 
1

如果速度不是問題,您可以使用tspan設置爲[0 tf]多次解決每個等式,其中tf[0:0.01:10]的元素。這將保證解決方案的最後一個值是一個你需要的:

tsteps = [0:0.01:10] 
for tf in tsteps: 
    tspan = [0 tf]; 
    res = ode15s(@(t,x) func, tspan, x0); 
    res2 = ode15s(@(t,x) func2, tspan, x0); 
    % Extract whatever you need here 
end 
% Compare what you extracted here