精華區beta MATLAB 關於我們 聯絡資訊
※ 引述《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