点击轴

时间:2018-05-07 18:24:12

标签: matlab

我正在尝试编写一些代码,这些代码允许我点击轴和点击点的ode解决方案,因为初始条件将被绘制。这是我到目前为止所尝试的:

function myui

clc
close all

xmin=2;
xmax=10;
ymin=-4;
ymax=4;

f=@(t,y) y^2-t

fig=figure;

ax=axes('Units','pixels',...
    'XLim',[xmin,xmax],...
    'YLim',[ymin,ymax],...
    'ButtonDownFcn',@plotode)

    function plotode(source,event)
        initcond=get(ax,'CurrentPoint');
        initcond=initcond(1,1:2)
        [t,y]=ode45(f,[initcond(1),xmax],initcond(2));
        plot(t,y)
        hold on
        [t,y]=ode45(f,[initcond(1),xmin],initcond(2));
        plot(t,y)
        axis([xmin xmax ymin ymax])
        hold off     
    end    

end

我有几个问题。

  1. 我只能点击一次。我想点击几次并绘制几条曲线。

  2. 曲线可以很快地射到正负无穷大,所以如果它离开我的轴窗口,我想停止45度。

  3. 如果有人可以分享一些完整的代码,我会非常感激,因为我可以学到很多东西。

    感谢。

1 个答案:

答案 0 :(得分:0)

所有

我已经为我的代码添加了一些执行我希望看到的任务的步骤。

function myui

% clear command window and close all open figures
clc
close all

% define our function
f=@(t,y) y^2-t;

% axes boundaries
tmin=2;
tmax=10;
ymin=-4;
ymax=4;

% steps for quiver
tstep=20;
ystep=20;

% create a figure window
fig=figure;

% create axes with limits
ax=axes('Units','Normalized',...
    'XLim',[tmin,tmax],...
    'YLim',[ymin,ymax]);

% create direction field with quiver
[T,Y]=meshgrid(linspace(tmin,tmax,tstep),...
    linspace(ymin,ymax,ystep));
S=Y.^2-T;
L=sqrt(1+S.^2);
quiver(T,Y,1./L,S./L,0.5,'r','ButtonDownFcn',@plotode)
axis tight
hold on

% set ButtonDownFcn on axes ax
set(ax,'ButtonDownFcn',@plotode);

% function plots initial conditions and solutions
    function plotode(source,event)
        warning('off','MATLAB:ode45:IntegrationTolNotMet');
        initcond=get(ax,'CurrentPoint');
        initcond=initcond(1,1:2);
        [t,y]=ode45(f,[initcond(1),tmax],initcond(2));
        plot(t,y,'b','linewidth',1)
        [t,y]=ode45(f,[initcond(1),tmin],initcond(2));
        plot(t,y,'b','linewidth',1)
        plot(initcond(1),initcond(2),'ro')
        set(ax,'XLim',[tmin,tmax],'YLim',[ymin,ymax],...
            'ButtonDownFcn',@plotode);
    end    

end

当我用鼠标多次点击轴时,会生成此图像。

enter image description here

我仍然喜欢听一些指示和建议。

感谢。