python牛顿迭代法求方程的根_python实现迭代法求方程组的根过程解析

python实现迭代法求方程组的根过程解析

这篇文章主要介绍了python实现迭代法求方程组的根过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

有方程组如下:

迭代法求解x,python代码如下:

import numpy as np

import matplotlib.pyplot as plt

A = np.array([[8, -3, 2], [4, 11, -1], [6, 3, 12]])

b = np.array([[20, 33, 36]])

# 方法一:消元法求解方程组的解

result = np.linalg.solve(A, b.T)

print('Result:\n', result)

# 方法二:迭代法求解方程组的解

B = np.array([[0, 3/8, -2/8], [-4/11, 0, 1/11], [-6/12, -3/12, 0]])

f = np.array([[20/8, 33/11, 36/12]])

error = 1.0e-6

steps = 100

xk = np.zeros((3, 1)) # initialize parameter setting

errorlist = []

for k in range(steps):

xk_1 = xk

xk = np.matmul(B, xk) + f.T

print('xk:\n', xk)

errorlist.append(np.linalg.norm(xk-xk_1))

if errorlist[-1] < error:

print('iteration: ', k+1)

break

# 把误差画出来

x_axis = [i for i in range(len(errorlist))]

plt.figure()

plt.plot(x_axis, errorlist)

结果如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2019-11-24

本文实例讲述了Python线性方程组求解运算.分享给大家供大家参考,具体如下: 求解线性方程组比较简单,只需要用到一个函数(scipy.linalg.solve)就可以了.比如我们要求以下方程的解,这是一个非齐次线性方程组: 3x_1 + x_2 - 2x_3 = 5 x_1 - x_2 + 4x_3 = -2 2x_1 + 3x_3 = 2.5 代码如下: # coding=utf-8 import numpy as np from scipy.linalg import solve a =

