Python从牛顿拉夫逊法循环输出中提取迭代次数生成数组
代码调整方案
你原有代码存在一个前置错误:调用nraphson为x、n赋值的语句写在for循环之前,此时变量j还未定义,运行会直接报错,调整时会顺便修复该问题,同时新增列表存储迭代次数即可实现需求:
import math import matplotlib.pyplot as plt def nraphson(fn, dfn, x, tol, maxiter): for i in range(maxiter): xnew = x - fn(x)/dfn(x) if abs(xnew - x) < tol: break x = xnew return xnew, i y = lambda x: math.exp(x) - x**2 dy = lambda x: math.exp(x) - 2*x guess = range(-10,6) # 新增空列表存储迭代次数 iter_counts = [] for j in guess: root, n = nraphson(y, dy, j, 10**-5, 100) # 把迭代次数追加到列表中 iter_counts.append(n) # 输出你需要的迭代次数列表 print(iter_counts) # 也可以直接用这个列表绘图,比如: plt.plot(guess, iter_counts) plt.xlabel("初始猜测值") plt.ylabel("迭代次数") plt.show()
运行上述代码后,iter_counts变量就是你需要的[6, 6, 6, 6, 6, 5, 5, 5, 4, 3, 4, 5, 6, 6, 8, 10]列表,可直接用于后续绘图操作。
内容的提问来源于stack exchange,提问作者Ryan McAree
相关产品推荐
相关产品推荐

