python解常微分方程_Python-sympy.dsolve求解常微分方程(组)

这里分别介绍怎么利用sympy.dsolve求解常微分方程和常微分方程组。

#首先利用sympy.dsolve求解单个的常微分方程:

#代码

from sympy import Function, dsolve, Derivative, symbols

from sympy.abc importt

#sympy.abc表示This module exports all latin and greek letters as Symbols。上行代码意思是导入字母t,因为t字母在dsolve函数中要被使用,而dsolve函数中的x这里不需要导入是因为在下一行会声明x变量

x = Function('x')

#上行代码等效于x = symbols('x', cls=Function),意思是声明x为因变量函数

result=dsolve(Derivative(x(t), t, 4) - 22*Derivative(x(t), t, 2) - 24*x(t))

#result=dsolve(Derivative(x, t, 4) - 22*Derivative(x, t, 2) - 24*x),这样写是不可以的

#Derivative(x(t), t, i)可以写成diff(x(t), t, i),或者写成Derivative(x(t), t, t, t, t)和diff(x(t), t, t, t, t)都表示函数x(t)对t的四阶导数,注意如果要使用diff函数,在第一行代码中要加入from sympy import diff。此外,diff()除了作为函数使用,还可以作为一个表达式的属性,如x(t)对t的四阶导数可以表示为x(t).diff(t).diff(t).diff(t).diff(t)

print (result)

#result=Eq(x(t), C1*exp(-t*sqrt(11 + sqrt(145))) + C2*exp(t*sqrt(11 + sqrt(145))) + C3*sin(t*sqrt(-11 + sqrt(145))) + C4*cos(t*sqrt(-11 + sqrt(145))))

#其次利用sympy.dsolve求解常微分方程组:

#代码

from sympy import Function, dsolve, Derivative, symbols, Eq

#from sympy.abc importt

t=symbols('t')

x, y=symbols('x, y', cls=Function)

#注意这里的x和y之间的逗号可以省略,即可以写成x, y=symbols('x y', cls=Function)。这行代码等效于x=Function('x')和y=Function('y')

eq=(Eq(Derivative(x(t),t, 2), 12*(x(t) + y(t))), Eq(Derivative(y(t),t, 2), 12*x(t) + 10*y(t)))

#注意这里使用了Eq()函数,所以在第一行导入了from sympy import Eq。Eq()函数内的逗号相当于是等于号,等号左边和右边分别为微分方程左边和右边的表达式,如对于本例的第一个微分方程,除了写成Eq(Derivative(x(t),t, 2),12*(x(t)+y(t)))外,还可以写成Eq(Derivative(x(t),t, 2)-12*(x(t)+y(t)), 0),注意这后面的0不能省略。

#同样地,对于第一个例子求解单个微分方程的情况,如果要使用Eq函数,则应该写成eq=Eq(Derivative(x(t), t, 4) - 22*Derivative(x(t), t, 2) - 24*x(t), 0)和result=dsolve(eq),并且要在第一行代码导入Eq函数。

#如果在该例中,我们不想使用Eq()函数,则上行代码应该写为eq=(Derivative(x(t), t, 2)-12*(x(t) + y(t)), Derivative(y(t), t, 2)- 12*x(t) - 10*y(t))

#简而言之就是,如果要使用Eq函数,则需要写成微分方程等号左右两边的表达式,当右边为0时,也需要写出来;如果不使用Eq函数,则只需要写出微分方程等号左边的表达式,此时等号右边应为0,且不需要写出来。

result=dsolve(eq)

print (result)

