0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样用Python制作数值积分程序

454398 来源:网络整理 作者:网络整理 2019-11-13 08:38 次阅读

步骤1:了解算法第1部分:定积分及其使用

怎样用Python制作数值积分程序

我假设您对基本演算的背景了解一点积分。积分很重要,因为它们使您可以将值数组乘以 infinitesimal 长度求和;这在金融,数论,物理,化学以及许多其他领域中很有用。但是,该程序仅允许您计算有限间隔内曲线下方的面积,换句话说,它不会评估反导数-要使用更强大的算法,那。如果您需要在针对其他对象指定的较大程序中求值定积分,或者要检查答案是否需要手工完成,则此算法很有用。

基本定积分表示函数定义的曲线下的面积,例如F(X)。对于确定的积分,我们求两点之间的面积(分别标记为a和b)。在图片中,绿松石区域是我所指的区域,并且确定该区域的公式也显示在该区域中。图片中显示的功能是任意的。

步骤2:了解算法第2部分:数值逼近

计算机需要大量的指令来计算该面积在可用于任何功能的任意函数下,因此您可能熟悉的分析方法没有用,因为它们太特殊了。一种计算机可以实际处理的近似计算积分的方法是,用感兴趣的区域填充用户定义的宽度和高度可变的矩形,然后对所有矩形区域求和,从而完成计算。矩形的刚性将使某些总面积保持不变,因此为什么将其视为近似值;但是,您可以在边界(a和b)之间填充的矩形越多,由于未触摸的区域变得稀疏,所以近似值越准确。由于计算机将执行此任务,因此可以将所需区域中的矩形数量设置为非常大的数量,从而使逼近非常精确。在支持图片中,假设指定区域中的每个矩形都具有相等的宽度。我尽了最大努力使它们在Microsoft Paint中具有相等的宽度,但没有做得最好。

步骤3:了解算法第3部分:中点规则

此规则指定如何在矩形中制作和使用矩形近似值。 “ N个”矩形中的每个矩形必须具有相等的宽度Δx,但每个第n个矩形不能完全相同:变化因子是高度,它随在某个点求值的函数而变化。中点规则之所以得名,是因为您将每个矩形的高度评估为f(x_n),其中“ x_n”是每个矩形的相应中心点,分别位于矩形的左侧或右侧。使用中点就像实现平均值,比起使用右或左时,将使近似值更准确。此步骤的辅助图片总结了如何在数学上定义中点规则。

第4步:创建程序第1部分:下载Python编译器/编辑器

现在,您了解了需要实现的算法,即让计算机为您执行计算的问题。告诉计算机该怎么做的第一步是获取执行此操作的工具。该算法可以用任何语言编码。为简单起见,该程序将使用Python语言进行编码。要命令您的计算机执行Python操作,您将需要一个编辑器,该编辑器以该语言编写指令,然后将其编译为计算机可以理解的机器语言,从而可以执行您要执行的任务。在当今时代,通常将编辑器和编译器集成在一起,但是并不总是如此。您可以使用任何您喜欢的编辑器/编译器,但我将向您展示如何获取我个人最喜欢的Python:Canopy。如果您已经具有编辑器/编译器,则可以跳过这些步骤。

转到https://www.enthought.com/product/canopy/

单击下载机盖

单击与您的操作系统相对应的下载按钮

下载将自动开始。

启动后,请按照滴注说明进行操作执行文件

运行程序

从程序主菜单中单击“编辑器”

在屏幕中央单击“创建新文件”

从这一点开始,您应该看到一个空白的白色窗口,其光标类似于基本的文字处理文档。现在您可以开始编码用于求解定积分的数值积分算法了。后续步骤将提供您要复制的代码片段,并说明该代码片段对整个程序的作用。

步骤5:创建程序第2部分:导入函数和定义变量

将代码复制到图片中。

对于您可能会发现自己进行编码的任何程序,都会有变量。变量是给将要操作并且可以更改的值的名称。在大多数编程语言(如果不是全部)中,您必须先初始化变量,然后程序才能对其进行更改。在此程序中,我将变量命名为“ N”,“ a”和“ b”。这些值分别表示迭代数(矩形的AKA数),下边界和上边界。您可以随意命名这些名称,但要匹配“理解算法第3部分:中点规则”中给出的公式,最好使其保持不变。请注意,它们不仅设置为特定值。这是因为将它们作为输入,以便在运行程序时,程序的用户可以定义值。输入命令后,引号中的文字会在您运行程序时显示,告诉您要键入哪种类型的值。您还将注意到,在输入名称之前使用了“ int”和“ float”。这些术语告诉计算机此值将是什么类型的变量。 “ int”是整数,“ float”是浮点值(即十进制)。应该清楚为什么要这样指定它们。

