非线性ode及在工程中的应用第一次大作业

题目:考察具有粘性阻尼的单摆绘制其在区域中的相图。

首先编写一段 MAPLE 子程序 pendphaseplot 如下:

pendphaseplot := proc (c, k, ui, uf, n1, vi, vf, n2, ti, tf, n, vu, vv)

local s, i, a, j, b, sys, fcns, q, p; s := {};

定义变量

for i from 0 to n1 do a := ui+i*(uf-ui)/n1;

a是u变量变化的步长

for j from 0 to n2 do b := vi+j*(vf-vi)/n2;

b是v变量变化的步长

sys := diff(u(t), t) = v(t), diff(v(t), t) = -k*sin(u(t))-c*v(t);

定义系统

fcns := {u(t), v(t)};

定义方程(带入dsolve中用的,就是个过程变量)

q := dsolve({u(0) = a, v(0) = b, sys}, fcns, type = numeric, method = rkf45);

带入不同的初值求得相轨迹

p := plots[odeplot](q, [u(t), v(t)], ti .. tf, numpoints = n, view = [vu, vv], scaling = CONSTRAINED);

将上一步求得的相轨迹作出相应的图像(通过数值解作图)

s := s union p

union是取并集的操作,其实就是用s保存p

end do

end do;

plots[display]([op(s)])

op的含义就是提取整个s用于作图,从这里感觉maple编程是一个比较笨重的语言,当然了,用op也可以提取固定的一些项,详细看帮助即可

end proc

至此整个程序结束

命令行:

无阻尼情况:

pendphaseplot(0, 2, -4, 4, 10, -3, 3, 6, -5, 5, 100, -10 .. 10, -5 .. 5)

有阻尼的情况:

pendphaseplot(.5, 2, -4, 4, 8, -3, 3, 6, -5, 5, 100, -10 .. 10, -6 .. 6)

求解过程到这里结束,原始的题目和代码出自胡海岩编写的《应用非线性动力学》,csdn不允许上传课本资料。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值