#result=[Eq(x(t), 12*C1*exp(t*CRootOf(l**4 - 22*l**2 - 24, 0)) + 12*C2*exp(t*CRootOf(l**4 - 22*l**2 - 24, 1)) + 12*C3*exp(t*CRootOf(l**4 - 22*l**2 - 24, 2)) + 12*C4*exp(t*CRootOf(l**4 - 22*l**2 - 24, 3))), Eq(y(t), C1*(-12 + CRootOf(l**4 - 22*l**2 - 24, 0)**2)*exp(t*CRootOf(l**4 - 22*l**2 - 24, 0)) + C2*(-12 + CRootOf(l**4 - 22*l**2 - 24, 1)**2)*exp(t*CRootOf(l**4 - 22*l**2 - 24, 1)) + C3*(-12 + CRootOf(l**4 - 22*l**2 - 24, 2)**2)*exp(t*CRootOf(l**4 - 22*l**2 - 24, 2)) + C4*(-12 + CRootOf(l**4 - 22*l**2 - 24, 3)**2)*exp(t*CRootOf(l**4 - 22*l**2 - 24, 3)))]

#CRootOf(表达式, i)应该就是“表达式=0”的第i+1个根(CRootOf(表达式, i)相当于会形成“表达式=0”的根的列表),这一点我还不确定,可以进一步讨论。至于为什么CRootOf中的表达式看着像数字,但却不直接计算出来而是写成式子的形式这一点,我的学Python比较好的同学说是为了语言的形式简便所以利用了表达式的形式,但是我觉得CRootOf中的表达式的I像是复数符号,这一点我还不确定,可以进一步讨论。

我们注意到其实第一个例子的单个微分方程就是第二个例子的微分方程组通过求导和互相代入得到的,因此第一个例子中求出来的x(t)应该和第二例子求出来的x(t)等价,有兴趣的可以验证这一点(应该会使用到欧拉方程exp(It)=cost+Isint,其中I为复数符号),这一点我还不确定,可以进一步讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Work@Alibaba 阿里巴巴的企业应用构建之路

作为一个拥有数万名员工的企业,阿里巴巴的企业信息化是怎么做的? 在上周的云栖大会上,来自阿里巴巴信息平台的资深技术专家叶建辉为大家揭开了谜底。 阿里员工是怎么工作的? 可以通过阿里巴巴这三个案例了解: 人脸门禁。今年云…

windows server 2019 服务器搭建的方法步骤(图文)

一、windows server 2019 安装 Vmware 下安装 windows server 2019 。 二、服务器配置 1、 先启用远程功能 右键点击【此电脑】–【属性】,进入“【控制面板\系统和安全\系统】”,点击-【远程设置】 计算机找不到就使用【winE】快捷键 2、在“远程…

传统企业装上“智慧大脑” 看阿里巴巴如何实践AI赋能

“我们找了8位专业律师,和我们的AI机器人做了一个对比,我们的召回率与8位律师相当,但我们的准确率更高些”。 在不久前刚结束的杭州云栖大会上,来自阿里巴巴信息平台事业部的资深算法专家李波,正在向观众展示阿里巴巴…

如何交付机器学习项目:一份机器学习工程开发流程指南

随着机器学习(ML)成为每个行业的重要组成部分,对机器学习工程师(MLE)的需求急剧增长。MLE需要将机器学习技能与软件工程专业知识相结合,为特定应用程序找到高性能的模型,并应对出现的实施挑战—…

国际顶级学界业界大咖云集,9 场技术论坛布道,2019 嵌入式智能国际大会强势来袭!...

2019 嵌入式智能国际大会即将来袭!购票官网:https://dwz.cn/z1jHouwE2019年12月6日-8日,2019嵌入式智能国际大会将在深圳华侨城洲际大酒店举行。本次大会由哈尔滨工业大学(深圳)、清华大学国际研究生院、CSDN、嵌入式视…

qtcreator下拉列表怎么制作_设置EXCEL动态下拉菜单,只需要一个组合键,新手也能快速掌握...

操作版本:OFFICE365在EXCEL制作一级下拉菜单有4种方法,你掌握几种?一文中,我提到了一级下拉菜单的制作方法,其中用公式法来制作下拉菜单可以实现内容增减后下拉菜单的内容也自动增减,这个方法涉及OFFSET函数…

使用Numpy和Opencv完成图像的基本数据分析(Part III)

