fzero coupled with ode45
이전 댓글 표시
I'm getting, the following comments while trying to solve ....
rspan = [0 10];
y0 =[0 0 0 0 0 0 0 0];
[r,y] = ode45(@(r,y) fun(r,y), rspan, y0)
function F = fun(r,y)
%% Parameters
X1 = 100;
X2 = 100;
M = 151;
S = 92;
R = 0.8/197.3;
m1 = 110;
g1 = 6.26;
m2 = 120;
g2 = 8.17;
m3 = 130;
g3 = 9.33;
Q = .5;
a = 7.33*10^(-4);
X11 = X1 - g1*(1-(a*g1*y(1)/2))*y(1);
X21 = X2 - g1*(1-(a*g1*y(1)/2))*y(1);
%% Evaluation of fp and fn
fp = @(Op)(1 - (X11.*R) - sqrt(Op.^2 + (X11.*R).^2) - Op./tan(Op));
Opp = fzero(@(Op)fp(Op), [-10 10]);
fn = @(On)(1 - (X21.*R) - sqrt(On.^2 + (X21.*R).^2) - On./tan(On));
Onn = fzero(@(On)fn(On),[-10 10]);
Ep1 = sqrt((Opp/R).^2 + X11^2);
En1 = sqrt((Onn/R).^2 + X21^2);
%% Functions
Wp = sqrt(Ep1.^2 - X11^2);
Wn = sqrt(En1.^2 - X21^2);
ap = Wp.*r;
an = Wn.*r;
Jp = besselj(0,ap);
Jp1 = besselj(1,ap);
Jn = besselj(0,an);
Jn1 = besselj(1,an);
%% Component
Kp = sqrt((Ep1.^2 + X11^2)./Ep1.^2) .* Jp .* r;
Lp = sqrt((Ep1.^2 - X11^2)./Ep1.^2) .* Jp1 .* r;
Kn = sqrt((En1.^2 + X21^2)./En1.^2) .* Jn .* r;
Ln = sqrt((En1.^2 - X21^2)./En1.^2) .* Jn1 .* r;
%% Constant
Ap = Wp*R;
An = Wn*R;
NJp = besselj(0,Ap);
NJn = besselj(0,An);
Np = (S/(4*pi*R^3))^(1/2) .* (Ep1.*(Ep1-X11)*R).^(1/2)./(NJp.*(2*R.*Ep1.^2 - 2.*Ep1 + X11).^(1/2));
Nn = (M/(4*pi*R^3))^(1/2) .* (En1.*(En1-X21)*R).^(1/2)./(NJn.*(2*R.*En1.^2 - 2.*En1 + X21).^(1/2));
p1 = ((Np.^2 .* (Kp.^2 - Lp.^2)) + (Nn.^2 .* (Kn.^2 - Ln.^2)))./(4*pi*r.^2);
p2 = ((Np.^2 .* (Kp.^2 + Lp.^2)) + (Nn.^2 .* (Kn.^2 + Ln.^2)))./(4*pi*r.^2);
p3 = ((Np.^2 .* (Kp.^2 + Lp.^2)) - (Nn.^2 .* (Kn.^2 + Ln.^2)))./(4*pi*r.^2);
p4 = (Np.^2 .* (Kp.^2 + Lp.^2))./(4*pi*r.^2);
%% Equations
F(1) = y(2);
F(2) = - (2*y(2)/r) + (m1^2*y(1)) - (g1*(1- a*g1*y(1))*p1);
F(3) = y(4);
F(4) = - (2*y(4)/r) + (m2^2*y(3)) - (g2*p2);
F(5) = y(6);
F(6) = - (2*y(6)/r) + (m3^2*y(5)) - (g3*p3/2);
F(7) = y(8);
F(8) = - (2*y(8)/r) - (Q*p4);
F=[F(1);F(2);F(3);F(4);F(5);F(6);F(7);F(8)];
end
Error using fzero (line 274)
Function values at the interval endpoints must differ in sign.
Error in error_code>fun (line 26)
Opp = fzero(@(Op)fp(Op), [-10 10]);
Error in error_code>@(r,y)fun(r,y) (line 5)
[r,y] = ode45(@(r,y) fun(r,y), rspan, y0)
Error in odearguments (line 90)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ode45 (line 115)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);
Error in error_code (line 5)
[r,y] = ode45(@(r,y) fun(r,y), rspan, y0)
Warning: Function fields has the same name as a MATLAB builtin. We suggest you rename the function
to avoid a potential name conflict.
Please help me out to solve this problem, where fzero is coupled with ode45.
댓글 수: 8
Jan
2023년 1월 23일
- "Warning: Function fields has the same name as a MATLAB builtin. We suggest you rename the function to avoid a potential name conflict." - This is easy to solve.
- You try to find the zeros of this function in the interval [-10, 10]:

I can understand why this fails.
pritha
2023년 1월 23일
pritha
2023년 1월 25일
Walter Roberson
2023년 1월 25일
Mp1 is not defined in your code.
pritha
2023년 1월 27일
Walter Roberson
2023년 1월 27일
You still have a division by tan(Op) . That leads to an indefinite number of solutions that cannot be chosen between without additional information.
If you move out that tan(Op) to form
((Op./((1 - (X11.*R) - sqrt(Op.^2 + (X11.*R).^2))))) == tan(Op)^2
then by examination we can see that Op == 0 is a solution except in the case that X11 == 0 or R == 0.
채택된 답변
추가 답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Numeric Solvers에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!