在MATLAB中更改参数

时间:2017-03-15 02:54:48

标签: matlab plot ode

我试图将三个不同的函数绘制成一个图,一个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的参数?

1 个答案:

答案 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的值并执行绘图。

这是你的问题吗?