引言 本文是使用python进行图像基本处理系列的第三部分,在本人之前的文章里介绍了一些非常基本的图像分析操作,见文章《使用Numpy和Opencv完成图像的基本数据分析Part I》和《使用Numpy和Opencv完成图像的基本数据分析 Part II》,下面我们将…

Microsoft Windows Server 2019 1809 iso镜像 企业版本

企业版本 标准版本 默认页面,关闭即可 参考链接: Microsoft Windows Server 2019 1809 iso镜像 http://www.ddooo.com/softdown/131736.htm

【程序猿必备】数据结构与算法精选面试题

有很多计算机科学技术专业的毕业生和程序员申请在Uber和Netflix这样的初创公司、谷歌和阿里巴巴这样的大公司以及Infosys或Luxsoft等以服务为基础的公司从事编程、编码和软件开发工作,但他们中的许多人都不知道,当你申请这些公司的职位时,你会…

技术干货 | 详谈AI芯片分类和关键技术

戳蓝字“CSDN云计算”关注我们哦!作者 | 架构师技术联盟责编 | 阿秃人工智能芯片目前有两种发展路径:一种是延续传统计算架构,加速硬件计算能力,主要以 3 种类型的芯片为代表,即 GPU、 FPGA、 ASIC,但 CPU依…

python中__init__文件的运用_python中__init__.py文件的作用

1、很多地方的文件夹都有__init__.py。网上一般都说,有了这个东西会把它当作一个包,否则import这个文件夹会出错。但这就好像和说python文件中如果有中文就要在开头写 # coding utf8这句话一样,说话囫囵吞枣不带语境,导致误会新手…

2k11补丁php,【西乙】西班牙人4比0 武磊替补出场险造点球

体坛周报全媒体原创北京时间3月21日凌晨4:00,西乙联赛第30轮继续进行,西班牙人坐镇主场迎战洛格罗涅斯。上半场,西班牙人4分钟内打进3球,其中恩巴尔巴两传一射,普阿多头球建功,佩德罗萨劲射破门。下半场迪马…

AI+服务 阿里巴巴如何做智能服务转型?

AI下围棋、AI写作文、AI看病……在智能时代,通过新技术的赋能,行业已经发展到了一个新的高度。那么在服务领域,尤其是企业服务中,智能技术的加入会带来哪些新的想象? 在阿里巴巴,智能服务已经成为企业发展…

tfidf关键词提取_基于TextRank提取关键词、关键短语、摘要,文章排序

之前使用TFIDF做过行业关键词提取,TFIDF仅从词的统计信息出发,而没有充分考虑词之间的语义信息。TextRank考虑到了相邻词的语义关系,是一种基于图排序的关键词提取算法。TextRank的提出TextRank由Mihalcea与Tarau于EMNLP04提出来,…

AliOS Things手势识别应用演示

1. 概述 手势识别作为一种辅助的人机交互方式,在人机脱离的场景下可以提供方便的交互体验。本文介绍基于AliOS Things STM32F413H Discovery开发板实现手势交互功能的演示。 2. 环境搭建 开发板:STM32F413H Discovery(附带麦克风阵列板&a…

idea 个性化定制快捷键

添加和修改快捷键 先找到相应的快捷键 鼠标右击,上面add开头是添加,下面remove是移除快捷键

i 智慧 | 回首30年存储演进之路 再看新数据时代阿里云存储如何革故鼎新?

戳蓝字“CSDN云计算”关注我们哦!作者 | 刘丹 责编 | 阿秃 出品 | CSDN云计算(ID:CSDNcloud)人类以日新月异的速度刷新着科技的成果,其中存储的发展历史尤其悠久,堪称万年进化史。自文明诞生以来&#xff0…

php validate form,laravel 中validate验证规则 利用FormRequest进行数据验证

namespace App\Http\Requests;use Illuminate\Foundation\Http\FormRequest;class AddCartRequest extends FormRequest{public function authorize(){return true;}//这两种写法都是支持的public function rules(){return [amount > [required, integer, min:1],pid > r…