Why I get ans = logical 1
23 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Mohamed Mahir
le 3 Avr 2020
Commenté : Mohamed Mahir
le 3 Avr 2020
for i=1:100
x(i)=normrnd(0,1);
end;
A=x(:);
for i=1:100
if (A(i)<0.9557 & A(i) > 0)
Aq(i)=0.497;
elseif (A(i)>0.9957)
Aq(i)=1.493;
elseif (A(i)<-0.9957)
Aq(i)=-1.493;
else
(A(i)>-0.9957 & A(i) <0)
Aq(i)=-0.497;
end;
end;
sum=0;
for i=1:100
sum = (A(i)-Aq(i))^2+sum;
end;
Avg = sum/100
2 commentaires
Geoff Hayes
le 3 Avr 2020
Mohamed - look closely at your else
else
(A(i)>-0.9957 & A(i) <0)
Aq(i)=-0.497;
end;
Should this be an elseif instead where (A(i)>-0.9957 & A(i) <0) is the condition?
Réponse acceptée
Steven Lord
le 3 Avr 2020
Another approach uses discretize.
>> A = randn(10, 1);
>> edges = [-Inf -0.9957 0 0.9957 Inf];
>> values = [-1.493, -0.497, 0.497, 1.493];
>> Aq = discretize(A, edges, values);
>> results = table(A, Aq)
If an element of A falls between (for example) edges(2) and edges(3) the corresponding element in Aq will be values(2).
I put the results in a table array so you can easily check that each element of Aq matches what it should be for the corresponding element of A.
Plus de réponses (1)
David Hill
le 3 Avr 2020
Modifié(e) : David Hill
le 3 Avr 2020
Much easier way:
A=normrnd(0,1,[100,1]);
[~,~,a]=histcounts(A,[-10,-.9957,0,.9957,10]);
b=[-1.493;-0.497;0.497;1.493];
Aq=b(a);
s=sum((A-Aq).^2);
Avg = s/100;
Voir également
Catégories
En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!