Why does times(A,B) gives me negative values when A and B don't have any ???
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Benjamin
am 19 Jun. 2025
Bearbeitet: Torsten
am 19 Jun. 2025
Hello, i'm working with this code, which is a non-negative factorization :
function [G] = NN_Update_G(G_0,S,H,V,nb_iter,beta)
mustBePositive(G_0);
G=G_0;
if beta<1
gamma_beta=1/(1-beta);
elseif 1<=beta && beta <=2
gamma_beta = 1;
else
gamma_beta = 1/(beta-1);
end
G_old=G;
for k=1:nb_iter
mustBePositive(G_old);
product = (((S'*(((S*G_old*H).^(beta-2)).*V)*H'))./(S'*((S*G_old*H).^(beta-1))*H')).^gamma_beta;
mustBePositive(product);mustBePositive(G_old);
G = times(G_old,product);
mustBePositive(G);
G_old = G;
end
end
I don't know how but only the last mustBepostive(G) is triggered. It's the only one, which would mean that both G and product are positive beforehand.
I really hope someone can make some sense out of this because it's really bothering me not understanding what's the problem...
Akzeptierte Antwort
Steven Lord
am 19 Jun. 2025
Try using mustBeNonnegative instead of mustBePositive. This will detect if your calculation underflowed to 0.
x = realmin
mustBePositive(x) % true so no error
y = x*x % underflow
mustBeNonnegative(y) % true so no error
mustBePositive(y) % false
0 Kommentare
Weitere Antworten (1)
dpb
am 19 Jun. 2025
Verschoben: dpb
am 19 Jun. 2025
mustBePositive(0)
shows that zero is not considered positive by mustBePositive. You don't give any klews as to what the magnitudes of inputs are, but one must surmise that one or more of the elements must have underflowed owing to a large exponent in the product expression.
0 Kommentare
Siehe auch
Kategorien
Mehr zu Large Files and Big Data finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!