在“#”之后出现的任何文本都是注释,它使程序员可以以人性化的方式遵循代码;我已经在您的代码中做了一些注释,您将复制这些注释,但是可以随意添加任何对您有帮助的注释。该程序将不会读取任何带有“#”作为命令的内容。

读取“ from math import *”的代码部分告诉程序导入一系列可以使用的数学函数无需自己编写程序。 “ *”仅表示“全部”。将这部分代码读为:从数学库中导入所有函数。这使您可以使用数学函数,例如正弦,余弦,对数,exp等。这些函数可以数学方式集成在代码中。

第6步:创建程序第3部分:创建集成函数

将代码复制到前一个下方的图片中码。

警告:本部分内容繁琐,我想清除一些可能引起混淆的内容。在谈论编程时,“功能”一词会弹出很多。当您谈论数学时,这个词也会弹出很多。因此,从这一点开始,当我在编程意义上谈论一个函数时,我将写“ Python函数”,而当我谈论数学函数时,我将说“数学函数”。在某些时候,我们将使用Python函数作为所讨论数学函数的表示形式。

下一段代码是程序的核心。在这里,定义了一个Python函数,该函数使用中点规则执行数值积分算法。 “ def Integrate(N,a,b)”的读法是:定义一个名为“ Integrate”的函数,该函数接受变量“ N”,“ a”和“ b”,并返回曲线下方的面积(数学函数)这也在“集成” Python函数中定义。您可以在进行编码时以任何方式调用此Python函数,但是将其称为集成是有意义的,因为它确实集成了数学函数。

在这一点上,值得一提的是Python隔离代码块。代码块是执行特定任务的整个部分。不同的编程语言将具有指定的方式来区分这些“块”。对于Python,一个块通过缩进来区分:每个执行任务的部分都有自己的缩进,并且其他缩进块中也可以有缩进块。这代表了任务中的任务,并从根本上告诉了代码执行的顺序。对于已定义的Python函数“集成”,该函数中的所有内容都缩进一个块,从而区分将在该函数中执行的任务。这个Python函数中的缩进部分也执行自己的任务。内容如下:列出命令(任务),在命令后面加冒号,并在其下方缩进该命令的内容。

在定义“集成” Python函数之后,您将立即定义另一个称为f(x)的Python函数。这表示将要积分的数学函数。对于要集成的每个不同的数学函数,您都必须转到此程序行以对其进行更改(与运行程序时定义的变量不同)。每个Python函数都会有一个返回值,这就是当您将其赋值时该函数返回的结果。在这种情况下,抛出的值是“ x”,而这个“ x”项将采用您抛出的值的值,它是一个临时值。

接下来,是一个for循环充当本教程“理解算法”部分的公式中定义的求和。此求和需要更多几个变量,其中一个将作为整个“ Integrate” Python函数的返回值。在for循环之前,我已将这些变量指定为“ value”和“ value2”。 for循环的任务是遍历指定变量的值范围,该变量可以在for-loop命令中方便地定义;在这种情况下,该变量为“ n”。发生迭代的范围是1到N + 1。您应该注意到,上述公式中定义的总和范围仅从1到N。我们用这种方式进行定义,因为Python语言会从0开始对每个迭代值进行计数,因此我们必须从本质上转移这些值的范围以适应我们的期望范围。然后,for循环允许将所有矩形的高度加在一起,并将该值存储到我称为“值”的变量中。这在显示为:value + = f(a +((n-(1/2))*((b-a)/N)))的代码段中可以看到。

从那里开始,下一段代码使用名为“ value2”的变量,然后将其分配为每个矩形的所有高度的总和乘以每个矩形的标准化宽度。是我们要在程序中显示的最终答案,因此是“集成” Python函数的返回值。

第7步:创建程序第4部分:显示答案

将代码复制到先前代码下方的图片中。

现在,可以通过“集成” Python函数获得答案了,我们希望能够显示它。这只是将用户输入的值(“ N”,“ a”和“ b”)放入“集成” Python函数并将其打印在屏幕上的问题。该命令显示在第21行,它实际上是完成该步骤所需的全部操作。第19和20行上的代码仅用于“修饰”整个程序的输出。 “ print(” 。..。..。..。..。..。..。..。..。..。..。..。..。“)”将程序的输入部分与输出部分分开,然后“ print (“这是您的答案:”),仅表示将在该行文本之后打印答案。

