SymPy | 獲取表達式自由變量方法與因式分解

SymPy 是 Python 中強大的符號計算庫,廣泛應用于數學建模、公式推導和科學計算。本文將從兩個核心功能展開:表達式中自由變量的獲取因式分解的實現,通過完整代碼示例和深入分析,幫助讀者掌握其使用方法。


第一部分:獲取表達式的自由變量

在符號計算中,自由變量(未被積分、求和等操作綁定的符號)的識別是關鍵步驟。SymPy 通過 free_symbols 屬性實現這一功能,支持從簡單到復雜表達式的解析。

1.1 基礎用法:free_symbols 屬性

free_symbols 返回表達式中所有未被綁定的符號集合,自動過濾被積分、求和等操作綁定的變量。

代碼示例
from sympy import symbols, Integral, Derivative, Sum, Function# 定義符號
x, y, z = symbols('x y z')
n = symbols('n', integer=True)
f = Function('f')# 示例1:簡單表達式
expr1 = x + y**2
print("示例1自由變量:", expr1.free_symbols)  # 輸出: {x, y}# 示例2:積分表達式(x被積分綁定)
expr2 = Integral(x*y, (x, 0, 1))
print("示例2自由變量:", expr2.free_symbols)  # 輸出: {y}# 示例3:導數表達式(變量不綁定)
expr3 = Derivative(f(x), x) + y
print("示例3自由變量:", expr3.free_symbols)  # 輸出: {x, y}# 示例4:求和表達式(n被求和綁定)
expr4 = Sum(x*n, (n, 0, 5))
print("示例4自由變量:", expr4.free_symbols)  # 輸出: {x}# 示例5:復雜復合表達式(y被積分綁定)
expr5 = Integral(Derivative(f(x), x) + y, (y, 0, z))
sorted_vars = sorted(expr5.free_symbols, key=lambda s: s.name)
print("示例5自由變量(排序后):", sorted_vars)  # 輸出: [x, z]
關鍵點分析
  • 積分與求和:操作中的積分變量(如 x)或求和索引(如 n)會被自動排除。
  • 導數與函數:導數操作(如 Derivative(f(x), x))不會綁定變量,x 仍視為自由變量。
  • 結果排序:通過 sorted(..., key=lambda s: s.name) 按符號名稱排序,提升可讀性。

第二部分:因式分解的實現

SymPy 的 factor 函數支持從簡單多項式到復雜表達式的分解,并可擴展至自定義數域。

2.1 基礎因式分解

使用 factor(expr) 對多項式進行有理數域上的分解。

代碼示例
from sympy import symbols, factorx, y = symbols('x y')# 單變量分解
expr1 = x**2 - 4
print("分解1:", factor(expr1))  # 輸出: (x - 2)*(x + 2)# 多變量分解
expr2 = x**2*y + x*y**2
print("分解2:", factor(expr2))  # 輸出: x*y*(x + y)

2.2 擴展數域分解

通過 extension 參數指定數域(如復數域),分解包含無理數的表達式。

代碼示例
from sympy import factor, sqrt,symbols
x = symbols('x')
# 默認無法分解的表達式
expr3 = x**2 - 2
print("默認分解:", factor(expr3))  # 輸出: x2 - 2# 擴展至包含√2的域
print("擴展分解:", factor(expr3, extension=sqrt(2)))  # 輸出: (x - √2)*(x + √2)

2.3 分式表達式分解

分解分子和分母后,使用 cancel 函數化簡分式。

代碼示例
from sympy import factor, cancel,symbols
x = symbols('x')
# 分式分解與化簡
expr4 = (x**2 - 4)/(x**2 - 3*x + 2)
factored4 = factor(expr4)
simplified4 = cancel(factored4)
print("分式分解:", factored4)   
print("化簡后:", simplified4)  

2.4 復雜多項式分解

支持含三角函數或高次多項式的分解。

代碼示例
from sympy import cos, factor,symbols
x,y = symbols('x,y')
# 含三角函數的表達式
expr5 = x**2 - 2*cos(y)*x + cos(y)**2
print("三角分解:", factor(expr5))  # 輸出: (x - cos(y))**2# 高次多項式分解
expr6 = x**5 - x**4 - 2*x**3 + 2*x**2 + x - 1
print("高次分解:", factor(expr6))  

2.5 不可分解表達式處理

對無法分解的表達式,使用 roots 分析根或 expand 展開驗證。

代碼示例
from sympy import roots, expand,symbols,factor
x = symbols('x')
# 無法分解的表達式
expr7 = x**2 + x + 1
print("分解結果:", factor(expr7))  # 輸出: x2 + x + 1# 檢查有理數域根
print("根檢查:", roots(expr7))      # 輸出: {}# 驗證展開一致性
expr8 = (x + 1)**2
expanded = expand(expr8)
print("展開驗證:", expanded)       # 輸出: x2 + 2x + 1

