Initial guess Error using fsolve

조회 수: 1 (최근 30일)
Shailee Yagnik
Shailee Yagnik 2019년 8월 23일
댓글: Walter Roberson 2019년 8월 29일
This is my code
clear all
tic
% fun= @(x)qfunc(2-0.5*x)*exp(-x^2);
% %
P0=0.5;
P1=1-P0;
P=P0/P1;
rho=0.3; %covariance
s1=0.5; %mean of sensor 1
s2=1;%mean of sensor 2
Sm=max(s1,s2);
t1=-20:0.01:20 ; %threhsold for sensor 1
stop=0;
stop_1=0;
for i=1:length(t1)
fun= @(x2) exp(-s2.^2./2).*exp(x2.*s2).*qfunc((t1(i)-s1-rho.*x2+rho.*s2)./sqrt(1-rho.^2))-P.*qfunc((t1(i)-rho.*x2)./sqrt(1-rho.^2))
myfun= @(y) exp(-s2^2./2).*exp(y*s2)*(1-qfunc((t1(i)-s1-rho*y+rho*s2)./sqrt(1-rho^2)))./(1-qfunc((t1(i)-rho.*y)./sqrt(1-rho^2)))-P;
y0=rand;
tw0=fsolve(myfun,y0);
end
I get this error msg ''Objective function is returning undefined values at initial point. fsolve cannot
continue.''
I think the function handle becomes of 0/0 form for initial guess because of qfunc of what I have underlined. How do I put a condtion to use the approximate of qfunc whenever the fsolve counters 0/0 form?
  댓글 수: 2
Walter Roberson
Walter Roberson 2019년 8월 23일
Array indices must be positive integers or logical values.
Error in @(y)exp(-s2^2./2).*exp(y*s2)*(1-qfunc((t1(i)-s1-rho*y+rho*s2)./sqrt(1-rho^2)))./(1-qfunc((t1(i)-rho.*y)./sqrt(1-rho^2)))-P
Your t1 is a vector, but your i is not defined so it defaults to being sqrt(-1) which is not a valid index.
Shailee Yagnik
Shailee Yagnik 2019년 8월 23일
Hello,
I have editted the above code in question kindly go through it. It still gives the error: ''Objective function is returning undefined values at initial point. fsolve cannot continue''

댓글을 달려면 로그인하십시오.

채택된 답변

Walter Roberson
Walter Roberson 2019년 8월 23일
NZ = @(a,b) a ./ (b + (a==0 & b == 0));
myfun=@(y) exp(-s2^2./2).*exp(y*s2).*NZ(1-qfunc((t1(i)-s1-rho*y+rho*s2)./sqrt(1-rho^2)),1-qfunc((t1(i)-rho.*y)./sqrt(1-rho^2)))-P;
This detects the case where numerator and denominator are both 0, and substitutes 1 for the denominator in that case, giving a 0/1 result. Perhaps you might prefer
NZ = @(a,b) (a + (a==0 & b == 0)) ./ (b + (a==0 & b == 0));
  댓글 수: 7
Shailee Yagnik
Shailee Yagnik 2019년 8월 29일
NEED Help!
is it correct to write and execute the function in context to the above problem:
NZ = @(a,b,y) ( (a+ (a==0 & b==0).*(1-1./(sqrt(2.*pi).*(t1-s1-rho.*y+rho.*s2)./sqrt(1-rho.^2))).*exp(-((t1-s1-rho.*y+rho.*s2)./sqrt(1-rho.^2)).^2./2))./ (b + (a==0 & b==0 )*(1-1./(sqrt(2.*pi).*(t1-rho.*y)./sqrt(1-rho.^2))).*exp(-((t1-rho.*y)./sqrt(1-rho.^2)).^2./2)));
myfun= @(y) (exp(-s2^2./2).*exp(y*s2)*NZ(qfunc(-(t1(i)-s1-rho*y+rho*s2)./sqrt(1-rho^2)),qfunc(-(t1(i)-rho.*y)./sqrt(1-rho^2)),y))-(P);
Walter Roberson
Walter Roberson 2019년 8월 29일
Possibly. However for clarity I would probably move some of that expressions into helper functions; in its current form, it is difficult to read.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Solver Outputs and Iterative Display에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by