步骤8:运行程序第1部分:按原样运行程序

如果您不使用Canopy,则您甚至可能根本不需要执行此步骤,并且运行该程序可能需要不同的过程。在Canopy中,您必须先保存它,然后才能运行该程序。 Python程序的文件类型是.py文件-它会自动保存为。选择要保存文件的位置,然后就可以运行该程序了。

运行程序:

在显示文件名的工具栏上方,点击看起来像“播放按钮”的绿色按钮(请参阅图片) )。

然后该程序将在称为Canopy数据分析环境的编辑器的底部屏幕中运行。假设您复制了我编写的提示,则应该在Canopy数据分析环境的底部看到提示:“输入要累加的次数(更多=更准确):。”。 (请参阅图片)

输入一个值,表示要执行多少次迭代,即10000(要推入您所在区域的矩形数),然后按Enter键。

将出现更多的提示,这些提示应该是您在步骤5中编码到程序中的熟悉的输入提示。

应该对积分求值,并且应该显示结果。

如果您如上图所示对程序进行编码,则您刚刚积分了f(x) = x ^ 2在一定范围内。 x ^ 2的积分很容易手动计算,因此您应该检查并确保程序对手动确定的正确分析值给出了非常接近的答案。当我使用N = 10000,a = 0和b = 10的值运行程序时,得到的答案是333.33333249999964。正确的分析答案是333.333。这是非常准确和快速的。实际上,您已经在x轴上挤压了10,000个介于0和10之间的矩形,并使用它们来近似计算曲线x ^ 2下的面积!

步骤9:运行程序第2部分:集成其他数学函数

在上一步中,如果您一直在关注忠实地,您对f(x)= x ^ 2进行了积分。这不是该程序可以集成的唯一数学函数。在第5步中,您已经将Python函数的数学库数组导入程序中。这使您可以使用可以集成的更复杂的数学函数。让我们试一试。当然,您可以使用任何想要的函数,但是我将通过集成一个特定的数学函数来进一步证明该代码的准确性,该数学函数在一定范围内集成时会产生一个众所周知的值。该函数为f(x)= Sin [x]。此数学函数显示在第一张随附的图片中,从0到2π进行绘制,并且感兴趣的区域以绿松石阴影显示。在此间隔中,正面积与负面积相等,因此,如果将总面积相加,则应该为零。让我们看看这是否真的发生:

将数学函数f(x)= Sin [x]放入程序中:

再次运行程序之前,在注释下“返回后#type您的函数,”键入:sin(x)当前位于x ** 2的位置。 (参考图片)。

再次点击绿色的播放按钮运行程序。

输入10000作为N值(您希望求和多少次)。

输入“ 0”作为下边界。

将6.2832输入上边界(大约2π)。

看看您能得到什么价值。

当我这样做时,最终得到的价值是1.079e-10:这等于.0000000001079,这实际上是接近于零,因此它看起来确实是准确的,并且表明该算法足以处理负区域。

步骤10:运行程序第3部分:扩展程序

至此,您已经完成:您已经在其中编写了一个有效的确定积分算法可以平稳运行并给出非常准确答案的Python。但是,可以改进此程序。我不是程序员,并且对Python的经验很少。实际上,我不得不重新学习如何使用Python来完成本教程,但这应该使您相信Python是一种易于学习的语言。我的观点是,您可以通过提高程序效率来扩展该程序,也许可以实现一些GUI,并使其更加用户友好。

我对扩展程序的想法:

实现一个图形用户界面,使您无需使用Canopy交互式数据分析环境即可运行程序

对其进行设置,以使无需集成要集成的数学函数程序,但可以在程序运行后输入(我最初是想这样做,但无法弄清楚)。

定义一个“集成” Python函数,以便将f(x)函数视为在其中定义了f(x)函数的地方。

这些是只是一些需要改进的例子,但我保证还有很多其他可以改进的地方。因此,我将这一步骤作为该程序存在缺陷的一个示例,并作为任何想进一步改进该程序的人的练习。
责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 程序
    +关注

    关注

    117

    文章

    3782

    浏览量

    80990
  • python
    +关注

    关注

    56

    文章

    4792

    浏览量

    84614
