fslove - Matlab求解多元屢次方程組
簡介: 以前看到網上的一些資料參差不齊,各類轉載之類的,根本沒法解決實際問題,因此我打算把本身的學到的總結一下,以實例出發講解fsolve。 示例以下: $$ \begin{cases} 2x_1 - x_2 = e^{ax_1} \ -x_1 + 2x_2 = e^{ax_2} \ \end{cases} $$ 具體的求解過程在後面 點擊跳轉算法
1. fsolve的基本使用
調用格式一:函數
X = fslove(FUN,X0)優化
功能:給定初值X0,求解方程組的解,X就是返回的解spa
調用格式二:code
X = fsolve(FUN,X0,OPTIONS)io
功能:同上,並解決默認參數優化爲options指定值table
調用格式三:function
[X,FVAL] = fslove(FUN,X0,...)class
功能:返回X處目標函數值搜索
調用格式四:
[X,FVAL,EXITFLAG] = fslove(FUN,X0,...)
功能:返回EXITFLAG的值,用來描述計算退出的條件,其中EXITFLAG取值和相應的含義以下表。(主要做爲判斷條件來使用)
EXITFLAG | 含義 |
---|---|
1 | 函數fslove收斂於解X處 |
2 | X的變化小於限制 |
3 | 殘差變化小於限制 |
4 | 重要搜索方向小於限制 |
0 | 達到最大迭代次數或者評價標準 |
-1 | 算法由輸出函數終止 |
-2 | 算法沒法收斂到解的點 |
-3 | 信賴域半徑過小 |
-4 | 線搜索在當前不能充分減小殘差 |
調用格式五:
[X,FVAL,EXITFLAG,OUTPUT] = fslove(FUN,X0,...)
功能:包含OUTPUT的輸出
調用格式六:
[X,FVAL,EXITFLAG,OUTPUT,JACOB] = fslove(FUN,X0,...)
功能:返回雅各比矩陣
<span id = 'jump'></span>
2.方程求解
(1) 編制函數文件fun.m
編寫函數主要用來書寫函數的表達式。
function f = fun(x,a,b,c) % b c能夠是隨意的參數 f1 = 2*x(1)-x(2)-exp(a*x(1)); f2 = -x(1)+2*x(2)-exp(a*x(2)); f = [f1;f2]; % 也能夠寫成下面的方式 % f = [2*x(1)-x(2)-exp(a*x(1));-x(1)+2*x(2)-exp(a*x(2))];
(2) 給定函數的參數值和初值(解在周圍尋找)
調用求解函數 fslove
>> a = -1; >> x0 = [-5,-4]; >> [x,FVAL,EXITFLAG,OUTPUT,JACOB] = fsolve(@(x)fun(x,a,1,1),x0);
@(x)fun(x,a,1,1)調用fun函數,函數的參數是a,1,1,求解x的值 執行後調用x返回,也就是X的解。
x =
0.5671 0.5671
調用FVAL顯示在目標解的函數值,能夠看出,FVAL越小越接近真實解。
FVAL =
1.0e-09 *
-0.4242 -0.3753
調用EXITFLAG 結合上面的表格能夠知道,函數FSOLVE收斂於解X處。
EXITFLAG =
1