プログラム / 2009/08/12 (Wed) / 編集 |
間違ってる気はするが、MATLAB関数のproborをScilabで実装してみるメモ
probor(確率的OR)というのはファジィ理論で使うっぽいあれらしい。
(注意;ご利用は計画的に!)
再起的に利用する部分を用意
でもってこう
やっつけにもほどがあるぜww
probor(確率的OR)というのはファジィ理論で使うっぽいあれらしい。
(注意;ご利用は計画的に!)
再起的に利用する部分を用意
function y = probor_s(x,w) // y = probor_s(a,b) // x = [a b], then y = a + b - ab. If x has only one row, then y = x. // [nrows,ncols]=size(x); y=zeros(nrows); for k=1:nrows // For each pattern. y(k)=x(k)+w(k)-x(k)*w(k); end endfunction
でもってこう
function y = probor(x,w) // y = probor(a,b) // x = [a b], then y = a + b - ab. If x has only one row, then y = x. // if argn(2) == 1 [nrows,ncols]=size(x); y=x; if ncols >= 2 y=x(:,1); for k=2:ncols // For each pattern wtemp=x(:,k); y=probor_s(y,wtemp); end else y=x end else y=probor_s(x,w); end endfunction対応しているのは「wなしでxが行列」「wとxが縦ベクトル」のとき、「wなしでxが縦ベクトル」だと足す相手がいないのでそのままxが出てくる、「wありでxが行列」だとエラー処理していないのでどうなるかわからない。。。
やっつけにもほどがあるぜww
ちなみに実行結果、「wなしでxが行列」のとき
-->x=[1 2 3] x = 1. 2. 3. -->probor(x) ans = 1. -->probor(x') ans = 1. 2. 3. -->y=[1 4;2 5;3 6] y = 1. 4. 2. 5. 3. 6. -->probor(y) ans = 1. - 3. - 9. -->y2=[1 4 2;2 5 3;3 6 4] y2 = 1. 4. 2. 2. 5. 3. 3. 6. 4. -->probor(y2) ans = 1. 9. 31.実行結果その2、「wとx縦ベクトル」のとき
-->w=[4 5 6] w = 4. 5. 6. -->[x',w'] ans = 1. 4. 2. 5. 3. 6. -->probor(x',w') ans = 1. - 3. - 9.既知のバグ「wがあってxが行列のとき」
-->probor(y2,w') ans = 1. - 3. - 9.
PR
トラックバック
URL :
コメント