Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >绘制微分方程系统函数外的变量

绘制微分方程系统函数外的变量
EN

Stack Overflow用户
提问于 2019-01-08 10:15:43
回答 1查看 109关注 0票数 1

我有一个函数中的4-4微分方程组(subsystem4),我用odeint函数解决了它。我设法画出了系统的结果。我的问题是我想要绘制和一些其他方程(例如x,y,vcxdot...)它们都包含在相同的函数(subsystem4)中,但我得到了NameError:没有定义名称'vcxdot‘。此外,我想使用其中的一些方程(不仅是方程系统的结果)作为下面的微分方程系统的输入,并绘制同一时间段(t)内的所有方程。我已经使用Matlab-Simulink做到了这一点,但由于Simulink块的存在,它要容易得多。如何访问和绘制函数(subsystem4)的所有方程式,并将它们用作以下系统的输入?我是python新手,我使用的是Python 2.7.12。提前谢谢你!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt

def subsystem4(u,t):
    added_mass_x = 0.03 # kg
    added_mass_y = 0.04
    mb = 0.3 # kg
    m1 = mb-added_mass_x
    m2 = mb-added_mass_y
    l1 = 0.07 # m
    l2 = 0.05 # m
    J = 0.00050797 # kgm^2
    Sa = 0.0110 # m^2
    Cd = 2.44
    Cl = 3.41
    Kd = 0.000655 # kgm^2
    r = 1000 # kg/m^3
    f = 2 # Hz
    c1 = 0.5*r*Sa*Cd
    c2 = 0.5*r*Sa*Cl
    c3 = 0.5*mb*(l1**2)
    c4 = Kd/J
    c5 = (1/(2*J))*(l1**2)*mb*l2
    c6 = (1/(3*J))*(l1**3)*mb


    vcx = u[0]
    vcy = u[1]
    psi = u[2]
    wz = u[3]

    x = 3 + 0.3*np.cos(t)
    y = 0.5 + 0.3*np.sin(t)
    xdot = -0.3*np.sin(t)
    ydot = 0.3*np.cos(t)
    xdotdot = -0.3*np.cos(t)
    ydotdot = -0.3*np.sin(t)
    vcx = xdot*np.cos(psi)-ydot*np.sin(psi)
    vcy = ydot*np.cos(psi)+xdot*np.sin(psi)

    psidot = wz
    vcxdot = xdotdot*np.cos(psi)-xdot*np.sin(psi)*psidot-ydotdot*np.sin(psi)-ydot*np.cos(psi)*psidot
    vcydot = ydotdot*np.cos(psi)-ydot*np.sin(psi)*psidot+xdotdot*np.sin(psi)+xdot*np.cos(psi)*psidot
    g1 = -(m1/c3)*vcxdot+(m2/c3)*vcy*wz-(c1/c3)*vcx*np.sqrt((vcx**2)+(vcy**2))+(c2/c3)*vcy*np.sqrt((vcx**2)+(vcy**2))*np.arctan2(vcy,vcx)
    g2 = (m2/c3)*vcydot+(m1/c3)*vcx*wz+(c1/c3)*vcy*np.sqrt((vcx**2)+(vcy**2))+(c2/c3)*vcx*np.sqrt((vcx**2)+(vcy**2))*np.arctan2(vcy,vcx)

    A = 12*np.sin(2*np.pi*f*t+np.pi)
    if A>=0.1:
        wzdot = ((m1-m2)/J)*vcx*vcy-c4*wz**2*np.sign(wz)-c5*g2-c6*np.sqrt((g1**2)+(g2**2))
    elif A<-0.1:
        wzdot = ((m1-m2)/J)*vcx*vcy-c4*wz**2*np.sign(wz)-c5*g2+c6*np.sqrt((g1**2)+(g2**2))
    else:
        wzdot = ((m1-m2)/J)*vcx*vcy-c4*wz**2*np.sign(wz)-c5*g2


    return [vcxdot,vcydot,psidot,wzdot]

u0 = [0,0,0,0]
t = np.linspace(0,15,1000)
u = odeint(subsystem4,u0,t)

