線形および非線形連立方程式を解く方法について

[OS]ALL
[リリース] 6.07, 6.08, 6.09, 6.10, 6.11, 6.12
[キーワード] simultaneous equations, MODEL,SOLVE

[質問]

線形および非線形連立方程式を解くプロシジャはありますか?

[回答]

未知数の数と同じ数の方程式がある場合(n個の方程式に対して、n個の未知数)には、SAS/ETSプロダクトのMODELプロシジャ、 SOLVEステートメントでニュートン法などによって数値的に解くことができます。

また、線形方程式に限れば、SAS/IMLプロダクトのIMLプロシジャにて、SOLVE関数が用意されています。

/***********************************************************
*  サンプル                                                 
*  非線形方程式をMODELプロシジャによって解くプログラム例    
*                                                           
*        x1 + x2 - x1*x2 = -2                               
*        x1 * exp(-x2)   =  1                               
************************************************************/
***** プログラム例1 *********************;
proc model ;
  parms x1 0.1 x2 -2;
  exogenous x1 x2;
  eq.one=x1 + x2 - x1*x2 +2;
  eq.two=x1 * exp(-x2) -1;
  solve x1 x2 /newton itprint solveprint;
run;

***** プログラム例2 *********************;
data data1;
 input y1 y2;
cards;
-2 1
;
proc model data=data1;
  parms x1 0.1 x2 -2;
  endogenous y1 y2;
  exogenous x1 x2;
  y1=x1 + x2 - x1*x2;
  y2=x1 * exp(-x2) ;
  solve x1 x2 /newton solveprint itprint;
run;

/*******************************************
 IMLプロシジャによる線形方程式の解

   4 a + 5 b + 1 c = 1
   2 a + 3 b + 1 c = 2
   4 a + 1 b + 3 c = 3
*******************************************/

proc iml;
  A={4 5 1,
     2 3 1,
     4 1 3};
  b={1, 2, 3};
  X=solve(A,b);
  print X;
quit;