fslove - Matlab求解多元多次方程組


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就是返回的解

調用格式二:

X = fsolve(FUN,X0,OPTIONS)

功能:同上,並解決默認參數優化為options指定值

調用格式三:

[X,FVAL] = fslove(FUN,X0,...)

功能:返回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,...)

功能:返回雅各比矩陣

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM