# Using Sum(W) ==1 as a condition in a function

2 views (last 30 days)

Show older comments

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?

### Answers (3)

nl2605
on 19 Jul 2013

##### 6 Comments

Muthu Annamalai
on 22 Jul 2013

Image Analyst
on 20 Jul 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 Comment

Image Analyst
on 20 Jul 2013

Muthu Annamalai
on 22 Jul 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 Comments

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!