Matlab中的摆动弹簧ODE系统-如何使位置矢量遵循路径?

科里Z

我是Matlab的新手。我有一个脚本,使用ode45arrow.m演示在Matlab中通过3D空间移动时带有质量的摆动弹簧的运动。该程序几乎可以完成我想要的操作。现在,钻石的密度显示出弹簧的速度(除了ode45并以个人喜欢的数字样本作为参数),并且速度几乎准确地用函数的步长(至少是我的计算机运行代码的速度)来说明。我想要做的是让代码中注释掉的位置矢量仅显示在质量的瞬时位置(即曲线的端点),而不显示在菱形显示的每个点。我四处寻找帮助,但是我尝试执行的所有操作似乎都会导致错误。如果有人能指出我正确的方向,将不胜感激。请尝试运行该程序,您将明白我的意思,并且还可以使用该函数的参数。

function elasticPendulum(totalTime)
time=1;
totalTime=20
X=1
Vx=0
Y=0
Vy=0
Z=1.1
Vz=0
w=3;
g=9;
l=1;
while (time<totalTime)
    tspan=[0,time];
    x0=[X,Vx,Y,Vy,Z,Vz];
    [t,x]=ode45(@F,tspan,x0);
    plot3(x(:,1),x(:,3),x(:,5),'dk'), axis([-2 2 -2 2 -10 2]);
    grid on;
    o=[0, 0, 0];
    Xeq=[0, 0, -(g/(w^2)+l)];
    arrow(o,Xeq,'Length',5);
    %{ 
    Xt=[x(:,1) x(:,3) x(:,5)]
    arrow(o,Xt,'Length',5);
    %}
    time=time+.1*(((x(2))^2+(x(4))^2+(x(6))^2)^(1/2))
    pause(.1);
end

    function xprime=F(t,x)
    r=sqrt(x(1)^2+x(3)^2+x(5)^2);
    xprime=[x(2);-w*(r-l)/r*x(1);x(4);-w*(r-l)/r*x(3);x(6);-w*(r-l)/r*x(5)-g];
    end

end
霍希勒

我认为您可以简单地通过设置Xt为此来完成您想要的,这样在每次迭代中只绘制最后一个向量:

Xt = [x(end,1) x(end,3) x(end,5)];

另外,您提到“除ode45接受个人喜欢的数字样本外,一切都在起作用”。您可以ode45简单地通过更改来告诉您使用固定步长输出tspan

tspan = 0:dt:time;

在哪里dt = 1/time(或者您可以使用linspace)。这与使用固定步长求解器不是一回事–请阅读我对这个问题的答案,以便对此有所了解。

我认为您没有正确更新动画。您更新时间,但不更新初始条件。因此,您可以在while循环的每次迭代中通过相同的路径进行集成您是否有理由在每次迭代中调整结束时间?您是否正在寻找振荡周期或其他东西?

另外,您的动画制作方法相当粗糙/效率低下。您应该阅读有关可以通过Matlab的ODE求解器设置输出选项odeset的信息。特别是'OutputFcn'您甚至可以使用和/或查看一些内置输出函数的代码,例如,在命令窗口中键入edit odeplotedit odephas3这是我为您创建的一个简单的输出函数:

function elasticPendulum
totalTime = 20;
stepsPerSec = 10;
X = 1; Vx = 0;
Y = 0; Vy = 0;
Z = 1.1; Vz = 0;
w = 3; g = 9; l = 1;

opts = odeset('OutputFcn',@(t,x,flag)arrowplot(t,x,flag,w,l,g));
tspan = linspace(0,totalTime,totalTime*stepsPerSec);
x0 = [X,Vx,Y,Vy,Z,Vz];
ode45(@(t,x)F(t,x,w,l,g),tspan,x0,opts);

function xprime=F(t,x,w,l,g)    %#ok<INUSL>
r=sqrt(x(1)^2+x(3)^2+x(5)^2);
xprime=[x(2);-w*(r-l)/r*x(1);x(4);-w*(r-l)/r*x(3);x(6);-w*(r-l)/r*x(5)-g];

function status=arrowplot(t,x,flag,w,l,g)   %#ok<INUSL>
persistent h; % Handle for moving arrow
status = 0;
o = [0, 0, 0];
switch flag
    case 'init'
        axis([-2 2 -2 2 -10 2]); grid on; hold on;
        Xeq = [0, 0, -(g/(w^2)+l)];
        arrow(o,Xeq,'Length',5);
        plot3(x(1,:),x(3,:),x(5,:),'dk');  % Initial position
        Xt = [x(1,end) x(3,end) x(5,end)];
        h = arrow(o,Xt,'Length',5);        % Initial arrow, get handle
    case 'done'
        hold off; status = 1;
    otherwise
        plot3(x(1,:),x(3,:),x(5,:),'dk');        % Plot new positions
        Xt = [x(1,end) x(3,end) x(5,end)];
        arrow(h,'Start',o,'Stop',Xt,'Length',5); % Update arrow
        pause(0.1);
