MATLAB: Fzero function is returning initial value rather than finding zero.

fzerosymsum

I wrote following code but it is not returning zero. fzero returns initial values. Is there anything I did wrong?
alp=0.05; x=3; n=25;
syms k a;
ftest=@(a) 1-alp/2-.5*nchoosek(n,x)*a^x*(1-a)^(n-x) – symsum(nchoosek(n,k)*a^k*(1-a)^(n-k+1), k, 0, x-1);
fzero(ftest,0.02)
ans =
0.0200

Best Answer

  • It seems that fzero is having problems with the symbolic part of your function. If you first create it as a separate anonymnous function (using the matlabFunction function):
    alp=0.05; x=3; n=25;
    syms k a;
    nck = matlabFunction(symsum(nchoosek(n,k)*a^k*(1-a)^(n-k+1), k, 0, x-1));
    ftest=@(a) 1-alp/2-.5*nchoosek(n,x)*a^x*(1-a)^(n-x) - nck(a);
    ZV = fzero(ftest,0.5)
    the result is:
    ZV =
    0.018920195502436
    Note that the initial estimate and the result are different, so it is not returning the initial estimate as the optimised result.