總結與對比

功能核心方法應用場景
自由變量提取expr.free_symbols分析表達式依賴的獨立變量
基礎因式分解factor(expr)單變量/多變量多項式分解
擴展數域分解factor(expr, extension)處理含無理數(如√2, i)的表達式
分式化簡factor + cancel分子分母分解后約簡
復雜結構分解factor(expr)高次多項式、三角函數表達式
不可分解表達式分析roots(expr)檢查根的存在性或驗證表達式等效性

完整代碼整合

# 自由變量提取
from sympy import symbols, Integral, Derivative, Sum, Functionx, y, z = symbols('x y z')
n = symbols('n', integer=True)
f = Function('f')expr_a = Integral(Derivative(f(x), x) + y, (y, 0, z))
print("自由變量:", sorted(expr_a.free_symbols, key=lambda s: s.name))  # [x, z]# 因式分解
from sympy import factor, cancel, sqrt, cosexpr_b = (x**2 - 4)/(x**2 - 3*x + 2)
print("分式分解:", cancel(factor(expr_b)))  # (x + 2)/(x - 1)expr_c = x**5 - x**4 - 2*x**3 + 2*x**2 + x - 1
print("高次分解:", factor(expr_c))          

通過本文的代碼與解析,讀者可掌握 SymPy 在自由變量提取和因式分解中的核心方法,并靈活應用于符號計算、工程建模等領域。進一步學習可參考 SymPy 官方文檔。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81794.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81794.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81794.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

掩膜合并代碼

def ensure_dir(path):"""若目錄不存在則創建"""if not os.path.exists(path): #判斷路徑是否存在os.makedirs(path) #創建路徑def read_and_resize(img_path, size):"""讀取并縮放圖像到指定尺寸,返回 numpy 數組&qu…

藍橋杯5130 健身

問題描述 小藍要去健身,他可以在接下來的 1~n 天中選擇一些日子去健身。 他有 m 個健身計劃,對于第 i 個健身計劃,需要連續的 天,如果成功完成,可以獲得健身增益 si? ,如果中斷,得不到任何…

auto關鍵字解析

前言 在11標準之前,auto在c中是聲明存儲器類型的關鍵字。而在11標準中它的功能變為了類型推導。 對此, 在這里引入Cprimer中的原句: 編程時常常需要把表達式的值賦給變量,這就要求在聲明變量的時候清楚的知道表達式的類型。然而…

嵌入式STM32學習——串口USART 2.0(printf重定義及串口發送)

printf重定義: C語言里面的printf函數默認輸出設備是顯示器,如果要實現printf函數輸出正在串口或者LCD顯示屏上,必須要重定義標準庫函數里調用的與輸出設備相關的函數,比如printf輸出到串口,需要將fputc里面的輸出指向…

信號量機制:操作系統中的同步與互斥利器

在計算機操作系統中,信號量機制是一種重要的進程同步與互斥工具。它廣泛應用于多進程或多線程環境中,用于解決并發訪問共享資源時可能出現的競態條件問題。本文將從信號量的基本概念出發,逐步深入探討其工作原理、實現方式以及實際應用&#…

LeetCode 1004. 最大連續1的個數 III

LeetCode 1004題 “最大連續1的個數 III” 是一道關于數組和滑動窗口的問題。題目描述如下: 題目描述 給定一個由若干 0 和 1 組成的數組 nums,以及一個整數 k。你可以將最多 k 個 0 翻轉為 1。返回經過翻轉操作后,數組中連續 1 的最大個數…

digitalworld.local: FALL靶場

digitalworld.local: FALL 來自 <digitalworld.local: FALL ~ VulnHub> 1&#xff0c;將兩臺虛擬機網絡連接都改為NAT模式 2&#xff0c;攻擊機上做namp局域網掃描發現靶機 nmap -sn 192.168.23.0/24 那么攻擊機IP為192.168.23.182&#xff0c;靶場IP192.168.23.4 3&…

經典Java面試題的答案——Java 基礎

大家好&#xff0c;我是九神。這是互聯網技術崗的分享專題&#xff0c;廢話少說&#xff0c;進入正題&#xff1a; 1.JDK 和 JRE 有什么區別&#xff1f; JDK&#xff1a;Java Development Kit 的簡稱&#xff0c;java 開發工具包&#xff0c;提供了 java 的開發環境和運行環境…

LabVIEW風機狀態實時監測

