首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用numpy多项式模块-有更好的方法吗?

使用numpy多项式模块-有更好的方法吗?
EN

Code Review用户
提问于 2013-04-03 08:26:46
回答 1查看 1.6K关注 0票数 2

我正在做一个项目,在这个项目中,我需要解决一个四分多项的根源之一,很多很多次。是否有更好的方法,即更快的方法来做到这一点?我应该写我自己的C库吗?示例代码如下所示。

代码语言:javascript
运行
AI代码解释
复制
# this code calculates the pH of a solution as it is
# titrated with base and then plots it.

import numpy.polynomial.polynomial as poly
import numpy as np
import matplotlib.pyplot as plt

# my pH calculation function
# assume two distinct pKa's  solution is a quartic equation
def pH(base, Facid1, Facid2):
    ka1 = 2.479496e-6
    ka2 = 1.87438e-9
    kw = 1.019230e-14
    a = 1
    b = ka1+ka2+base
    c = base*(ka1+ka2)-(ka1*Facid1+ka2*Facid2)+ka1*ka2-kw
    d = ka1*ka2*(base-Facid1-Facid2)-kw*(ka1+ka2)
    e = -kw*ka1*ka2
    p = poly.Polynomial((e,d,c,b,a))
    return -np.log10(p.roots()[3]) #only need the 4th root here

# Define the concentration parameters
Facid1 = 0.002
Facid2 = 0.001
Fbase = 0.005    #the maximum base addition

# Generate my vectors
x = np.linspace(0., Fbase, 200)
y = [pH(base, Facid1, Facid2) for base in x]

# Make the plot frame
fig = plt.figure()
ax = fig.add_subplot(111)

# Set the limits
ax.set_ylim(1, 14)
ax.set_xlim(np.min(x), np.max(x))

# Add my data
ax.plot(x, y, "r-") # Plot of the data use lines

#add title, axis titles, and legend
ax.set_title("Acid titration")
ax.set_xlabel("Moles NaOH")
ax.set_ylabel("pH")
#ax.legend(("y data"), loc='upper left')

plt.show()

根据答案,这是我想出的。还有其他建议吗?

代码语言:javascript
运行
AI代码解释
复制
# my pH calculation class
# assume two distinct pKa's  solution is a quartic equation
class pH:
    #things that don't change
    ka1 = 2.479496e-6
    ka2 = 1.87438e-9
    kw = 1.019230e-14
    kSum = ka1+ka2
    kProd = ka1*ka2
    e = -kw*kProd

    #things that only depend on Facid1 and Facid2
    def __init__(self, Facid1, Facid2):
        self.c = -(self.ka1*Facid1+self.ka2*Facid2)+self.kProd-self.kw
        self.d = self.kProd*(Facid1+Facid2)+self.kw*(self.kSum)

    #only calculate things that depend on base
    def pHCalc(self, base):
        pMatrix = [[0, 0, 0, -self.e],  #construct the companion matrix
                   [1, 0, 0, self.d-base*self.kProd],
                   [0, 1, 0, -(self.c+self.kSum*base)],
                   [0, 0, 1, -(self.kSum+base)]]
        myVals = la.eigvals(pMatrix)
        return -np.log10(np.max(myVals)) #need the one positive root
EN

回答 1

Code Review用户

回答已采纳

发布于 2013-04-03 10:05:21

NumPy首先用Python构造伴随矩阵,然后用LAPACK求解特征值,从而计算多项式的根。伴随矩阵的情况如下所示,它使用您的变量(如a==1):

代码语言:javascript
运行
AI代码解释
复制
[0 0 0 -e
 1 0 0 -d
 0 1 0 -c
 0 0 1 -b]

您应该能够通过在base的每次迭代中直接更新这样的矩阵来节省一些时间。然后利用numpy.linalg.eigvals(m).max()求出最大特征值。见来源

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

https://codereview.stackexchange.com/questions/24671

