如何在MATLAB中对van der pol方程进行三维绘图

时间:2017-05-06 12:51:40

标签: matlab plot 3d

我试图在3D中绘制van der pol方程的解决方案:

  • tx
  • muy轴;
  • y(t)z轴。

我正在使用ode23s来解决这个问题。

我的2D代码是:

tspan = [0, 6000];
y0 = [1; 1];
Mu = 1000;
ode = @(t,y) vanderpoldemo(t,y,Mu);
[t,y] = ode23s(ode, tspan, y0);

plot(t,y(:,1))
xlabel('t')
ylabel('y(t)')

我想在3D情节中使用这样的东西:

tspan = [0, 6000];
y0 = [1; 1];
Mu = 1:1000; %Mu variate from 1 to 1000 on the y axis
ode = @(t,y) vanderpoldemo(t,y,Mu);
[t,y] = ode23s(ode, tspan, y0); %error : Dimensions of matrices being concatenated are not consistent.

plot3(t,Mu,y(:,1))
xlabel('t')
ylabel('mu')
zlabel('y(t)')

但是这段代码没有用,所以我试着将Mu作为这样的论点:

ode = @(t,y,Mu) vanderpoldemo(t,y,Mu)
[t,y,Mu] = ode23s(ode, tspan, y0);
%error : Not enough input arguments

但它也没有用。

1 个答案:

答案 0 :(得分:0)

您的第一种方法可能不正确,因为您的vanderpoldemo函数未对其Mu输入实施矢量化评估。

第二种方法不正确,因为ode23s解决了y' = f(t, y),所以它不知道要向第三个参数提供什么。

我猜Muvanderpoldemo函数中的参数,您无需对其进行集成。因此,您可以做的是迭代Mu的所有所需值并为其计算ode23s,如下所示:

[t, Mu] = meshgrid(0:100:6000, 1:100:1000); %define your desired mesh (trade of between accuracy and computation time)

y = zeros(size(Mu)); % preallocate memory 
y0 = [1; 1];
ode = @(t,y) vanderpoldemo(t,y,Mu);

% calculate the ode for all the mu values
for i=1:size(Mu, 1)
  [~,y_i] = ode23s(ode, t(i, :), y0);
  y(i, :) = y_i;
end

plot3(t,Mu,y)
xlabel('t')
ylabel('mu')
zlabel('y(t)')

请注意,我定义了t所需的评估点,这样可以更容易地在3D中绘图。否则,对于t的不同值,Mu的抽样可能会有所不同。