在當今電子設備高度集成化的時代&#xff0c;設備散熱成為關鍵問題。許多大型設備機箱常采用多個風機協同散熱&#xff0c;確保系統穩定運行。一旦風機出現故障&#xff0c;若不能及時察覺&#xff0c;可能導致設備損壞&#xff0c;造成巨大損失。為滿足對機箱內風機狀態實時監…

18 C 語言算術、關系、邏輯運算符及 VS Code 警告配置詳解

1 運算符與表達式核心概念 1.1 什么是運算符 運算符是編程和數學中具有特定功能的符號&#xff0c;用于對數據進行運算、賦值、比較及邏輯處理等操作。它們能夠改變、組合或比較操作數的值&#xff0c;進而生成新值或觸發特定動作。 1.2 什么是表達式 表達式是編程和數學中用…

shell腳本之函數詳細解釋及運用

什么是函數 通俗地講&#xff0c;所謂函數就是將一組功能相對獨立的代碼集中起來&#xff0c;形成一個代碼塊&#xff0c;這個代碼可 以完成某個具體的功能。從上面的定義可以看出&#xff0c;Shell中的函數的概念與其他語言的函數的 概念并沒有太大的區別。從本質上講&#…

86.評論日記

再談小米SU7高速爆燃事件_嗶哩嗶哩_bilibili 2025年5月21日14:00:45

Babylon.js學習之路《七、用戶交互:鼠標點擊、拖拽與射線檢測》

文章目錄 1. 引言&#xff1a;用戶交互的核心作用1.1 材質與紋理的核心作用 2. 基礎交互&#xff1a;鼠標與觸摸事件2.1 綁定鼠標點擊事件2.2 觸摸事件適配 3. 射線檢測&#xff08;Ray Casting&#xff09;3.1 射線檢測的原理3.2 高級射線檢測技巧 4. 拖拽物體的實現4.1 拖拽基…

adb抓包

目錄 抓包步驟 步驟 1: 獲取應用的包名 步驟 2: 查看單個應用的日志 步驟 3: 使用日志級別過濾器 步驟 4: 高級日志過濾 可能的原因&#xff1a; 解決方案&#xff1a; 額外提示&#xff1a; 日志保存 抓包步驟 連接設備 adb devices 步驟 1: 獲取應用的包名 首先…

什么是實時流數據?核心概念與應用場景解析

在當今數字經濟時代&#xff0c;實時流數據正成為企業核心競爭力。金融機構需要實時風控系統在欺詐交易發生的瞬間進行攔截&#xff1b;電商平臺需要根據用戶實時行為提供個性化推薦&#xff1b;工業物聯網需要監控設備狀態預防故障。這些場景都要求系統能夠“即時感知、即時分…

百度飛槳OCR(PP-OCRv4_server_det|PP-OCRv4_server_rec_doc)文本識別-Java項目實踐

什么是OCR? OCR&#xff08;Optical Character Recognition&#xff0c;光學字符識別&#xff09;是一種通過技術手段將圖像或掃描件中的文字內容轉換為可編輯、可搜索的文本格式&#xff08;如TXT、Word、PDF等&#xff09;的技術。它廣泛應用于文檔數字化、信息提取、自動化…

Pytorch實現常用代碼筆記

Pytorch實現常用代碼筆記 基礎實現代碼其他代碼示例Networks or ProjectsNetwork ModulesLossUtils 基礎實現代碼 參考 深度學習手寫代碼 其他代碼示例 Networks or Projects SENet學習筆記 SKNet——SENet孿生兄弟篇 GCNet&#xff1a;當Non-local遇見SENet YOLOv1到YOLO…

word通配符表

目錄 一、word查找欄代碼&通配符一覽表二、word替換欄代碼&通配符一覽表三、參考文獻 一、word查找欄代碼&通配符一覽表 序號清除使用通配符復選框勾選使用通配符復選框特殊字符代碼特殊字符代碼or通配符1任意單個字符^?一個任意字符?2任意數字^#任意數字&#…

TYUT-企業級開發教程-第6章

這一章 考點不多 什么是緩存&#xff1f;為什么要設計出緩存&#xff1f; 企業級應用為了避免讀取數據時受限于數據庫的訪問效率而導致整體系統性能偏低&#xff0c;通 常會在應用程序與數據庫之間建立一種臨時的數據存儲機制&#xff0c;該臨時存儲數據的區域稱 為緩存。緩存…

雙檢鎖(Double-Checked Locking)單例模式

在項目中使用雙檢鎖&#xff08;Double-Checked Locking&#xff09;單例模式來管理 JSON 格式化處理對象&#xff08;如 ObjectMapper 在 Jackson 庫中&#xff0c;或 JsonParser 在 Gson 庫中&#xff09;是一種常見的做法。這種模式確保了對象只被創建一次&#xff0c;同時在…