vcx = u[:,0]
vcy = u[:,1]
psi = u[:,2]
wz = u[:,3]

plt.figure(1)
plt.subplot(211)
plt.plot(t,vcx,'r-',linewidth=2,label='vcx')
plt.plot(t,vcy,'b--',linewidth=2,label='vcy')
plt.plot(t,psi,'g:',linewidth=2,label='psi')
plt.plot(t,wz,'c',linewidth=2,label='wz')
plt.xlabel('time')
plt.legend()
plt.show()
EN

回答 1

Stack Overflow用户

发布于 2019-01-08 12:45:42

对于直接绘制导数图的问题,您可以通过直接在解决方案上再次调用ODE函数来获得速度,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
u = odeint(subsystem4,u0,t)
udot = subsystem4(u.T,t)

并通过以下方式获得单独的速度阵列

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vcxdot,vcydot,psidot,wzdot = udot

在这种情况下,该函数涉及分支,这对它的矢量化调用不是很友好。有向量化分支的方法,但最简单的变通方法是手动循环遍历解决方案点,这比工作的矢量化实现慢。这将再次获得像odeint这样的元组列表,因此结果必须作为列表的元组进行转置,以便“轻松”分配给单个数组变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
udot = [ subsystem4(uk, tk) for uk, tk in zip(u,t) ]; 
vcxdot,vcydot,psidot,wzdot = np.asarray(udot).T

这可能会使计算看起来加倍,但并不是真的,因为解点通常是从求解器的内部步长点插值的。在积分过程中,常微分方程函数的求值通常发生在与解点不同的点上。

对于其他变量,将位置和速度的计算提取到函数中,以便仅在一个位置具有常量和组合:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def xy_pos(t): return 3 + 0.3*np.cos(t), 0.5 + 0.3*np.sin(t)
def xy_vel(t): return -0.3*np.sin(t), 0.3*np.cos(t) 
def xy_acc(t): return -0.3*np.cos(t), -0.3*np.sin(t)

或类似的,然后您可以在ODE函数内部和在准备绘图时使用。

Simulink最有可能做的是收集所有块的所有方程,并将其形成一个大的常微分方程系统,然后立即求解整个状态。您将需要实现类似的东西。一个大的状态向量,每个子系统知道它的状态对应的切片。导数向量来获取其特定的状态变量,并将导数写入其中。然后,导数的计算可以使用在子系统之间传递的值。

你试图做的事情,分别解决子系统,只对resp有效。可能会导致order 1集成方法。所有高阶方法都需要能够同时在方法的前几个阶段计算出的某个方向上转移状态,并在那里评估整个系统。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54089599

