Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python的eval()会忽略不连续性?

Python的eval()会忽略不连续性?
EN

Stack Overflow用户
提问于 2019-12-10 09:54:43
回答 2查看 217关注 0票数 0

我正在构建一个Python计算器,通过使用y解决eval(function at x)绘制函数,直到我使用一个带有可移动间断的函数为止。与其返回类似于NaN的内容,eval只是计算如果它是连续的话,该点会是什么。

例如,如果我计算(x-2)/((x^2)-4),在x=2上函数在技术上应该是未定义的,但是使用x=2返回0.25而不是NaN,这就是如果函数是连续的(技术上是极限)的值。

有没有办法让我解决这个问题,找出任何可移除的不连续性?本质上,如果分母为零

带代码的编辑:

代码语言:javascript
运行
AI代码解释
复制
COMPUTATION_DISTANCE = 0.001
# THE DISTANCE BETWEEN EACH X VALUE WHEN PLOTTING POINTS. EVENTUALLY WE CONNECT A LINE BETWEEN ALL POINTS SEPERATED BY A VALUE OF COMPUTATION_DISTANCE.
# IF THE GRAPH IS ZOOMED,  MULTIPLY THIS COMPUTATION DISTANCE BY A FACTOR OF THAT ZOOM
ASYMPTOTE = 2.0

#formula = "(x+2)**2" #just a fake formula to begin
formula = "(x-2)/((x**2)-4)" #just a fake formula to begin
view_size = 8.0




    def draw_graph(event):
        global alreadyGraphedDeriv #to prevent infinite loop of graphing deriv
        alreadyGraphedDeriv = False
        canvas.delete("all") #clear existing graph
        draw_grid()
        y_previous = 0.0
        x = view_size * -1 #start at the negative of the view_size. so x =-8. then the loop wil keep repeating until x =+8 giving u all the x values. the loop takes care of the y values
        while x <= view_size:
            try: 
                y = eval(formula) #evaluate y at every point x
                print(str(x) + ", " + str(y))
                #if(y>1000000000000 or y < 1000000000000): #finding asymptotes
                    #print("Asymptote at (" + str(x) + ", " + str(y) + ") ")

            except ValueError:
                y = 1000000000
                x = COMPUTATION_DISTANCE * view_size
                print('Value error')
                if eval(formula) < 0:
                    y *= -1
            except:
                print_formula("SYNTAX ERROR   ")
                print("syntax error")
                break
            try:
                draw_line(x - COMPUTATION_DISTANCE * view_size, y_previous, x, y, "black") #(previous x, previous y, new x, new y, color)
            except:
                print_formula("NON-INT PWR (dbl click ^)   ")
                break
            y_previous = y
            x += COMPUTATION_DISTANCE * view_size
            #print(" " + str(x - COMPUTATION_DISTANCE * view_size) + " " + str(y_previous) + " " + str(x) + " " + str(y) +  " black") 
            #(previous x, previous y, new x, new y, color)

        if alreadyGraphedDeriv is False:
            alreadyGraphedDeriv = True
            draw_derivative("event")

看看突出显示的输出。评价了0.25作为x=2的解决方案。

EN

回答 2

Stack Overflow用户

发布于 2019-12-10 10:27:45

打印的y值的数字截止值表明您在Python2上。(Python3将显示更多的数字。)

在Python2上,printing或str-ing比Python3更激进地截断浮点数,因此不完全2.0的值仍然可以显示为2.0。您的x实际上不是2.0,因为累积的舍入错误,所以您的除法并不完全是0/0。它将一个非常小的数字除以一个非常小的数,而舍入误差恰好是计算出来的,所以输出是0.25或非常接近。

如果您使用print(repr(x))而不是print(str(x)),您将看到足够多的数字使舍入错误变得明显。

另外,获取Python 3。

票数 2
EN

Stack Overflow用户

发布于 2019-12-10 11:09:17

