2017-03-15 75 views
0

我想將三個不同的函數繪製成一個繪圖,ODE的近似解,ODE的精確解和相對誤差。我的功能只是輸出這些圖中的一個。我不確定如何一次繪製所有三個圖形,以及如何更改k的參數,以便將k繪製在.02,.1和1.5處。在MATLAB中更改參數

我有這個功能在一個單獨的文件。這是近似的解決方案:

function dydt = prblm1_fun(t,y) 
k = 0.02 
if t < 1 
dydt = y(1)*k + sin(pi*t); 
elseif t < 2 
dydt = y(1)*k + 0.5; 
else 
dydt=y(1)*k + exp(t-2)/2; 
end 

此功能試圖解決近似和繪製三個。

[T,Y] = ode45(@prblm1_fun,[0 2.5],0); 
plot(T,Y) 
k=0.02; 

for i =1:length(T) 
if T(i) < 1 
y_exact(i) = 1/(k^2+pi^2)*(pi*exp(k*T(i))-pi*cos(pi*T(i))- k*sin(pi*T(i))); 
elseif T(i) < 2 
y_exact(i) = 1/2/k*(exp(k*(T(i)-1))-1) + pi/(k^2+pi^2)*(exp(k*T(i)) +  exp(k*(T(i)-1))); 
else 
y_exact(i) = 1/2/k*(exp(k*(T(i)-1))-exp(k*(T(i)-2))) + pi/(k^2+pi^2)(exp(k*T(i)) + exp(k*(T(i)-1))) + 1/2/(k-1)*(exp(k*(T(i)-2)) - exp(T(i)-2)); 
end 
end 


rel_error = (y_exact - Y')./y_exact 

我在哪裏出錯了,如何在單個圖中更改k的參數?

回答

0

如果要設置k個嚴重值,可以將其作爲參數放入ode函數中。

當你定義的函數:

function dydt = prblm1_fun(t,y,k) 

當調用頌歌功能:

[T,Y] = ode45(@(t,y) prblm1_fun(t, y,k), [0 2.5],0) 

現在,你可以使用一個for循環來設置k的值,做劇情。

這是你的問題嗎?