首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中的简单迭代

python中的简单迭代
EN

Stack Overflow用户
提问于 2019-06-11 15:21:36
回答 1查看 514关注 0票数 0

帮助编写代码。我做错了什么?

我的目标是通过精确的迭代方法找到方程的根:ξ = 10^-5f(x) (或ε = 0.00001)。方程:2.056x^43+3x^31+4x^12+x^8-3,478 = 0.

代码:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
import math
#Definition of function
def phi (x):
    return 2.056*(x**43)+3*(x**31)+4*(x**12)+(x**8)-3.478
#Recursive search function
def findRoot (f, x, q, epsilon):
    fx=f(x)
    #Checking the ending condition
    if (1 / (1-q) * abs (fx-x) <epsilon):
        print 'Root value', fx
        print '1 / (1-q) * abs (fx-x)=', 1 / (1-q) * abs (fx-x)
    else:
        print 'Current approximation', fx
        print '1 / (1-q) * abs (fx-x)=', 1 / (1-q) * abs(fx-x)
        findRoot (f, fx, q, epsilon)
findRoot(phi, 0.5, 0.5, 0.00001)    

执行

代码语言:javascript
复制
Current approximation -3.4731171861
1 / (1-q) * abs (fx-x)= 7.94623437221
Current approximation -3.66403074312e+23
1 / (1-q) * abs (fx-x)= 7.32806148624e+23
Traceback (most recent call last):
  File "Zavd1f.py", line 17, in <module>
    findRoot(phi, 0.5, 0.5, 0.00001)                
  File "Zavd1f.py", line 16, in findRoot
    findRoot (f, fx, q, epsilon)
  File "Zavd1f.py", line 16, in findRoot
    findRoot (f, fx, q, epsilon)
  File "Zavd1f.py", line 8, in findRoot
    fx=f(x)
  File "Zavd1f.py", line 5, in phi
    return 2.056*(x**43)+3*(x**31)+4*(x**12)+(x**8)-3.478
OverflowError: (34, 'Numerical result out of range')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-11 15:49:43

这种迭代方法简单地重复应用函数值作为参数。这只有当你最初的猜测是在收敛半径之内时才能起作用。你的不是。您需要实现一个与每次迭代更接近的算法。

目前的算法最初猜测为0.5,这提高到了高次方(8足够高)接近于0,因此我们得到的结果非常接近常量项。

代码语言:javascript
复制
f(0.5)   => -3.47...
f(-3.47) => -3.66...e+23    (really big)
f(really_big) => out of bounds

所以..。这要么是您的起始值,要么是您的算法,或者是您实现的该算法。

我稍微处理了一下您的代码;我认为您可能正在尝试实现一个二分法(来自q=0.5)或牛顿方法。在这两种情况下,您都忽略了编写下一个猜测的代码。

您只需使用f(x)作为根的下一个猜测,即x值。这是不正确的;您需要记住这是一个y值;您可以使用它为您的下一个x值计算更好的猜测。f(x)本身并不是下一个猜测。

由于您没有发布算法,我不确定错误的两倍(您硬编码三次的表达式)应该如何与迭代过程相关。

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

https://stackoverflow.com/questions/56546943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档