Using Sum(W) ==1 as a condition in a function
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
I have to write [sum(W) should equal 1] within a function. W is an 8 element vector.
When I try to write: if sum(W)==1
the function stops working. I have tried many variations of this but none of them work. Currently the sum of W is equal to 1.
How can I put this condition in the function?
4 comentarios
Respuestas (3)
nl2605
el 19 de Jul. de 2013
I think all you need to do is to pass the value A,B,C,D,E,F,G,H,W when you call this function. It has got nothing to do with sum. Also, the code that you have posted here has a semi-colon after if statement which is wrong. If its just a typo then its ok.
6 comentarios
Muthu Annamalai
el 22 de Jul. de 2013
sum(W) == 1 may involve some floating point comparison issues depending on the type of variable W. Without the full invocation code of function RARvariance1 we I cannot speculate on that.
Image Analyst
el 20 de Jul. de 2013
For some reason your function is returning before it ever gets to the "RARV=-(ER)/sqrt(V);" line so RARV (which is required to be defined because it needs to be returned) never gets defined.
I have an idea - why don't you use the debugger to step through your code? http://blogs.mathworks.com/videos/2012/07/03/debugging-in-matlab/ You will quickly see which lines of code get executed and which don't.
1 comentario
Image Analyst
el 20 de Jul. de 2013
Editada: Image Analyst
el 20 de Jul. de 2013
That's too bad. Debugging is a skill you should be able to learn. If you click in the margin and get the red spot on the first line in the function, the click F5 to run your program, when is stops at the red spot, you'll see that you don't have SW less than 1 so you go into the "else" block. Unfortunately you have no code in there, thus RARV never gets assigned to any value. What do you want to happen if SW > 1? Whatever it is, put that code after the else and make sure you assign some value for RARV.
Muthu Annamalai
el 22 de Jul. de 2013
@Andrew on the similar lines as @Image Analyst - I think your return value is not assigned because you don't enter the if-condition branch.
So why don't you replace the code, using an assertion, and eliminating the if-else-end statement.
function RARV=RARvariance1(A,B,C,D,E,F,G,H,W)
T=length(A); %Time period, the same for all assets SW=sum(W);
assert( abs( SW - 1.0000) < 1e-3, 'sum(W) does not add to 1')
DD=[A-mean(A), B-mean(B), C-mean(C), D-mean(D), E-mean(E), F-mean(F), G-mean(G), H-mean(H)]; %Temporal, needed for covariances
Cov=DD'*DD/T;
V=W(1,:)*Cov*W(1,:)';
%Portfolio expected returns
ER=[mean(A), mean(B), mean(C), mean(D), mean(E), mean(F), mean(G), mean(H)]*W(1,:)';
%(Negative) risk adjusted return
RARV=-(ER)/sqrt(V); %Change V to sqrt(V) for semi-standard deviation
end
0 comentarios
Ver también
Categorías
Más información sobre Parallel Computing Fundamentals en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!