用python解方程组

作为个人学习笔记,分享给大家看看!

一,适定方程组求解

1,解线性方程组
example: 
     2x + 3y = 5
     x   + 3y = 3
  求解代码及结果如下 :  
        解得 x=2,y=1/3.
import numpy as np
from numpy.linalg import solve
a=np.mat([[2,3],[1,3]])#系数矩阵
b=np.mat([5,3]).T    #常数项列矩阵
x=solve(a,b)        #方程组的解
print(x)

[[2. ] [0.33333333]]


2,解非线性方程组
example:
    x*x + 2y = 5
    x + y  =  1
求解代码及结果如下:
         x=3,y=-2 ;
         x=-1,y=2.
from scipy.optimize import fsolve
def func(paramlist):
    x,y=paramlist[0],paramlist[1]
    return [ x**2+2*y-5,
            x+y-1 ]
s=fsolve(func,[0,0])
print(s)
    
[-1.  2.]

解析:
函数func是我们要求解的非线性方程组,其形式为右端等于零的等式的左端式子。
paramlist是方程组的未知数初始值列表,可以任意选取。

注意:
fsolve方法只能得到局部解,没有得到全部解。
如上,只得到了一组解x=-1和y=2.
如果学到了更好的求解方法会持续更新的!

二 超定方程组求解

1,超定线性方程组求解
example: 
     2x + 3y = 5
     x   + 3y = 3
     x   +  y  = 2

求解代码如下:
#超定线性方程组求解
import numpy as np
from numpy.linalg import lstsq
a=np.mat([[2,3],[1,3],[1,1]])
b=np.mat([5,3,2]).T
x=lstsq(a,b)
print(x)

(matrix([[1.78571429],
        [0.42857143]]), matrix([[0.07142857]]), 2, array([4.94235374, 0.75705981]))
对于超定方程组,我们基于最小二乘法得到近似解(第一个元素):x=1.78571429,y=0.42857143.
第二个元素:残差的总和

第三个元素:系数矩阵a的秩
第四个元素:系数矩阵a的奇异值
  • 23
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值