复制
相关文章
[答疑]关于"业务需求",有什么更好的提法吗?
关于"业务需求",我们一般习惯要求业务部门在提出信息化需求时,应该明确业务需求。按软件工程来讲,这个提法可能不合适,但是,还能什么更好的提法吗? 谢炀(18***743) 9:26:24 业务现状? 譯揮 (252***466) 9:31:11 如:提出如下业务需求 需求原因:为加强公司办公用品管理,控制办公用品费用支出 需求目标:实现公司办公用品的集中管理 需求概述:各部室提交各自办公用品需求清单,办公室收集各部室办公用品需求,一月两次集中交由致远进行采购分发。 潘加宇(3504847) 21:03:44 (“业务需求”的说法不严谨) 如果是涉众提供的,那只能当作【需求的素材】,往往内容散乱,范围飘忽不定。我们根据这些素材来建模。 (上面说的这些,“加强公司办公用品管理”属于废话,“控制办公用品费用支出”是个大目标,比“加强公司办公用品管理”还要高一个级别,也是废话) (“实现公司办公用品的集中管理”--可以提炼“集中”的度量指标,目前怎么就不够“集中”了,改进后,领导如何判断“不错嘛,果然集中了好多”?) (“各部室提交各自办公用品需求清单,办公室收集各部室办公用品需求,一月两次集中交由致远进行采购分发。”--这个只是解决方案,不是“集中”的度量,合适的应该类似于“在维持其他指标不变的前提下,将发放的经手人缩减到原来的20%”)
用户6288414
2022/04/11
5080
Numpy教程:Numpy.random模块使用(新)
在numpy1.17开始,Generator代替RandomState,但是网上的博客多比较老,还都是介绍的RandomState,写这篇文章介绍一下新的numpy.random的基本使用。以下展示的是新版Generator和旧版RandomState的比较:
Crayon鑫
2023/10/10
4980
Numpy教程:Numpy.random模块使用(新)
numpy中random模块使用
在python数据分析的学习和应用过程中,经常需要用到numpy的随机函数,下面我们学习一下具体的使用,本文着重说明各个分布随机数的生成。 numpy.random.rand() rand函数根据给定维度生成[0,1)之间的数据,包含0,不包含1 括号参数为生成随机数的维度 a = np.random.rand(4,2) print(a) #[[ 0.12531495 0.21084176] # [ 0.49285425 0.71383499] # [ 0.34699335 0.04372341] #
听城
2018/04/27
1.5K0
numpy的random模块
For random samples from N(\mu, \sigma^2), use:
hankleo
2020/09/16
3730
ModueNotFoundError: No module named ‘numpy‘:没有名为‘numpy‘的模块完美解决方法
大家好,我是默语,擅长全栈开发、运维和人工智能技术。在今天的博客中,我们将深入探讨一个常见的Python错误——ModuleNotFoundError: No module named 'numpy'。这个错误在使用NumPy库进行科学计算或数据处理时经常会遇到。📊在本文中,我将详细讲解这个错误的原因,以及如何有效地解决它,帮助你顺利进行数据科学或机器学习项目。
默 语
2024/11/22
2.6K0
numpy: IO模块
  NumPy 为 ndarray对象 引入了一个简单的文件格式。 这个npy文件在磁盘文件中,存储重建ndarray所需的数据、图形、dtype和其他信息,以便正确获取数组,即使该文件在具有不同架构的另一台机器上。
