实验目的及要求: 1、掌握一般迭代法与Newton法的基本原理。 2、能够编写一般迭代法与Newton法通用子程序求解方程根的近似解。 | ||||||||
实验内容: 1、编写非线性方程求根的一般迭代法通用子程序,并求的一
个实根,精确到4位小数。 2、编写非线性方程求根牛顿法的通用子程序。 早在1225年,有人曾求解方程并给出了高精度的实根,试用牛顿法求得这个结果。
| ||||||||
实验步骤与程序: 一般迭代法基本思想: 算法分析
一般迭代法算法流程图: 一般迭代法算法python主程序: import math def f(x): return math.exp(x) / 5
accuracy = 0.0001#精确度 x0 = 2 N = 100 k = 1 x_data = []#列表记录 y_data = [] x1 = f(x0) # 记录初始节点 x_data.append(0) y_data.append(x1) while k < N: error = abs(x1 - x0) x_data.append(k) y_data.append(x1) if (error < accuracy): break k += 1 x0 =x1 x1 = f(x0) if k >= N: print('错误') else: print("\n迭代过程") for x in x_data: print("X{}={}".format(x, y_data[x])) print("次数=", k) print("方程解=", x1) print("误差=",error) 牛顿迭代格式: 算法分析
一般迭代法算法流程图:
一般迭代法算法python主程序: import sympy as sympy#它可以进行符号计算、解方程、求导、积分、矩阵计算等操作。 def solve(x0, f): result = f.subs(x, x0)#相减函数 return result def Newton(x0, f, g): times = 0 while True: x1 = x0 x0 = x0 - (solve(x0, f) / solve(x0, sympy.diff(f))) times += 1 if abs(x0 - x1) < g: break elif times > 100: print('迭代失败') break print(f'x^*= {x0}\n迭代次数 = {times}') x = sympy.symbols("x")#定义变量 f = x**3 + 2 * x**2 + 10 * x - 20 x0 = 0.5 g = 1e-10#g为精度 Newton(x0, f, g) | ||||||||
运行结果: 1
2 | ||||||||
结果分析与讨论:
|
数学建模算法(基于matlab和python)之 方程求根的一般迭代法与牛顿法(5/10)
最新推荐文章于 2024-05-30 16:17:47 发布