フィルターのクリア

How to code a multivalued sign function

3 ビュー (過去 30 日間)
lady bird
lady bird 2015 年 3 月 30 日
コメント済み: lady bird 2015 年 4 月 1 日
Hello all Please could you help me i want to code a multivalued signum function that is defined by
Let x ∈ R. The multivalued signum function Sgn: R ⇒ R is defined as:
sgn(x) ={ 1 if x > 0 −1 if x < 0 [−1, 1] if x = 0.
If x ∈ R^n then the multivalued signum function Sgn: R^n⇒R^n
is defined as: Sgn(x) : = (Sgn(x1), . . . , Sgn(xn))^T
Thank you so much for your help Best regards

採用された回答

Stephen23
Stephen23 2015 年 4 月 1 日
編集済み: Stephen23 2015 年 4 月 1 日
Based on the explanation given "Can we program the same function but when x=0 the output sgn(0) is to take any value in the range [-1,1]?", then this fully vectorized code will achieve this:
function Y = msgn(X)
% Multivalued sign function
Y = sign(X);
Z = Y==0;
Y(Z) = 1-2*rand(1,sum(Z(:)));
end
And then we can test it:
>> msgn(5)
ans =
1
>> msgn(-5)
ans =
-1
>> msgn(0)
ans =
-0.6294
>> msgn([-5,0,0,0,5])
ans =
-1.0000 -0.8116 0.7460 -0.8268 1.0000
Note that I used rand, which provides uniformly distributed values. If you want another random distribution, then you can simply change this function to another, such as randn.
Note also that the function accepts and returns arrays of any size, just like sign does.
  1 件のコメント
lady bird
lady bird 2015 年 4 月 1 日
Thank you so much Mr Stephen Cobeldick Best regards

サインインしてコメントする。

その他の回答 (1 件)

Stephen23
Stephen23 2015 年 3 月 30 日
編集済み: Stephen23 2015 年 3 月 30 日
Two simple versions: the first assumes that the input is a scalar numeric:
function v = sgn(x)
assert(isscalar(x),'input must be scalar')
a = [-1,1];
v = a([x<=0,x>=0]);
end
>> sgn(-5)
ans = -1
>> sgn(0)
ans = [-1,1]
>> sgn(5)
ans = 1
The second allows a vector input:
function v = sgn(x)
assert(isvector(x),'input must be vector')
a = [-1;1];
u = arrayfun(@(n)a([n<=0,n>=0]),x(:),'UniformOutput',false);
v = reshape(cell2mat(u),1:isrow(x),1:iscolumn(x));
end
>> sgn([-5,0,5])
ans = -1 -1 1 1

カテゴリ

Help Center および File ExchangeDescriptive Statistics についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by