我试图将三个不同的函数绘制成一个图,一个ODE的近似解,一个ODE的精确解和相对误差。我的功能只输出其中一个图形。我不确定如何一次绘制所有三个以及如何更改k的参数,以便将k绘制为.02,.1和1.5。
我将此功能放在一个单独的文件中。这是近似解决方案:
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 :(得分:0)
如果要设置k个严重值,可以将其作为参数放入ode函数中。
定义函数时:
function dydt = prblm1_fun(t,y,k)
调用ode函数时:
[T,Y] = ode45(@(t,y) prblm1_fun(t, y,k), [0 2.5],0)
现在,您可以使用for循环来设置k的值并执行绘图。
这是你的问题吗?