MATLAB解方程組中 solve 和 fsolve 的細節比較

MATLAB作爲科研工作者的忠實夥伴,解各種複雜方程的性能與其他工具相比,自然不逞多讓。本期盤點MATLAB中solve和fsolve兩個函數在解方程中的優劣。

1. solve函數

語法:

S = solve(eqn,var)
S = solve(eqn,var,Name,Value)
Y = solve(eqns,vars)
Y = solve(eqns,vars,Name,Value)
[y1,...,yN] = solve(eqns,vars)
[y1,...,yN] = solve(eqns,vars,Name,Value)
[y1,...,yN,parameters,conditions] = solve(eqns,vars,'ReturnConditions',true)

描述:

S = solve(eqn,var) 求解變量var的方程eqn 。如果未指定var, symvar 函數將確定要爲其求解的變量。例如, solve(x + 1 == 2, x)解決等式 x + 1 = 2爲x .
例子
S = solve(eqn,var,Name,Value) 使用由一個或多個Name,Value對參數指定的附加選項。
例子
Y = solve(eqns,vars) 解決了方程組eqns的變量vars , 並返回一個結構, 包含解決方案。如果不指定vars, 則solve使用 symvar 查找要解決的變量。在這種情況下, symvar發現的變量數等於等式的個數eqns.
例子
Y = solve(eqns,vars,Name,Value) 使用由一個或多個Name,Value對參數指定的附加選項.
例子
[y1,...,yN] = solve(eqns,vars) 解決了變量vars的eqns方程組。解決方案被分配給y1,...,yN的變量。如果不指定變量, solve使用symvar查找要解決的變量。在這種情況下, symvar發現的變量數等於輸出參數的個數N.
[y1,...,yN] = solve(eqns,vars,Name,Value) 使用由一個或多個名稱指定的附加選項Name,Value對參數。
例子
[y1,...,yN,parameters,conditions] = solve(eqns,vars,'ReturnConditions',true) 返回指定解決方案中的參數和解決方案條件的附加參數parameters和conditions。

solve 函數的侷限性

  1. 對於非多項式方程,只能求出一個解
  2. 對於稍許複雜的方程,求解結果出現很大誤差
  3. 求解複雜的多項式方程時,可能會產生錯誤的求解結果
  4. 求解複雜的多項式方程時,可能無法求解,且非常耗時
  5. 求解超越方程時,只能返回一個解;
  6. 求解超越方程時,可能返回錯誤解;

2. fsolve函數

語法(僅列出兩種)

x = fsolve(fun,x0)
[x,fval,exitflag] = fsolve(fun,x0,options)
fun: 函數,用於定義方程(組)
x0: 計算初值
x: 求解結果(方程的根)
fval: 將求解結果x 帶入方程(組) fun,對應的值,即fun(x)
exitflag: 返回方程組求解結果的狀態(詳見help 文檔)
options: 方程的求解設置

MATLAB fsolve函數總結

  1. fsolve可以求解方程(組) 的實數根和複數根
  2. fsolve採用迭代的數值算法,速度快
  3. 給定不同的初值,可以求得不同的根(局部尋根)
  4. 初值給的不好,可能導致求解失敗
  5. 關於初值如何給定的問題
    a) 一元/ 二元方程(組),通過圖解法,可以得到根的個數,並粗略地估計出根的值,用做fsolve的初值
    b) 根據方程組中變量的實際意義,合適地給出初值。例如,時間/ 長度/ 質量等物理量,應該大於0
    c) 通過更多的練習和經驗積累,自然會見多識廣

總結:
儘量避免使用solve函數
儘可能使用fsolve求解數值解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章