【问题标题】:Regular False Position - Problem with recursion常规错误位置 - 递归问题
【发布时间】:2021-11-19 03:01:15
【问题描述】:

我的递归程序在 python 中使用错误位置方法时遇到了一些问题。出于某种原因,当我启动程序时,没有任何内容输出到控制台。它运行,但随后它停止而不做任何事情。想知道你是否能在我的程序中看到任何漏洞。

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import sys

sys.setrecursionlimit(10000);

def function(x):     
    return float((1/x) - (np.log(x)) + (np.log(2)))

def checkroot(a, b):
    if(function(a) * function(b) < 0):
        falsepositionmethod(a, b)

def processinterval(a, b):
     c = float(((a * function(a)) - (b * function(a)))/(function(b) - function(a)))
     return c
 
def falsepositionmethod(a, b):
    midpoint = processinterval(a, b)
    
    if((function(a) * function(midpoint)) < 0):
        return falsepositionmethod(a, midpoint)
    
    if((function(a) * function(midpoint)) > 0):
        return falsepositionmethod(midpoint, b)

    elif(np.abs(function(midpoint)) < 0.0005):
        return midpoint
    
    return print(midpoint)
    
def main():
    a = 0.1
    b = 20.0
    
    checkroot(a, b)
    print(falsepositionmethod(a, b))
    
main()

【问题讨论】:

  • 这段代码有什么作用?请给我们一些背景信息。
  • 它只是运行控制台(红色按钮亮起),然后结束说重新启动内核。
  • 考虑添加一些日志来帮助您调试。像这样的算法中最常见的失败情况是值不收敛。
  • 控制台?红色按钮?核心?我不知道这些是什么。这段代码的目的是什么?向我们描述它,就像我们不知道您正在从事什么项目或您要解决的问题一样(因为我们不知道)。

标签: python pandas numpy matplotlib


【解决方案1】:

问题是前两个条件之一始终成立(即function(a) * function(midpoint) 不为零),因此您永远不会达到终止条件。将您的 if 语句 np.abs(function(midpoint)) &lt; 0.0005 移到其他两个 if 语句上方。

【讨论】:

  • 大坝就是这样:D。我觉得自己很蠢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-21
  • 1970-01-01
相关资源
最近更新 更多