How to get mean value of x(i) in a loop?!
4 次查看(过去 30 天)
显示 更早的评论
Hey guys,
I've written a code like this. Everything is fine except I don't know how to calculate the mean of x(i) values at the end (I get errors when I put it in different places of my code!). Could any of you help me please? Here is the code (I want to calculate 1000 numbers, let's call them x(1), x(2), ... and finally take the average):
clc;
clear;
syms fS fR k Alpha uR uS y
N = 1000;
mu = 16;
sigma = 25;
uR = 20;
uS = 10;
Alpha = 12.153;
k = 6.010;
VR = 0.1;
VS = 0.25;
mu_R = uR * gamma (1 + 1/Alpha);
mu_S = uS * gamma (1 - 1/k);
SD_R = mu_R * VR;
SD_S = mu_S * VS;
fS == ((k/uS)*(uS/y)^(k+1))*exp(-(uS/y)^k);
fR == (Alpha/uR)*((y/uR)^(Alpha-1))*exp(-(uS/y)^k);
for i=1:N
R(i) = (mu_R + SD_R*rand());
S(i) = (mu_S + SD_S*rand());
hR(i) = normpdf(R(i), mu, sigma);
hS(i) = normpdf(S(i), mu, sigma);
h(i) = hR(i)*hS(i);
fS(i) = 0.601*exp(-1.0*(10.0/S(i))^(601/100))*(10.0/S(i))^(701/100);
fR(i) = 0.60765*exp(-1.0*(10.0/R(i))^(601/100))*(0.05*R(i))^(11153/1000);
fRS(i) = fR(i)*fS(i);
if (R(i)<S(i))
I(i)=1;
x(i) = (I(i)/h(i))*fRS(i);
end
end
Pf = mean(x)
Thank you!
0 个评论
采纳的回答
Walter Roberson
2015-10-16
Your statements
fS == ((k/uS)*(uS/y)^(k+1))*exp(-(uS/y)^k);
fR == (Alpha/uR)*((y/uR)^(Alpha-1))*exp(-(uS/y)^k);
with fS and fR and y as symbolic values, create a symbolic comparison, and then throw away the results of that symbolic comparison. Remember, "==" is not an assignment statement.
These two lines are the only place that y occurs.
If you compare the names you declare as syms to your code, then other than y (which is not used in any computation other than to throw the values away), every other syms you declare is later replaced with a numeric value. You might as well not declare any of them to be syms at all (and delete the two useless "==" lines)
Before calculating mean(x) you need to know that x has been assigned at least one value. And you do not know that, because the only place you assign to x is inside an "if" that might possibly never be true. And it certainly might not be true for on the last iteration of the loop (or the one before, or the one before that or ...) so you do not know how long x is going to end up because it will only end up the length of the last "i" for which the condition holds.
2 个评论
Walter Roberson
2015-10-16
That suggests that there were no cases where your "if" was true.
I do not have the Statistics toolbox so I cannot test your code myself.
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!