close

 

(A-x-y)(B-x-β) = K1(x-α)
(A-x-y)(C-y-α) = K2(y-β)
(x-α) (C-y-α)  = K3(α+β)
(y-β)(B-x-β) = K4(α+β)

Constant: K1.K2.K3.K4
input : A.B.C
output: α.β.x.y

===================================================

 

根據題目 K1~K4常數,

作者假設 K1=2;K2=5.71;K3=3;K4=1.0;

而A, B, C為輸入參數, 在此A=30;B=20;C=60;

x, y, α,β為未知數,

可以假設為 Z = [x, y, α,β];

猜初始解  Z0 = [ 0 0 0 0];

新增script file命名 func.m  內容如下

其中F為四個恆等式全部移到等號左邊, 希望F≃[ 0 0 0 0]T

   1: function F = func(Z, A, B, C, K)
   2: % input parameters : A, B, C
   3: % constant K = [K1, K2, K3, K4]
   4:  
   5:     F = [ (A-Z(1)-Z(2))*(B-Z(1)-Z(4))-K(1)*(Z(1)-Z(3));
   6:              (A-Z(1)-Z(2))*(C-Z(2)-Z(3))-K(2)*(Z(2)-Z(4));
   7:              (Z(1)-Z(3))*(C-Z(2)-Z(3))-K(3)*(Z(3)+Z(4));
   8:              (Z(2)-Z(3))*(B-Z(1)-Z(4))-K(4)*(Z(3)+Z(4));];
   9: end

此外, 撰寫主程式 go.m

   1: A=30;B=20;C=60;             % input parameter
   2: K1=2;K2=5.71;K3=3;K4=1.0;   % constant
   3: Z0 = [0 0 0 0];             % initial guess
   4: K = [K1 K2 K3 K4];                      
   5: [Z,FVAL,EXITFLAG] = fsolve(@(Z) func(Z,A,B,C,K), Z0)  

其中@( Z ) func(Z, A, B, C, K) 為anonymous function表示Z為未知數, 用( )表示, 如果未知數一個以上就, 區隔

執行結果:

Z=[10.1211   18.1556    8.6104    8.1256]

FVAL為將Z帶入F結果, 或是

>> func(Z, A, B, C, K)

ans =

   1.0e-11 *

    0.0477
   -0.1599
    0.0114
    0.0163

EXITFLAG=   1  fsolve converged to a root.

   1: Z =
   2:  
   3:    10.1211   18.1556    8.6104    8.1256
   4:  
   5:  
   6: FVAL =
   7:  
   8:    1.0e-11 *
   9:  
  10:     0.0477
  11:    -0.1599
  12:     0.0114
  13:     0.0163
  14:  
  15:  
  16: EXITFLAG =
  17:  
  18:      1

 

 

資料來源: Re: [問題] fsolve 解多元非線性方程組

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 me1237guy 的頭像
    me1237guy

    天天向上

    me1237guy 發表在 痞客邦 留言(0) 人氣()