这是个有趣的问题。它不能用纯Python来解决--为了正确处理不连续,你需要对表达式做一些代数分析。当然,您可以编写一些函数来实现这一点,但是使用现有的系统(如Sympy (https://sympy.org) )可能会方便得多。

您可能希望在表达式中查找要绘制的不连续性,使用人类使用的任何启发式方法,例如在分母中查找子表达式,并查看它们在任何地方是否为零。另外,您还想看看是否有任何不连续性是可移动的(因为x=2 in (x-2)/ (x **2-4)是可移动的,因为您可以通过让结果= 1/4在x=2处产生连续函数)。最后,您将分别绘制不连续之间的每个段。

总之,这听起来是个伟大的项目。也许像这样的智能绘图仪可以为Sympy或其他项目做出贡献,如果他们还没有的话。

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

https://stackoverflow.com/questions/59272909

复制
相关文章
C# WPF如何关闭通过父窗口打开的所有子窗口
总结, 注意WPF中调试要排除无标题窗口,否则会导致程序被关闭。 这里的无标题窗口是WPF的界面调试器,如果它被关闭会导致被调试的程序也被关闭,Release程序可以不用对无标题窗口进行排除。
用户9127601
2021/11/01
4.6K0
C# WPF如何关闭通过父窗口打开的所有子窗口
总结, 注意WPF中调试要排除无标题窗口,否则会导致程序被关闭。 这里的无标题窗口是WPF的界面调试器,如果它被关闭会导致被调试的程序也被关闭,Release程序可以不用对无标题窗口进行排除。
zls365
2021/04/02
4.2K0
文件的打开与关闭
使用完一个文件后应该关闭它,以防止程序对文件误操作而导致出错。文件关闭是指撤销文件信息区和文件缓冲区,使文件指针变量不再指向该文件。
pigeon
2022/04/11
1.3K0
文件的打开与关闭
[javaSE] GUI(打开文件对话框)
使用FileDialog可以打开文件对话框,根据模式不同,可以分为打开文件和保存文件对话框
唯一Chat
2019/09/10
1.3K0
[javaSE] GUI(打开文件对话框)
关闭对话框,OnClose和OnCancel
我们知道,在对话框中,屏蔽ESC键自己主动退出能够选择重载OnCancel为哑函数的方法:
全栈程序员站长
2022/07/12
1.1K0
QT 打开文件对话框总结
一:  Qstring fileName = QFileDialog::getOpenFileName(this, tr("open file"), " ",  tr("Allfile(*.*);;mp3file(*.mp3)"));  
bear_fish
2018/09/20
8.3K0
10.2 打开与关闭文件
例如:fopen(“a1”,“r”),表示要打开名字为“a1”的文件,使用文件方式为“读入”。
小林C语言
2019/07/12
7580
10.2 打开与关闭文件
C语言文件的打开、关闭、读写
一个打开的文件,需要fclose(指向文件的指针);进行关闭,如果不对文件进行关闭,有可能丢失文件的数据。
岳泽以
2022/10/26
1.8K0
python_文件的打开和关闭
文件对象 = open('文件名','使用方式') rt:读取一个txt文件 wt: 只写打开一个txt文件,(如果没有该文件则新建该文件)会覆盖原有内容 at:打开一个txt文件,并从文件指针位置追加写内容(文件指针默认在末尾) 文件操作错误属于:I/O异常 通常的异常:
Mirror王宇阳
2020/11/10
1.5K0
QT对话框去掉帮助和关闭按钮 拦截QT关闭窗口的CloseEvent
建了一个对话框,我不想把边框去掉,只想去掉关闭按钮, setWindowFlags(windowFlags()&~Qt::WindowCloseButtonHint&~Qt::WindowContextHelpButtonHint); 结果那个问号的按钮去掉了,但是关闭按钮还在,求助啊
bear_fish
2018/09/20
7.5K0
Python 打开文件对话框「建议收藏」
以下代码来自http://interactivepython.org/runestone/static/thinkcspy/GUIandEventDrivenProgramming/02_standard_dialog_boxes.html#file-chooser
全栈程序员站长
2022/09/27
1.1K0
C#打开文件对话框(OpenFileDialog)
打开文件对话框(OpenFileDialog)    1、   OpenFileDialog控件有以下基本属性      InitialDirectory   对话框的初始目录       Filter   要在对话框中显示的文件筛选器,例如,"文本文件(*.txt)|*.txt|所有文件(*.*)||*.*"       FilterIndex   在对话框中选择的文件筛选器的索引,如果选第一项就设为1       RestoreDirectory   控制对话框在关闭之前是否恢复当前目录       FileName   第一个在对话框中显示的文件或最后一个选取的文件       Title   将显示在对话框标题栏中的字符       AddExtension   是否自动添加默认扩展名       CheckPathExists   在对话框返回之前,检查指定路径是否存在       DefaultExt   默认扩展名       DereferenceLinks   在从对话框返回前是否取消引用快捷方式       ShowHelp   启用"帮助"按钮       ValiDateNames   控制对话框检查文件名中是否不含有无效的字符或序列      2、   OpenFileDialog控件有以下常用事件      FileOk   当用户点击"打开"或"保存"按钮时要处理的事件       HelpRequest   当用户点击"帮助"按钮时要处理的事件
阳光岛主
2019/02/19
3.9K0
shutdown 指令关闭所有程序
使用 shutdown  时,在系统关机前,可以通知所有登录者系统将要关闭。此时 login 指令会被冻结,新用户将不能再登录,这是推荐使用的安全关机方式。关机之前,所有进程都会受到 shutdown 指令所发送的关闭进程信号,然后向 init 程序发送信号,要求它改变运行等级(runlevel)。
用户1685462
2021/09/06
1.7K0
Android获取软键盘的高度、键盘的打开与关闭、监听键盘处于打开还是关闭状态
最近在项目中,需要获取到软键盘的高度,再将底部的布局上移键盘的高度,话不多说,直接上代码:
SoullessCoder
2019/08/07
7.9K0
ExcelVBA打开文件对话框之.GetOpenFilename 方法
ExcelVBA打开文件对话框之Application.GetOpenFilename 方法
哆哆Excel
2022/10/25
3.1K0
ExcelVBA打开文件对话框之.GetOpenFilename 方法
C语言 | 文件打开关闭
这道理放在C语言学习上也一并受用。在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语言小白进阶到高手,需要经历的是日积月累的学习。
小林C语言
2021/05/28
1.3K0
C语言 | 文件打开关闭
C语言 | 文件打开关闭
用“r”方式打开的文件只能用于向计算机输入而不能用作向该文件输出数据,而且该文件应该已经存在,并存有数据,这样程序才能从文件中读数据。
小林C语言
2021/05/13
1.6K0
C语言 | 文件打开关闭
JDK中的timer正确的打开与关闭
Timer是jdk中提供的一个定时器工具,使用的时候会在主线程之外起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次。
一觉睡到小时候
2020/05/27
1.8K0
vc++保存和另存为对话框,打开文件对话框
windows上保存时常用的两个弹窗,一个是选择路径去保存,适用于选择目录,弹窗如图:
大菊观
2023/10/16
4600
vc++保存和另存为对话框,打开文件对话框
10.2 C语言打开与关闭文件
例如:fopen(“a1”,“r”),表示要打开名字为“a1”的文件,使用文件方式为“读入”。
小林C语言
2020/12/08
1.4K0
10.2 C语言打开与关闭文件

相似问题

关闭所有打开的cordova对话框

117

是否关闭所有打开的对话框?(JQuery)

20

关闭所有打开的模态对话框窗口

23

如何关闭所有打开的JQuery对话框

11

如何关闭所有打开的durandaljs模态对话框

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档