python 解析線性方程組

來源:互聯網
上載者:User
前面用 C 寫了個庫, 矩陣的基本運算都包涵了, +-*/ 求逆, rref(行最簡形)等, 並且利用這個庫實現了另外一些功能, 如 線性方程組求解, 線性迴歸, 線性規劃(正在寫, 個人感覺比較難)
可是使用的時候及其不便, 由於文本解析問題。 最近學了些python, 於是發現這個用來解析文本不錯, 於是就寫了個。 
只要達到係數變數分離就好辦了。


#!/usr/bin/env python#coding=utf-8import re'''coeffTable 是 {變數:係數列表}, 如果不懂, 請運行看程式結果就懂了建議看之前先運行一下看看結果''' coeffTable = {'__LENGTH__': 0, '__CONS__':[]}def parseEquation(str):    # 分離係數與變數    pattern = r'(^\s*\d*|[+-]\s*\d*)\s*(\w*)' # 用來分離變數與係數的運算式。    ptrn = re.compile(pattern)    left, right = str.split('=')    # 方程左右兩邊分離        coeffTable['__CONS__'].append(float(right.strip())) # 右邊加入到常量    # 請將 1, 2, 3 結合起來看, 比較容易懂    # 1. 原有變數的係數列表在後面添加一個0, 同時列表長度增加 1    for key in coeffTable:        if key not in ('__LENGTH__', '__CONS__'):            coeffTable[key].append(0)    coeffTable['__LENGTH__'] += 1    # 遍曆在新方程中出現的變數並轉換其對應係數    for val in ptrn.findall(left):        # 轉換係數        if val[0] == '-': coeff = 1        elif val[0][-1].isspace():            if val[0][0] == '-': coeff = -1            else:   coeff = 1        else:            coeff = float(''.join(val[0].split()))  # 去掉所有空白字元後轉換成 float 數                varName = ''.join(val[1].split())   #去掉所有空白字元,獲得變數名        coffList = coeffTable.get(varName)        # 2. 將新出現的變數添加至係數表        if coffList == None:            coeffTable[varName] = []            for i in range(coeffTable.get('__LENGTH__')):                coeffTable[varName].append(0)        # 3. 將該變數的係數列表的最後一個係數變成當前方程對應的係數        coeffTable[varName][-1] = coeff      # 測試if __name__ == '__main__':    equation = '3x + 4y - z - a + b + 3c = 7'    print(equation)    parseEquation(equation)    equation = '7x - 6y = 9'    print(equation)    parseEquation(equation)    print(coeffTable)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.