JNingWei
2018/09/28
6470
Python中的numpy模块
列表类占用的内存数倍于数据本身占用的内存,Python自带的列表类会储存每一个元素的数据信息,数据类型信息,数据大小信息等。这是因为Python语言是一种可以随时改变变量类型的动态类型语言,而C语言和Fortran语言是静态类型语言,静态类型语言一般会在建立变量前先定义变量,并且不可以修改变量的变量类型。总的来说,numpy模块有以下两个优点:
yhni
2022/11/17
1.8K0
python中的numpy模块
对于python中的numpy模块,一般用其提供的ndarray对象。  创建一个ndarray对象很简单,只要将一个list作为参数即可。  例如:
狼啸风云
2019/01/18
5.1K0
函数和方法有区别吗?
因为在java中叫做方法,而在其他语言c,c++等语言中都叫做函数。而在Python中既有方法也有函数。
人不走空
2024/02/20
3650
【numpy】新版本中numpy(numpy>1.17.0)中的random模块
numpy是Python中经常要使用的一个库,而其中的random模块经常用来生成一些数组,本文接下来将介绍numpy中random模块的一些使用方法。
西西嘛呦
2020/08/26
1.7K0
【numpy】新版本中numpy(numpy>1.17.0)中的random模块
实例方法和静态方法有区别吗?
实例方法和静态方法有区别吗?对于很多人来说,这是一个愚蠢的问题。因为我们都知道它们的区别,实例方法作用于某个具体的上下文对象,该上下文对象可以利用this关键字获得;静态方法则是定义在某个类型中,不存在上下文对象的概念。但是如果我们从函数的角度来看的话,不论是静态方法还是实例方法都是一个用于处理输入参数的操作,貌似又没有什么区别。
蒋金楠
2023/07/10
2310
有比JSON更好的东西吗?
各种数据序列化格式进行比较。基本上,是回答以下问题:“能找到比JSON更好的东西吗?”。 这里找的是用于数据序列化的语言,而不是配置文件。
mariolu
2020/10/28
4.9K0
Numpy模块中的where函数
学习过编程语言的话一定知道一个称为"三目运算符"(三元表达式)的东西,一般来说我们可以把它看成是一个简单的"if-else"语句。下面是在java中的三目表达式(其实在大多数的语言中都是这样的):
触摸壹缕阳光
2020/04/26
1.5K0
Python利用numpy.random模块生成随机数的方法
numpy.random.rand(m,n,p,q…) 生成0到1之间的n个随机数,参数是shape
用户7886150
2021/01/07
1.5K0
快速上手Numpy模块
我们都知道在Python中有一个list的数据类型,list拥有强大的功能,它是元素的集合并且它里面的元素可以是任何Python数据类型,list可以很方便的对它里面的元素进行增删改查的操作。但是对于科学计算来说需要满足下面两点:
触摸壹缕阳光
2020/05/13
1.5K0
数组计算模块NumPy
轴的概念  :轴是NumPy模块里的axis,指定某个axis就是沿着axis做相关操作 
@小森
2024/03/15
1010
数组计算模块NumPy
Numpy数据类型和arange方法、astype方法的使用
除了intc之外,还定义了平台相关的C整数类型short,long,longlong。
benym
2022/07/14
7210
Go是更好的编程语言吗?
第一次接触GO是5年前,14年4月份,也是在我司,全职钻研一周,彼时C++中毒太深,内心排斥其他编程语言,看其他语法总觉得有点怪,而且有“C/C++能做任何事,故无用其他语言之必要”的思想在作祟。
AI科技大本营
2019/05/13
2K0
Go是更好的编程语言吗?
Numpy模块的基础操作-学习笔记
数组是numpy中最常见的数据结构,np.array() 。字符串和数字不能同时存在于同一个数组中。
快学Python
2021/08/09
6120
NumPy进阶修炼|你真的了解NumPy吗
大家好,上周发布的Pandas进阶修炼120题不知道各位做的怎么样,现在NumPy系列也闪亮登场!在上个系列一直让我很遗憾的就是对一些重要的函数没有进一步讲解(当然有读者制作的b站讲解视频填补了这一空缺)。所以在NumPy系列中,为了系统的学习NumPy的各种操作,类似于Pandas120系列的习题肯定少不了,但是还会有一些理论的讲解,我们开始吧!
刘早起
2020/04/15
7760
NumPy进阶修炼|你真的了解NumPy吗

相似问题

有更好的方法来使用SendInput吗?

10

设置NumPy使用的线程数的更好方法

10

有更好的方法来分类这些物品吗?

10

有更好的方法来写插入排序吗?

20

有更好的方法来线程这个类函数吗?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文