필터 지우기
필터 지우기

Finding a root with interval constraint

조회 수: 3 (최근 30일)
Chien-Chia Huang
Chien-Chia Huang 2014년 1월 24일
댓글: Walter Roberson 2014년 1월 25일
Hello there!
I am trying to find a point x within the time interval [t-1,t] (for some t, say t = 3) so that the function attains value zero. That is, I want to solve "Q_0 + integral(a+b*sin(c*t+d)-mu,t-1,x) = 0" for x in [t-1,t]. My code is the following
y = fsolve(@(x) Q_0+(a-mu)*(x-t+1)-(b/c)*cos(c*x+d)+(b/c)*cos(c*(t-1)+d),0,optimset('Display','off'))
wherein (a,b,c,d) satisfy a + b*sin(c*t+d), and Q_0 and mu are constants. This code has no problem. However, the solution may sometimes be outside the time interval [t-1,t], which is not what I want.
So, my question is if there is a way to restrict the routine to find a solution that lies within [t-1,t] exactly?
Thanks!

채택된 답변

Walter Roberson
Walter Roberson 2014년 1월 24일
As your x0 is a scalar (0), your x are scalar, and that implies you can use fzero() instead of fsolve(). With fzero() you can pass the interval [t-1 t] as your x0.
  댓글 수: 5
Chien-Chia Huang
Chien-Chia Huang 2014년 1월 25일
편집: Chien-Chia Huang 2014년 1월 25일
Thanks, Walter. My code now goes like this (value of mu changes)
[FirstVanish,~,exitflag] = fzero(@(x) queuelength(counter_qln)+(a(j)-mu)*(x-t+1)-(b(j)/c(j))*cos(c(j)*x+d(j))+(b(j)/c(j))*cos(c(j)*(t-1)+d(j)),[t-1,t])
However, it showed the error msg
Error using fzero (line 274) The function values at the interval endpoints must differ in sign.
This is why I will need to know how to get things going without seeing the above.
Walter Roberson
Walter Roberson 2014년 1월 25일
Ah, then use try/catch

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

추가 답변 (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