精度保証数値計算 課題1

廣瀬俊哉

Scilabの丸めの制御

HPにアップロードされていた、WindowsScilabの丸めの制御のためのDLLをダウンロードしScilabに組み込んだ.

そのとき、インストールした時に作業フォルダはインストールされたフォルダになると思っていたので"C:\Program Files\Scilab2.5\"の階層下にファイルを置いて試行錯誤したが、どこにおいてもファイルがないとエラーが出た。そこでショートカットのプロパティを確認したところ作業フォルダが空だった。"C:\"を作業フォルダとして認識していたようだ。適当にフォルダを作成して作業フォルダとした。

Verified Matrix Equation Solver(linear.sci)

Verified Matrix Equation Solver(linear.sci)のファイルをダウンロードして実行したがこれもエラーが出た .

原因はdown();であったのでdown;up;に変更すると無事実行出来た。

'linear.sci'

function [x,error2]=lin(A,b)
   R=inv(A);
   x=R*b;
   [N,M]=size(A);
   down;
   Gd=abs(R*A-eye(N,N));
   rd=A*x-b;
   up;
   Gu=abs(R*A-eye(N,N));
   ru=A*x-b;
   center=(ru+rd)/2;
   radius=center-rd;
   ru=max(rd,ru);
   Gu=max(Gd,Gu);
   R_norm=norm(R,"inf");
   G_norm=norm(Gu,"inf");
   Rru=abs(R*center+abs(R)*radius);
   down;
   Rrd=abs(R*center-abs(R)*radius);
   D=1-G_norm;
   if D>0 then
      up;
      Rru=max(Rrd,Rru);
      Rr_norm=norm(Rru,"inf");
      err=Rr_norm/D;
      kappa=Gu*ones(N,1);
      error2=Rru+(err*kappa);
      nerror=max(error2);
   else
      printf("D<=0");
   end;
endfunction     

実行結果

実行結果は次の通りである .
Startup execution:
  loading initial environment
-->stacksize(3000000);
-->getf('round.sci');
-->getf('linear.sci');
Warning :redefining function: lin
-->A=rand(5,5)
 A  =
!    .2922267     .5015342     .9184708     .2806498     .6856896 !
!    .5664249     .4368588     .0437334     .1280058     .1531217 !
!    .4826472     .2693125     .4818509     .7783129     .6970851 !
!    .3321719     .6325745     .2639556     .2119030     .8415518 !
!    .5935095     .4051954     .4148104     .1121355     .4062025 !
-->b=rand(5,1)
 b  =
!    .4094825 !
!    .8784126 !
!    .1138360 !
!    .1998338 !
!    .5618661 !
-->[x,e]=lin(A,b)
 e  =
   1.0E-14 *
!    .0659714 !
!    .1026611 !
!    .0220756 !
!    .0501196 !
!    .0970575 !
 x  =
!    .4382183 !
!   1.8217721 !
!    .3122720 !
!    .3967165 !
! - 1.5027332 !

last modified 2000/12/2

©Shin'ichi OISHI

URI: http://www.oishi.info.waseda.ac.jp/~oishi/FAQ/hiro.htm