忍者ブログ
MASTER →  ADMIN / NEW ENTRY / COMMENT
現代魔法(nearly equal 情報技術)を勉強中な人のメモ(チラシの裏)
/ 2024/04/25 (Thu) / 編集
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

/ 2009/08/12 (Wed) / 編集
間違ってる気はするが、MATLAB関数のproborをScilabで実装してみるメモ

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. 

拍手[0回]

PR
忍者ブログ [PR]