收藏 人收藏

    评论

    相关推荐

    怎样用THS3201实现输出功率可调?

    怎样用THS3201实现输出功率可调?
    发表于 08-26 08:28

    OPA735加OPA333,怎样用TINA TI去仿真?

    当输入信号VG1从7.06V慢慢变化到7.22V时。 输出电压Vout的变化必须是接近线性变化的。我想知道我该怎样用TINA TI去仿真?怎样设置那个输入信号VG1才能达到我的目的。因为这个电压源好像
    发表于 08-02 08:39

    怎样用表测稳压管稳压值

    表是一种常用的电子测量工具,可以用来测量电压、电流、电阻等多种参数。在测量稳压管的稳压值时,我们可以使用万表的直流电压测量功能。以下是步骤和注意事项: 准备工具和材料 万表 稳压管 电源
    的头像 发表于 07-31 14:26 1588次阅读

    怎样用Arduino测试锂电池容量

    本文详细介绍了如何用Arduino测量锂电池的容量。并附有电路图和Arduino的程序代码。
    的头像 发表于 07-30 09:14 837次阅读
    <b class='flag-5'>怎样用</b>Arduino测试锂电池容量

    python写验证环境cocotb

    本文介绍了cocotb的安装、python tb文件的写法、xrun仿真cocotb的脚本等,我们来看看体验如何。
    的头像 发表于 07-24 09:38 526次阅读
    <b class='flag-5'>用</b><b class='flag-5'>python</b>写验证环境cocotb

    pycharm进行python爬虫的步骤

    以下是使用PyCharm进行Python爬虫的步骤: 安装PyCharm和Python 首先,您需要安装PyCharm和Python。PyCharm是一个流行的Python集成开发环境
    的头像 发表于 07-11 10:11 813次阅读

    怎样用STM8L的PB3/TIM2_TRIG的引脚测量脉宽?

    怎样用STM8L的PB3/TIM2_TRIG的引脚测量脉宽?
    发表于 05-07 06:55

    stm32f100怎样用重映射功能?

    的是stm32f100c8t6b芯片,现在想用将PB1映射为TIM1_CH3N,在调用GPIO_PinAFConfig(GPIOB,GPIO_PinSource1,GPIO_AF_TIM1)时, GPIO_PinAFConfig和GPIO_AF_TIM1都没定义,stm32f100
    发表于 05-07 06:06

    STM32F412G-DISCO怎样用MX生成fatfs的代码?

    STM32F412G-DISCO怎样用MX生成fatfs的代码? SD卡例程能跑,但mx生成的代码不能正常运行,我生成代码后是不是还要配置一些东西?(我生成后只写了测试代码) 问题解决了,虽然我不知道我为什么不能直接使用mx生成的代码去操作sd卡,但我通过复制粘贴例程的代码完成了测试。
    发表于 03-12 08:15

    微软大幅上调积分点数,引发用户强烈抗议

    据悉,Reddit以及X平台用户反馈称,在美区微软或Xbox礼券的兑换积分数值均有显著提升,例如,一张50美元礼品卡的需要积分由46,000点猛升至47,500点;同样的,100美元礼品卡的需积分将从91,000点飙升至95,0
    的头像 发表于 03-08 09:59 531次阅读

    积分-黎曼和的极限解析

    积分如果存在就是一个具体的数值,这个精确的定义是黎曼给出的,所以也叫黎曼积分
    的头像 发表于 03-04 09:47 5320次阅读
    定<b class='flag-5'>积分</b>-黎曼和的极限解析

    如何使用linux下gdb来调试python程序

    如何使用linux下gdb来调试python程序  在Linux下,可以使用GDB(GNU调试器)来调试Python程序。GDB是一个强大的调试工具,可以帮助开发者诊断和修复
    的头像 发表于 01-31 10:41 2561次阅读

    ADUC7060仿真时,虽然程序能正常运行,但无法Watch查看正确的数值是为什么?

    ,正常显示的应该是0x00,0x01,0x02,0x03,0x04,0x05 而实际显示的是 如果再定义一组变量 将上述数组变量一一赋值给单一的变量 显示的结果正常 得出结论: 仿真时,虽然程序能正常运行,但无法Watch查看正确的
    发表于 01-11 07:32

    怎样用最快的速度排查PLC程序上的错误?

    要以最快的速度排查PLC程序上的错误,可以采取以下步骤: (1)确定错误现象:首先,仔细观察PLC程序的运行情况,确定具体的错误现象。这可能包括设备无响应、输出不正确、报警等。 (2)检查输入输出
    的头像 发表于 12-22 08:50 923次阅读

    怎样用表来判断加热管的好坏?

    怎样用表来判断加热管的好坏? 万表是电工常用的测量仪器,它可以用来判断加热管的好坏。加热管是一种常见的加热元件,广泛应用于家电、机械设备和工业生产中。在选择和使用加热管时,我们需要了解其电阻值
    的头像 发表于 12-20 17:21 5453次阅读