end

plot3每次迭代(中的otherwise情况arrowplot的调用仍然效率低下,因为它添加了新的高级绘图对象,从而占用了更多内存。更好/更快的方法是从第一个调用获取句柄plot3并使用setget添加新的数据点。请参阅代码,odeplot以及odephas3如何执行此操作(有点高级)。

请注意,我还如何通过匿名函数而不是通过创建子函数来传递参数。这有点风格问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何基于R中的位置矢量替换字符串矢量中的字符?

来自分类Dev

如何创建位置矢量?

来自分类Dev

如何在matlab中解决带有某些终端条件的ODE系统?

来自分类Dev

Matlab中的ODE系统

来自分类Dev

使用迭代器时如何访问对象在矢量中的位置?

来自分类Dev

如何解析 AngularJS 中的位置路径?

来自分类Dev

如何根据我在android中遵循的路径返回上一个活动?

来自分类Dev

如何使svg遵循路径?

来自分类Dev

使图像遵循 matlab/octave 中的螺旋路径/方程

来自分类Dev

如何系统地遵循递归?

来自分类Dev

如何使Okular遵循系统主题?

来自分类Dev

+ 在矢量位置括号中的效果 [...]

来自分类Dev

在p5js中使用速度和位置矢量对粒子进行3D定向

来自分类Dev

如何基于组创建(在r中)UTM位置之间的距离矢量?

来自分类Dev

如何在Matlab中存储矢量坐标

来自分类Dev

在MATLAB中,如何计算矢量周围的方差?

来自分类Dev

如何在Matlab中旋转矢量数据

来自分类Dev

在Rails中创建后如何更改路径的位置?

来自分类Dev

如何在angularjs中获取先前的路径位置

来自分类Dev

如何在Unix中向我的路径添加位置?

来自分类Dev

在MATLAB中使用ode45时如何在函数中更改参数

来自分类Dev

如何旋转TPathData(矢量路径)?

来自分类Dev

Sublime text 2可以遵循文件中的路径吗?

来自分类Dev

使图像遵循JQuery中的圆形路径的最佳方法?

来自分类Dev

如何在系统路径中找到文件的位置,例如get-command或在哪里?

来自分类Dev

如何使samba遵循共享路径之外的symlink

来自分类Dev

如何使SKSpriteNode来回遵循相同的路径?

来自分类Dev

如何使SKSpriteNode来回遵循相同的路径?

来自分类Dev

如何使samba遵循共享路径之外的symlink

Related 相关文章

  1. 1

    如何基于R中的位置矢量替换字符串矢量中的字符?

  2. 2

    如何创建位置矢量?

  3. 3

    如何在matlab中解决带有某些终端条件的ODE系统?

  4. 4

    Matlab中的ODE系统

  5. 5

    使用迭代器时如何访问对象在矢量中的位置?

  6. 6

    如何解析 AngularJS 中的位置路径?

  7. 7

    如何根据我在android中遵循的路径返回上一个活动?

  8. 8

    如何使svg遵循路径?

  9. 9

    使图像遵循 matlab/octave 中的螺旋路径/方程

  10. 10

    如何系统地遵循递归?

  11. 11

    如何使Okular遵循系统主题?

  12. 12

    + 在矢量位置括号中的效果 [...]

  13. 13

    在p5js中使用速度和位置矢量对粒子进行3D定向

  14. 14

    如何基于组创建(在r中)UTM位置之间的距离矢量?

  15. 15

    如何在Matlab中存储矢量坐标

  16. 16

    在MATLAB中,如何计算矢量周围的方差?

  17. 17

    如何在Matlab中旋转矢量数据

  18. 18

    在Rails中创建后如何更改路径的位置?

  19. 19

    如何在angularjs中获取先前的路径位置

  20. 20

    如何在Unix中向我的路径添加位置?

  21. 21

    在MATLAB中使用ode45时如何在函数中更改参数

  22. 22

    如何旋转TPathData(矢量路径)?

  23. 23

    Sublime text 2可以遵循文件中的路径吗?

  24. 24

    使图像遵循JQuery中的圆形路径的最佳方法?

  25. 25

    如何在系统路径中找到文件的位置,例如get-command或在哪里?

  26. 26

    如何使samba遵循共享路径之外的symlink

  27. 27

    如何使SKSpriteNode来回遵循相同的路径?

  28. 28

    如何使SKSpriteNode来回遵循相同的路径?

  29. 29

    如何使samba遵循共享路径之外的symlink

热门标签

归档