数值分析实验之非线性方程求根(Python 现)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了数值分析实验之非线性方程求根(Python 现),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2847字,纯文字阅读大概需要5分钟。
内容图文
![数值分析实验之非线性方程求根(Python 现)](/upload/InfoBanner/zyjiaocheng/632/0b3446754254463ca53c4220bff507b9.jpg)
详细实验指导见上一篇,此处只写内容啦
实验内容:
1. 用二分法求方程x3-3x-1=0在的所有根.要求每个根的误差小于0.001.
提示与要求: (1) 利用精度找到迭代次数;
(2) 由f(x)=3(x2-1)可取隔根区间[-2,-1].[-1,1].[1,2]);
(3) 用程序求各隔根区间内的根.
2. 用不动点迭代求: (1)x3+2x2+10x-20=0的所有根.
或: (2)9x2-sinx-1=0在[0,1]上的一个根.
3. 用Newton迭代法求解下列之一,准确到10-5:
(1) x3-x-1=0的所有根;
(2) ex+2-x+2cosx-6=0位于[0,2]上的根.
实验代码:
? 牛顿迭代法
1 import math 2 x=0.5 3 n = 1 4 while n ==1 or abs(x-x1)>1e-5: 5 x1 = x 6 def F(x1): 7 return 2**-x+2*math.cos(x)+math.exp(x)-6 8 def F1(x1): 9 return math.exp(x)-math.log(2)*(2**-x)-2*math.sin(x) 10 x = x1 - F(x1)/F1(x1) 11 print ('迭代步数:',n,'X1计算值=',x1,'X计算值=',x) 12 n = n+1 13 else: 14 print('方程的根=',(x))
运行结果:
? 不动点法
1 import numpy as np 2 3 def f(x): 4 return 9*x**2 - np.sin(x) - 1 5 6 def g1(x): 7 return ((np.sin(x)+1)/9)**0.5 8 9 def g2(x): 10 result = (abs(2 * x + 1))**(1 / 5) 11 if (2 * x - 1) < 0: 12 return -result 13 return result 14 15 def getEpsilon(x, epsilon): 16 maxY = minY = x[0] 17 for each in x: 18 maxY = max(f(each), maxY) 19 minY = min((f(each), minY)) 20 epsilon = (maxY - minY) * epsilon 21 return epsilon 22 23 def getInitialVal(x, N, step, epsilon): 24 initalVal = [] 25 for i in range(N + 1): 26 y1, y2, y3 = f(x - step), f(x), f(x + step) 27 if (y1 * y2 < 0) and (i != 0): 28 initalVal.append((x + x - step) / 2) 29 if ((y2 - y1) * (y3 - y2) < 0) and (abs(y2) < epsilon): 30 initalVal.append(x) 31 x += step 32 33 return initalVal 34 35 def findFixedPoint(initalVal, delta,epsilon): 36 points = [] 37 for each in initalVal: 38 if (abs(g1(each)) < 1): 39 points.append(iteration(each, g1, delta,epsilon)) 40 else: 41 points.append(iteration(each, g2, delta,epsilon)) 42 return points 43 44 def iteration(p1, g, delta,epsilon): 45 while True: 46 p2 = g(p1) 47 err =abs(p2-p1) 48 relerr = err/(abs(p2)+epsilon) 49 if err<delta or relerr<delta: 50 return p2 51 p1 = p2 52 53 def main(): 54 a, b, c = input().split(' ') 55 a = float(a) 56 b = float(b) 57 c = int(c) 58 delta = 10 ** (-c) 59 N = 8 60 epsilon = 0.01 61 step = (b - a) / N 62 x = np.arange(a, b + epsilon, epsilon) 63 64 epsilon2 = getEpsilon(x,epsilon) 65 initalVal = getInitialVal(a, N, step, epsilon2) 66 ans = findFixedPoint(initalVal, delta,epsilon) 67 68 for each in ans: 69 print('方程的根为:%.6f' % each) 70 71 if __name__ == '__main__': 72 main()
运行结果:
内容总结
以上是互联网集市为您收集整理的数值分析实验之非线性方程求根(Python 现)全部内容,希望文章能够帮你解决数值分析实验之非线性方程求根(Python 现)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。