Sympy玩轉邏輯符號運算
讀《電腦科學精粹》一書的時候,發現很多時候需要用到符號運算,本來想自己寫一個的,後來發現sympy 把事情都做好了,而且sympy在 jupyter scipy-notebook 裡面就有,用起來實在是非常的方便。
下面就試做一下 第一章 1.2 邏輯中的題目,用以拋磚引玉
過熱的伺服器?如果伺服器過熱且空調關閉,會導致伺服器崩潰;如果伺服器過熱且機箱冷卻器失效,同樣會導致伺服器崩潰。那麼伺服器需要滿足哪些條件才能正常工作?
符號分配
'''
A: 伺服器過熱。
B: 空調關閉
C: 機箱冷卻器失效
D: 伺服器崩潰
'''
from sympy.logic import *
from sympy import symbols, Symbol
A = Symbol("伺服器過熱") # 宣告一個符號
B, C = symbols("空調關閉, 機箱冷卻器失效") # 宣告多個符號,用“逗號”或“空格” 分割
D = (A & B) | (A & C) # 即 ( A AND B ) OR ( A AND C ) , D 為伺服器崩潰
採用分配律對上式進行因式分解
from sympy.logic.boolalg import simplify_logic
D = simplify_logic(D)
D
當滿足條件!D伺服器可以正常工作。相應的換質位形式為
~D
採用德摩根定律去除括號
'''
~A: ~伺服器過熱 == 伺服器沒有過熱
~B: ~空調關閉 == 空調正常工作
~C: ~機箱冷卻器失效 == 機箱冷卻正常工作
~D: ~伺服器崩潰 == 伺服器正常工作
'''
from sympy.logic.boolalg import to_dnf
to_dnf(~D)
從上式可知,只要滿足條件 !A(伺服器沒有過熱)或 !B AND !C(空調和機箱冷卻器均正常工作),伺服器就能正常工作。
小結
sympy 幾乎涵蓋了各種各樣的數學符號運算,邏輯符號運算只是其中小小的一部分,其它強大的功能值得進一步發掘!
相關文章
- Python邏輯運算Python
- python函式符號sympy的用法Python函式符號
- day14.邏輯運算,位運算
- Verilog有符號數、無符號數之間的賦值與運算符號賦值
- 邏輯運算子
- matlab符號運算結果的分數怎麼轉化為小數Matlab符號
- python學習----誰在說謊邏輯運算Python
- web前端學習教程,掌握核心邏輯運算Web前端
- 列舉位邏輯運算從懵懂到似懂非懂
- mysql注入方法邏輯運算及常用函式MySql函式
- 4、邏輯運算子
- SCSS 邏輯運算子CSS
- 好程式設計師web前端分享邏輯運算程式設計師Web前端
- 二、python的邏輯運算與資料型別Python資料型別
- 計算機最基礎的部分:運算邏輯電路(ALU)計算機
- 符號(註釋符+轉義符+接續符)符號
- C語言基礎-1、邏輯型別和運算C語言型別
- java程式碼執行字串中的邏輯運算方法Java字串
- iOS Swift邏輯運算子iOSSwift
- JavaScript || 邏輯或運算子JavaScript
- JavaScript && 邏輯與運算子JavaScript
- JavaScript ! 邏輯非運算子JavaScript
- SQL-基礎語法 - 條件查詢 - 邏輯運算SQL
- MySQL-WHERE子句 以及 邏輯操作符MySql
- MySQL的四種運算子(算術運算子、比較運算子、邏輯運算子和位運算子)MySql
- JavaScript >> 有符號右移運算子JavaScript符號
- JS 中的邏輯運算子JS
- Kotlin 運算子詳解:算術、賦值、比較與邏輯運算子全解析Kotlin賦值
- 8.Golang中的運算子-算術運算子、關係運算子、邏輯運算子、賦值運算子Golang賦值
- 物聯網學習教程——邏輯運算子和邏輯表示式
- 【C進階】15、邏輯運算子
- JS 邏輯運算子的特點JS
- 【C】 15_邏輯運算子分析
- Calca for mac(文字編輯器/符號計算器) v1.5.1啟用版Mac符號
- 對位運算與邏輯電路統一性的淺顯理解
- Java基礎09:邏輯運算子、位運算子Java
- JavaScript >>> 三個大於號無符號右移運算子JavaScript符號
- 關於Matlab中符號運算的因式分解、展開與合併Matlab符號