GAUSS
GAUSSとは
GAUSS は、マトリックス(行列)演算用のプログラミング言語です。
行列の演算に長けています。
GAUSSの入手方法
GAUSS は Aptech Systems,Inc. の製品です。
・ GAUSS :製品版(production release)のもの
・ GAUSS Light :フリーで提供されるもの
があります。
(1)製品版は GAUSS System 6.0
Stand Alone は 教育機関向けが 72,000円
その他、各種アプリケーションがあります。
私は、商業版では、このバージョンを使用しています。
(2)フリー(無償提供)版
Aptech systems 社は、有り難いことに、
GAUSS 6.0 Light をフリーで提供してくれています。
Aptech のホームページからdemo版を入手して下さい。
GAUSSの使い方
以下にプログラムを示します。
このプログラムは、そのまま走らせることができ、方程式の解を得ます。
ただし、不等号記号を用いている2カ所は、半角の不等号記号に直して下さい。
該当の個所には、注記があります。
(プログラムで使う半角不等号記号は、ブラウザではタグとみなされ、HTML
ファイルには不適です。
ブラウザ表示を前提に> や < を使うとプログラムとしてはエラー
になります。苦肉の策で全角の不等号記号(<、>)を用いています。)
@**************************************
*** ex1.e
*** 逆行列を用いて一遍に解を求めるのではなく、
*** 解をSecant method(割線法)を用いて
*** 繰り返し計算で求めます。
***
*** 応用として、ヤコビアン行列(Jacobian matrix)と逆行列を用いる
*** ニュートン法のプログラムを作成して下さい。
*** 非線形方程式の解を求める場合に、ニュートン法が有効ですし
*** 必要になります。
***
*** 3x1 + x2 + 25 = 0
*** 5x1 - 9x2 - 1 = 0
*** 行列表示では
*** Ax + b = 0
***
*** GAUSS Light 4.0
***
*** 2002/08/10
*** Coded by Toshiyoshi Furuta
**************************************@
/* 行列A */
a = {3 1, 5 -9};
/* ベクトルb */
b = {-25, 1};
/* xの二組の初期値 */
let x0= 1, 1;
let x1= 5, 2;
x=cal(a,b,x0,x1);
print "solution =" x;
/* ************************ */
proc cal(a,b,x0,x1);
local xt0,xt1,xt2,vf0,vf1,maxiter,tol,i;
maxiter = 100; /*1e+3;*/
tol = 1e-8;
xt0=x0;
xt1=x1;
vf0=a*x0+b;
vf1=a*x1+b;
print "f(x0)=" vf0;
print "f(x1)=" vf1;
i= 1;
do while i<=maxiter; /* 左の不等号記号は全角、半角に直せ */
print "Iterration NO. " i;
xt2 = (xt0.*vf1-xt1.*vf0)./(vf1-vf0);
if( abs(sumc(xt2-xt1)) <tol); /* 左の不等号記号は全角、半角に直せ */
break;
endif;
xt0 = xt1;
xt1 = xt2;
vf0 = vf1;
vf1 = a*xt1+b;
print "xt0=" xt0;
print "xt1=" xt1;
i=i+1;
endo;
retp(xt2);
endp;