数值分析 之高斯消元法和它的改进

# -*- coding: utf-8 -*-
"""
Created on Sun Nov 19 16:40:16 2017

@author: www
"""
import numpy as np


def Gaussian_elimination(X,y):
    
    row,col = X.shape
    theta = np.zeros(row)
    y = y.reshape(row,1)
    
    X_y = np.hstack((X,y))
    
    for i in range(row):
        for j in range(i+1,row):
            X_y[j] = X_y[j] - X_y[i] * (X_y[j][i] / X_y[i][i])
            
    for i in range(row-1, -1, -1):
        sum = X_y[i][col]

        for j in range(i+1,row):
            sum = sum -X_y[i][j] * theta[j]

        theta[i] = sum / X_y[i][i]
    
    theta.resize(col, 1)
    return theta
    

def Gauss_better(X,y):
    row,col = X.shape
    theta = np.zeros(row)
    y = y.reshape(row,1)
    
    X_y = np.hstack((X,y))
    X_y_max = np.max(X_y, axis=1, keepdims=True)
    X_y_stand = np.zeros_like(X_y)
    
    for i in range(row):
        X_y_stand[i] = X_y[i] / X_y_max[i]

    for i in range(row):
        a = np.argmax(X_y_stand[i:, i]) + i
        if a != i:
            theta = np.copy(X_y[i])
            X_y[i] = X_y[a]
            X_y[a] = theta

    X = X_y[:, :-1]
    y = X_y[:, -1]

    Gaussian_elimination(X,y)            
        
    
            



def main():
    X = np.array([[2.,-1.,3.],
                [4., 2.,5.],
                [1., 2.,0.]])
    y = np.array([1., 4., 7.])
    theta = Gaussian_elimination(X,y)
    print(theta)
    
    theta = Gauss_better(X,y)
    print(theta)
    
main()
    

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值