python解化学反应(python 化学)

本文目录一览:

python的解方程能力好像不是很强啊,为什么复杂一点的指数方程就求不出来了???

内置的算法不支持这么复杂的方程求解,需要编写特别的算法。

用python如何得到一个方程的多个解

方法/步骤

用Python解数学方程,需要用到Python的一个库——SymPy库。

SymPy是符号数学的Python库,它的目标是成为一个全功能的计算机代数系统,同时保持代码简洁、易于理解和扩展。

如果你的电脑上还没有安装sympy库,那就赶紧安装吧,安装命令:

pip3 install sympy

请点击输入图片描述

先来解一个简单点的方程吧。

题目: 5x + 20 = 100

先直接上代码:

from sympy import *

x = Symbol(‘x’)

print(solve([5*x + 20 – 100], [x]))

请点击输入图片描述

再来一个复杂点的二元一次方程吧。

题目:3x + 4y =49, 8x- y = 14

代码如下:

from sympy import *

x = Symbol(‘x’)

y = Symbol(‘y’)

print(solve([3*x + 4*y – 49, 8*x – y – 14], [x, y]))

请点击输入图片描述

有没有发现规律呢,简单总结一下:

1)变量赋值,使用symbol函数转换;

2)将方程式移到方程的左边,使右边等于0;

3)使用solve函数解方程。

当然了,python的基础语法必须掌握,至少需要掌握python最基础的算数运算符。

+  加 —- 两个对象相加

–  减 —– 得到负数或是一个数减去另一个数

*  乘 —– 两个数相乘或是返回一个被重复若干次的字符串

/  除 —– x 除以 y

%  取模 —– 返回除法的余数

**  幂 —– 返回x的y次幂

log()  对数—–对数 log()

下面来个难度大点的方程。

请点击输入图片描述

代码如下:

from sympy import *

t = Symbol(‘t’)

x = Symbol(‘x’)

m = integrate(sin(t)/(pi-t), (t, 0, x))

print(integrate(m, (x, 0, pi)))

请点击输入图片描述

用python来解决问题?

代码如下:

s=[1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,1]

s1 = []

for i in range(1,len(s) + 1):

if i % 5 == 0:

s1.append(s[i-5:i])

print(s1)

输出:

[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18, 19, 20]]

使用python算法如何解

 解决方案

从一些测试案例开始总是好的做法。让我们从小的案例开始,看看能否找到某种规律。

. N = 1,1种爬楼方式:[1]

. N = 2,2种爬楼方式:[1,1],[2]

. N = 3,3种爬楼方式:[1,2],[1,1,1],[2,1]

. N = 4,5种爬楼方式:[1,1,2],[2,2],[1,2,1],[1,1,1,1],[2,1,1]

你有没有注意到什么?请看N = 3时,爬完3阶楼梯的方法数量是3,基于N = 1和N = 2。存在什么关系?

爬完N = 3的两种方法是首先达到N = 1,然后再往上爬2步,或达到N = 2再向上爬1步。所以 f(3) = f(2) + f(1)。

这对N = 4是否成立呢?是的,这也是成立的。因为我们只能在达到第三个台阶然后再爬一步,或者在到了第二个台阶之后再爬两步这两种方式爬完4个台阶。所以f(4) = f(3) + f(2)。

所以关系如下: f(n) = f(n – 1) + f(n – 2),且f(1) = 1和f(2) = 2。这就是斐波那契数列。

def fibonacci(n):

if n = 1:

return 1

return fibonacci(n – 1) + fibonacci(n – 2)

当然,这很慢(O(2^N))——我们要做很多重复的计算!通过迭代计算,我们可以更快:

def fibonacci(n):

a, b = 1, 2

for _ in range(n – 1):

a, b = b, a + b

return a

现在,让我们尝试概括我们学到的东西,看看是否可以应用到从集合X中取步数这个要求下的爬楼梯。类似的推理告诉我们,如果X = {1,3,5},那么我们的算法应该是f(n) = f(n – 1) + f(n – 3) + f(n – 5)。如果n0,那么我们应该返回0,因为我们不能爬负数。

def staircase(n, X):

if n  0:

return 0

elif n == 0:

return 1

elif n in X:

return 1 + sum(staircase(n – x, X) for x in X if x  n)

else:

return sum(staircase(n – x, X) for x in X if x  n)

这也很慢(O(|X|^N)),因为也重复计算了。我们可以使用动态编程来加快速度。

每次的输入cache[i]将包含我们可以用集合X到达台阶i的方法的数量。然后,我们将使用与之前相同的递归从零开始构建数组:

def staircase(n, X):

cache = [0 for _ in range(n + 1)]

cache[0] = 1

for i in range(n + 1):

cache[i] += sum(cache[i – x] for x in X if i – x  0)

cache[i] += 1 if i in X else 0

return cache[-1]

现在时间复杂度为O(N * |X|),空间复杂度为O(N)。

计算化学,有python基础还有必要学习matlab么

(利益相关:我 matlab 和 python 都用,我是搬砖的不是写代码的)

从我一些搞计算化学的朋友那里看,基本用的都是 fortran, c/c++,或者就是商用的量化从头计算软件 Gaussian, Molpro, Cfour 等等

计算化学大体上分成三块:

1.搞算法的。这帮人基本上是数学家+计算机科学家,涉及最底层的代码、算法、数据结构,自然得用底层语言 c 或者 fortran 等等

2.搞量化从头计算的。这帮人大体是用已经开发好的量化计算软件(如开头所述)。量化从头计算涉及专业性很强的解薛定谔方程的算法,据个人所知,matlab 这种大型商业公司的软件花精力去专门做一个量化从头计算的包肯定是亏本的(相比而言经济学、统计学等等的包还有点搞头)。不过印象中也有看到过用 matlab 做很粗浅的量化计算的文献。

3. 搞分子动力学模拟的。这帮人主要是用经典力学方法计算。用啥语言的都有。

对于 2 和 3 来说,个人以为,选择什么语言通常会考量它的计算效率、易用性和扩展性,以及——组里以前用的啥!matlab 做矩阵运算非常好,但价格不菲啊!python 现在越来越流行,又是免费的,但是单纯用 python 计算速度可能会差一点。此外,它们应该都没有量化从头计算对应的扩展包。

如果你的方向更多的是用现成的量化计算软件去算新的化学反应体系,那 matlab 估计不怎么用得到。如果你的方向更多的偏向于统计,并且设计很多自己写代码的部分,那选择一个自己熟悉的、运算速度满足项目需求的语言就可以了。毕竟 matlab 和 python 都有接口直接调用 c/c++,你要嫌慢最后总归回到最底层上面去。

题外话,计算化学找不到出路都转码农去了。如果你真的对编程感兴趣,底层语言一定是要学的。千万不要停留在 matlab 这种要花钱的解释性语言上面。如果你对商业感兴趣,用 matlab 可以干很多别的事儿(不过 python 应该也都能干,数据挖掘什么的)

最后说一句:大部分时候,说某某语言慢的人,都是自己代码写得烂。本人曾优化了组里留下来的 matlab 代码,把速度提了几十倍。每种语言都有其长处,但最终你的算法写得好,才能真正跑起来。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/235727.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 11:56
下一篇 2024-12-12 11:56

相关推荐

  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29

发表回复

登录后才能评论