本文实例讲述了Python中迭代的用法,是一个非常实用的技巧.分享给大家供大家参考借鉴之用.具体分析如下: 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration). 在Python中,迭代是通过for ... in来完成的,而很多语言比如C或者Java,迭代list是通过下标完成的,比如Java代码: for (i=0; i

迭代dict的key和value 我们了解了如何迭代 dict 的key和value,那么,在一个 for 循环中,能否同时迭代 key和value?答案是肯定的. 首先,我们看看 dict 对象的 items() 方法返回的值: >>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } >>> print d.items() [('Lisa', 85), ('Adam', 95), ('Bart', 59)] 可以看到,items(

本文实例讲述了Python基于高斯消元法计算线性方程组.分享给大家供大家参考,具体如下: #!/usr/bin/env python # coding=utf-8 # 以上的信息随自己的需要改动吧 def print_matrix( info, m ): # 输出矩阵 i = 0; j = 0; l = len(m) print info for i in range( 0, len( m ) ): for j in range( 0, len( m[i] ) ): if( j == l ):

Python怎么生成一个迭代器,对于需要处理大型数据来说,迭代器是必不可少的,这样可节省大量内存空间,更加合理操作数据. 首先我们打开编辑器,这里以Sublime text3作为示范,创建一个新的py文档. rg = range(100) for i in rg: print(i) 我们知道range可以涵盖比较广的范围,但是如果数据太大的时候,一次性打印会占用比较多内存. rg = range(100) rg_iter = iter(rg) print(rg_iter) 那么这个时候我们就可以

本文实例讲述了Python设计模式之迭代器模式原理与用法.分享给大家供大家参考,具体如下: 迭代器模式(Iterator Pattern):提供方法顺序访问一个聚合对象中各元素,而又不暴露该对象的内部表示. 下面是一个迭代器模式的demo: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'Andy' """ 大话设计模式 设计模式--迭代器模式 迭代器模式(Iterator Pattern):提供方法顺序访

求一个数的平方根函数sqrt(int num) ,在大多数语言中都提供实现.那么要求一个数的平方根,是怎么实现的呢? 实际上求平方根的算法方法主要有两种:二分法(binary search)和牛顿迭代法(Newton iteration) 1:二分法 求根号5 a:折半: 5/2=2.5 b:平方校验: 2.5*2.5=6.25>5,并且得到当前上限2.5 c:再次向下折半:2.5/2=1.25 d:平方校验:1.25*1.25=1.5625<5,得到当前下限1.25 e:再次折半:2.5-(

import numpy as np import time 1.1 Jacobi迭代算法 def Jacobi_tensor_V2(A,b,Delta,m,n,M): start=time.perf_counter()#开始计时 find=0#用于标记是否在规定步数内收敛 X=np.ones(n)#迭代起始点 x=np.ones(n)#用于存储迭代的中间结果 d=np.ones(n)#用于存储Ax**(m-2)的对角线部分 m1=m-1 m2=2-m for i in range(M): pr

import numpy as np import time 1.1 Gauss-Seidel迭代算法 def GaussSeidel_tensor_V2(A,b,Delta,m,n,M): start=time.perf_counter() find=0 X=np.ones(n) d=np.ones(n) m1=m-1 m2=2-m for i in range(M): print('X',X) x=np.copy(X) #迭代更新 for j in range(n): a=np.copy(A

一.多层前向神经网络 多层前向神经网络由三部分组成:输出层.隐藏层.输出层,每层由单元组成: 输入层由训练集的实例特征向量传入,经过连接结点的权重传入下一层,前一层的输出是下一层的输入:隐藏层的个数是任意的,输入层只有一层,输出层也只有一层: 除去输入层之外,隐藏层和输出层的层数和为n,则该神经网络称为n层神经网络,如下图为2层的神经网络: 一层中加权求和,根据非线性方程进行转化输出:理论上,如果有足够多的隐藏层和足够大的训练集,可以模拟出任何方程: 二.设计神经网络结构 使用神经网络之前,必须

一.算法简要 我们希望有这么一种函数:接受输入然后预测出类别,这样用于分类.这里,用到了数学中的sigmoid函数,sigmoid函数的具体表达式和函数图象如下: 可以较为清楚的看到,当输入的x小于0时,函数值<0.5,将分类预测为0:当输入的x大于0时,函数值>0.5,将分类预测为1. 1.1 预测函数的表示 1.2参数的求解 二.代码实现 函数sigmoid计算相应的函数值:gradAscent实现的batch-梯度上升,意思就是在每次迭代中所有数据集都考虑到了:而stoGradAscen

注释用于说明代码实现的功能.采用的算法.代码的编写者以及创建和修改的时间等信息. 注释是代码的一部分,注释起到了对代码补充说明的作用. Python注释 Python单行注释以#开头,单行注释可以作为单独的一行放在被注释的代码行之上,也可以放在语句或者表达式之后. #Give you a chance to let you know me print("Give you a chance to let you know me") say_what = "this is a d

最小二乘法Least Square Method,做为分类回归算法的基础,有着悠久的历史(由马里·勒让德于1806年提出).它通过最小化误差的平方和寻找数据的最佳函数匹配.利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小.最小二乘法还可用于曲线拟合.其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达. 那什么是最小二乘法呢?别着急,我们先从几个简单的概念说起. 假设我们现在有一系列的数据点 ,那么由我们给出的拟合函数h(x)得到的估计量就是

伯努利分布 是一种离散分布,有两种可能的结果.1表示成功,出现的概率为p(其中0

Golang与python线程详解及简单实例 在GO中,开启15个线程,每个线程把全局变量遍历增加100000次,因此预测结果是 15*100000=1500000. var sum int var cccc int var m *sync.Mutex func Count1(i int, ch chan int) { for j := 0; j < 100000; j++ { cccc = cccc + 1 } ch

python getopt详解 函数原型: getopt.getopt(args, shortopts, longopts=[]) 参数解释: args:args为需要解析的参数列表.一般使用sys.argv[1:],这样可以过滤掉第一个参数(ps:第一个参数是脚本的名称,它不应该作为参数进行解析) shortopts:简写参数列表 longopts:长参数列表 返回值: opts:分析出的(option, value)列表对. args:不属于格式信息的剩余命令行参数列表. 源码分析 在An

JAVA 中解密RSA算法JS加密实例详解 有这样一个需求,前端登录的用户名密码,密码必需加密,但不可使用MD5,因为后台要检测密码的复杂度,那么在保证安全的前提下将密码传到后台呢,答案就是使用RSA非对称加密算法解决 . java代码 需要依赖 commons-codec 包 RSACoder.Java import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import java.security.