新しく発言する EXIT インデックスへ
初めてお尋ね致します。

  初めてお尋ね致します。 秦朋彦 2003/11/15 22:52:02 
  このプログラムを実行すると入力によっては... 白石和夫 2003/11/16 09:22:03 
   └白石先生、レスありがとうございます。 秦朋彦 2003/11/16 10:17:06 
    └DRAWGRIDでフリーズするようです。検討しま... 白石和夫 2003/11/16 10:44:37 
     ├レスありがとうございます。 秦朋彦 2003/11/16 11:51:45 
     │└問題が何とか解決しました。 秦朋彦 2003/11/16 19:10:58 
     └DRAWGRIDの引き数が負数だと無限ループに陥... 白石和夫 2003/11/20 07:47:35 

  初めてお尋ね致します。 秦朋彦 2003/11/15 22:52:02  ツリーへ

初めてお尋ね致します。 返事を書く
秦朋彦 2003/11/15 22:52:02
初めて書き込みをします。医療系の大学に通っているものです。
生化学等の実習で得たデータを最小二乗法で吟味し、プロットしたグラフを得、そうして棄却すべきデータなどをはっきりさせようという目的でプログラムを組んでみました。
以下がそのプログラムですが、これを実行すると線と点が表示されず、「MAT INPUT PROMPT "横軸のデータ、縦軸のデータ":z(i,2)」の部分が反転してフリーズしてしまいました。
何が原因なのかよく分かりません。よろしくお願い致します。

INPUT PROMPT "データの比較の回数":n
DIM a(n)
DIM b(n)
FOR c=1 TO n
INPUT PROMPT "点の個数":i
DIM z(i,2)
MAT INPUT PROMPT "横軸のデータ、縦軸のデータ":z(i,2)
LET sx=0
LET sy=0
LET sxx=0
LET sxy=0
FOR k=1 TO i
LET sx=sx+z(k,1)
LET sy=sy+z(k,2)
LET sxx=sxx+z(k,1)^2
LET sxy=sxy+z(k,1)*z(k,2)
NEXT k
LET b(c)=(sxy-sx*sy/i)/(sxx-(sx^2)/i)
LET a(c)=sy/i-b(c)*sx/i
PRINT a(c),b(c)
NEXT c
SET WINDOW 0,i+1,0,CEIL(z(i,2))
DRAW grid(0.1,a(1))
SET POINT STYLE 4
FOR d=1 TO i
PLOT POINTS:z(d,1),z(d,2)
PLOT LINES:a(d)+b(d)*z(d,1),z(d,1);a(d+1)+b(d+1)*z(d+1,1),z(d+1,1)
NEXT d
END

  このプログラムを実行すると入力によっては... 白石和夫 2003/11/16 09:22:03  ツリーへ

Re: 初めてお尋ね致します。 返事を書く
白石和夫 2003/11/16 09:22:03
このプログラムを実行すると入力によっては実行時エラーになりますが,フリーズすることはないと思います。
エラーになるのでなくてフリーズするのであれば,具体的にどういう順にどう数値を入力するか示してください。

   └白石先生、レスありがとうございます。 秦朋彦 2003/11/16 10:17:06  ツリーへ

Re: このプログラムを実行すると入力によっては... 返事を書く
秦朋彦 2003/11/16 10:17:06
白石先生、レスありがとうございます。

入力値は、n=1,i=6,z(i,2)=0,0,0.01,0.194,0.02,0.380,0.03,0.576,0.04,0.757,0.05,0.967
この入力値ですと、a(n),b(n)の値は出力されますが、plot以降のプログラムが動かなく、また、中断をクリックしても中断されない状態になってしまいました。
前回の発言でのフリーズという表現は説明不足でした。すいませんでした。
あと、OSはXPです。

    └DRAWGRIDでフリーズするようです。検討しま... 白石和夫 2003/11/16 10:44:37  ツリーへ

Re: 白石先生、レスありがとうございます。 返事を書く
白石和夫 2003/11/16 10:44:37
DRAW GRIDでフリーズするようです。検討します。
とりあえず,DRAW GRIDの引数を見直してみてください。

     ├レスありがとうございます。 秦朋彦 2003/11/16 11:51:45  ツリーへ

Re: DRAWGRIDでフリーズするようです。検討しま... 返事を書く
秦朋彦 2003/11/16 11:51:45
レスありがとうございます。
さっそく、DRAW gridの引数を見直してみます。

     │└問題が何とか解決しました。 秦朋彦 2003/11/16 19:10:58  ツリーへ

Re: レスありがとうございます。 返事を書く
秦朋彦 2003/11/16 19:10:58
問題が何とか解決しました。
因数を(z(i-1,0)/(i-1),z(i-1,1))に設定し、OPTION BASE 0を宣言し、それに伴う添え字を調整し、さらに例外状態処理もして、最後に初期入力値のデータを保存できるように処理をして、ようやく落ち着きました。以下がそのプログラムです。
3072バイトを超えていたらすいません。

OPTION BASE 0
SET POINT STYLE 4
INPUT PROMPT "データの比較の回数":n
DIM a(n-1)
DIM b(n-1)
FOR c=0 TO n-1
INPUT PROMPT "点の個数":i
DIM z(i-1,1)
MAT INPUT PROMPT "横軸のデータ、縦軸のデータ":z(i-1,1)
IF c=0 THEN
DIM w(i-1,1)
LET h=0
FOR v=0 TO i-1
LET w(v,0)=z(v,0)
LET w(v,1)=z(v,1)
NEXT v
LET h=i
END IF
LET sx=0
LET sy=0
LET sxx=0
LET sxy=0
FOR k=0 TO i-1
LET sx=sx+z(k,0)
LET sy=sy+z(k,1)
LET sxx=sxx+z(k,0)^2
LET sxy=sxy+z(k,0)*z(k,1)
NEXT k
LET b(c)=(sxy-sx*sy/i)/(sxx-(sx^2)/i)
LET a(c)=sy/i-b(c)*sx/i
PRINT a(c),b(c)
NEXT c
SET WINDOW 0,z(i-1,0),0,CEIL(z(i-1,1))
DRAW grid(z(i-1,0)/(i-1),z(i-1,1))
DEF y=a(e-1)+b(e-1)*x
FOR e=1 TO n
FOR x=0 TO z(i-1,0)
WHEN EXCEPTION IN
PLOT LINES:x,y;
USE
END WHEN
NEXT x
PLOT LINES
NEXT e
FOR n=0 TO h-1
PLOT POINTS:w(n,0),w(n,1)
NEXT n
END

     └DRAWGRIDの引き数が負数だと無限ループに陥... 白石和夫 2003/11/20 07:47:35  ツリーへ

Re: DRAWGRIDでフリーズするようです。検討しま... 返事を書く
白石和夫 2003/11/20 07:47:35
DRAW GRIDの引き数が負数だと無限ループに陥るバグでした。
ver. 5.1.4で修正しました。


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。