作者gamer ()
看板MATLAB
標題Re: [問題] 線性矩陣與非線性方程式的聯立
時間Tue Oct 16 20:42:42 2007
※ 引述《Homus2 (防寒衣入手啦~~)》之銘言:
: 想請問MATLAB有沒有解這類問題的方法
: 例如說
: AX+BY=C
: A B C為已知 X Y為要求的值
: 如 X=[X1 X2 X3]' Y=[Y1 Y2 Y3]'
: A B為3*3方陣 C為3*1矩陣
: 因此目前有三條方程式六個未知數
: 不過另外三條方程式是非線性方程式
: 例如
: X1=a+b*exp(Y1/c)
: X2=a+b*exp(Y2/c)
: X3=a+b*exp(Y3/c)
: 其中a b c為常數
: 請問諸如此類的問題要如何解??
: 煩請賜教 真的非常感謝~~ > _ <
用Newton-Raphson method來解非線性聯立問題
以知原題目可以化為下列形式
a11*X1 + a12*X2 + a13*X3 + b11*Y1 + b12*Y2 + b13*Y3 = c1
a21*X1 + a22*X2 + a23*X3 + b21*Y1 + b22*Y2 + b23*Y3 = c2
a31*X1 + a32*X2 + a33*X3 + b31*Y1 + b32*Y2 + b33*Y3 = c3
將Xi代入,可以將上式整理為下列形式
A11*f(Y1) + A12*g(Y2) + A13*h(Y3) - c1 = 0
A21*f(Y1) + A22*g(Y2) + A23*h(Y3) - c2 = 0
A31*f(Y1) + A32*g(Y2) + A33*h(Y3) - c3 = 0
接下來是解方程式的過程,
% 定義初始猜值,此值需接近解,不然可能不會收斂
Y1 = 0.1; Y2 = 0.1; Y3 = 0.1
dY1=1; dY2=1; dY3=1;
X = [dY1; dY2; dY3];
dx = sqrt(dY1^2 + dY2^2 + dY3^2); % 最小均方值
eps = 1.e-5 % 設定收斂大小
while abs(dx)>eps
F1 = A11*f(Y1) + A12*g(Y2) + A13*h(Y3) - c1
F2 = A21*f(Y1) + A22*g(Y2) + A23*h(Y3) - c2
F3 = A31*f(Y1) + A32*g(Y2) + A33*h(Y3) - c3
B = [F1;F2;F3];
% 然後計算出F1, F2, F3的微分,並定義
c11 = A11*f'(Y1); c12 = A12*g'(Y2); c13 = A13*h'(Y3);
c21 = A21*f'(Y1); c12 = A22*g'(Y2); c23 = A23*h'(Y3);
c31 = A31*f'(Y1); c12 = A32*g'(Y2); c33 = A33*h'(Y3);
C = [c11 c12 c13; c21 c22 c23; c31 c32 c33];
X=-inv(C)*B;
dY1 = X(1); dY2 = X(2); dY3 = X(3); % new increment
dx = sqrt(dt3^2+dt4^2);
Y1 = Y1+dY1; Y2 = Y2+dY2; Y3 = Y3+dY3; % new values of Yi
end
Y1
Y2
Y3
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.155.116
※ 編輯: gamer 來自: 140.116.155.116 (10/16 20:43)
※ 編輯: gamer 來自: 140.116.155.116 (10/16 20:47)
推 Homus2:哇感謝 我呆會來試試看~ 10/17 00:03
推 gamer:這個方法的好處是很簡單,但是你必須要對解有些感覺才行 10/17 11:32
→ gamer:不然一開始就猜錯解,大概就不會收斂了 10/17 11:32