复制
相关文章
【Flutter 绘制番外】svg 文件与绘制 (上)
对一些有趣的绘制 技能和知识, 我会通过 [番外篇] 的形式加入《Flutter 绘制指南 - 妙笔生花》小册中,一方面保证小册的“与时俱进” 和 “活力”。另一方面,是为了让一些重要的知识有个 好的归宿。本文源码可以看这里。 另外一个好消息: 《Flutter 绘制指南 - 妙笔生花》小册源码 idraw 已经完成了 空安全 的转化。
张风捷特烈
2022/03/18
9870
【Flutter 绘制番外】svg 文件与绘制 (上)
【Flutter 绘制番外】svg 文件与绘制 (中)
上一篇《【Flutter 绘制番外】svg 文件与绘制 (上)》中,我们对 H、V、L 三个 svg 指令做了介绍,并通过正则表达式进行解析,生成 Flutter 绘制中的 Path 路径。 本篇中将会介绍两个指令 C 和 Q ,它们分别代表 三次贝塞尔曲线(cubic) 和 二次贝塞尔曲线(quadratic) 。对这两个指令进行解析后,就可以让掘金的 svg 图标完美显示了:
张风捷特烈
2022/03/25
1.1K0
【Flutter 绘制番外】svg 文件与绘制 (中)
一阶常微分方程方向场图的绘制
方向场图可用于可视化一阶常微分方程的可能解。方向场图由XY平面网格中未知函数斜率的短线组成。y(x) 在XY平面上任意一点的斜率由微分方程
用户6021899
2023/03/03
1.2K0
一阶常微分方程方向场图的绘制
Flutter 绘制番外 | 将你的 Canvas 绘制保存为图片
光阴似箭,《Flutter 绘制指南 - 妙笔生花》 转眼间已经发布两年半了,不知道各位练习得怎么样。有不少朋友问过如何将 Canvas 绘制的内容保存为图片,最近在做的东西刚好涉及了这块,通过本文来分享一下。
张风捷特烈
2023/04/23
1.9K0
Flutter 绘制番外 | 将你的 Canvas 绘制保存为图片
Matlab通过ode系列函数求解微分方程
MATLAB有很多用于求解微分方程的内置函数。MATLAB包含了用于求解常微分方程(ODE)的函数,微分表达式一般如下
用户9925864
2022/07/27
1.1K0
Matlab通过ode系列函数求解微分方程
【Flutter 绘制番外】svg 终篇 - 路径指令
上两篇我们通过对 svg 路径 M/H/V/L/C/Q/Z 几个指令的解析。把 掘金 logo 的 svg ,转化为 Flutter 的原生路径绘制,并且附加了一些绘制效果。
张风捷特烈
2022/04/15
1.5K0
【Flutter 绘制番外】svg 终篇 - 路径指令
系统函数 查看/修改/删除 环境变量
通过系统提供的函数,我们一样可以查看、修改和删除环境变量的内容,使用使用函数分别时 getenv()、setenv()、unsetenv(),它们的用法如下:
我与梦想有个约会
2023/10/20
2220
系统函数 查看/修改/删除 环境变量
OpenCV这么简单为啥不学——1.4、基础标识绘制(绘制线line函数、rectangle函数绘制四边形、circle函数绘制圆形、putText函数绘制文字、putText绘制中文文字)
OpenCV这么简单为啥不学——1.4、基础标识绘制(绘制线line函数、rectangle函数绘制四边形、circle函数绘制圆形、putText函数绘制文字、putText绘制中文文字)
红目香薰
2023/02/10
5590
OpenCV这么简单为啥不学——1.4、基础标识绘制(绘制线line函数、rectangle函数绘制四边形、circle函数绘制圆形、putText函数绘制文字、putText绘制中文文字)
Simulink建模与仿真(9)-动态系统模型及其Simulink表示(连续系统模型及表示)
与离散系统不同,连续系统是指系统输出在时间上连续变化,而非仅在离散的时刻采样取值。连续系统的应用非常广泛,下面给出连续系统的基本概念。
用户9925864
2023/09/19
8370
Simulink建模与仿真(9)-动态系统模型及其Simulink表示(连续系统模型及表示)
Qt绘制COS函数
上面代码展示的是大致的绘图思路。如果想画出来非常好看的图像,那么就需要精细的计算窗口尺寸和画点之间的关系。只有这样细致的比较计算之后才能画出来非常满意的图形。当然这也和采集的点的样本多少有极大的关系。
zy010101
2020/04/14
1.6K0
13.1 函数中的变量
在函数中,我们可以看到也进行了变量的使用,那函数中的变量和函数外的变量到底有什么区别呢?
大牧莫邪
2018/08/27
1.4K0
MySQL的系统变量
MySQL的各种选项除了可以通过命令行和配置文件进行设置,还可以通过服务器的系统变量进行设置。本篇将介绍MySQL服务器的系统变量。
MySQLSE
2023/08/31
3571
MySQL的系统变量
函数内变量
运用函数,我们可以把经常运行的多行代码封装起来。运行时,直接调用函数,就可以一次执行多个操作。但是虽然我们用函数简单封装了个流程,大多情况,我们可能也只需最后的运行结果,但有时,我们还是需要中间的运行变量,做一些检查,分析操作等。即,我们需要保存函数内的局部变量。
派大星在吗
2021/12/15
6140
含纳维-斯托克斯方程(气象学)实例,微分方程 VS 机器学习
微分方程(DE)与机器学习(ML)类数据驱动方法都足以驱动 AI 领域的发展。二者有何异同呢?本文进行了对比。
气象学家
2021/01/08
2.1K0
含纳维-斯托克斯方程(气象学)实例,微分方程 VS 机器学习
微分方程VS机器学习,实例讲解二者异同
微分方程(DE)与机器学习(ML)类数据驱动方法都足以驱动 AI 领域的发展。二者有何异同呢?本文进行了对比。
机器之心
2020/12/03
1.2K0
微分方程VS机器学习,实例讲解二者异同
“疫”外求职 | Treemap绘制COVID-19阵列图
Hi,我叫treemap,从事R绘图行业的经验丰富,干过层次结构的空间填充可视化,干过树地图的绘制,干过HCL颜色空间的搭配,干过treecolors对参数的设置,同时,培养了我的徒弟itreemap对树状图形的创建,就是没干过version2.4-2的升级......在2020年的春天,鸟语花香,万物复苏,在这春意盎然的日子,我收获了友谊。我有四个好搭档帮助我决定调色板的映射,他们是参数映射mapping、调色板palette、数值“value”和手动“manual”。“value”和“manual”两者的唯一区别是mapping的默认值。“value”认为调色板是一个发散的调色板(比如ColorBrewer的“RdYlBu”),并将其映射为这样一种方式:0对应中间颜色(通常是白色或黄色),-max(abs(values)对应左端颜色,max(abs(values))对应右端颜色。而“manual”简单地将min(值)映射为左端颜色,max(值)映射为右端颜色,mean(范围(值))映射为中间颜色。 此外,我喜欢看人绘制value type mapping,不喜欢看人To behave in such a way,value type mapping出英雄。喜欢manual type和custom type mapping ,不喜欢lazy,manual type和custom mapping可创新,其实不喜欢程序出bug,互联网+的社会,谈的都是Big Data,能用代码解决的事情何必用office纠结,好啦,请把身边的RStudio打开,代码运行完成,爱我的请举手!
黑妹的小屋
2020/08/06
6810
Matlab 刚性问题求解器-ode23s
ode23s(stiff differential equation solver)是MATLAB中的一种求解刚性(stiff)微分方程的数值方法。刚性微分方程通常具有多个时间尺度差异较大的变量,并且其中至少有一个变量具有快速变化的特性。
用户9925864
2023/09/05
6400
Matlab 刚性问题求解器-ode23s
Android绘制函数图象及正弦函数的介绍
零、前言 这篇是为了下一篇做点铺垫,也是来复习一些数学基础 本篇属于休闲娱乐,不要太较真,小科普一下,不喜勿喷 本文知识点前4点你可以随便看看,但第5点非常重要,本文源码见捷文规范 本文知识点: 1)数学函数的概念 2)直角坐标系的下函数图形 3)极坐标下的函数图象 4)参数方程下的函数图形 5)正弦函数的详细分析(为下一篇文章做铺垫) ---- 一、数学函数的概念: 1.高中数学必修1: 设A,B为非空的数集,如果按照某种确定的对应关系f, 使对于集合A中的任意的任意一个数x
张风捷特烈
2019/01/03
2.7K0
函数的变量+返回值
函数的变量: 局部变量 和 全局变量 Python中的任何变量都有特定的作用域 在函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量我们称之为局部变量 在一个文件顶部定义的变量可供文件中的任何函数调用,这些可以为整个程序所使用的变量称为全局变量 (1)、局部函数: #!/usr/bin/python def fun(): x = 100 ##定义一个内部的函数是 x = 100,只在fun() 内部有效。 print x fun() 执行结果: [[e
老七Linux
2018/05/31
4.9K0
多变量函数优化
模拟退火算法借鉴了统计物理学的思想,是一种简单、通用的启发式优化算法,并在理论上具有概率性全局优化性能,因而在科研和工程中得到了广泛的应用。
大发明家
2021/12/05
1.5K0

相似问题

绘制微分方程图

11

变量外函数

11

绘制python中的微分方程

14

函数外的智能函数变量

11

Anylogic中的微分方程系统

130
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文