MATLAB: Function handle producing different output

bisectionfunction handleMATLABwhile loop

Hi,
I am trying to write a code to find the intersection of the two curve:
A = @(m) -2.*(1/1.895.*((1+(1.4-1).*m.^2/2).^(1.4/(1.4-1)))-1)./(1.4.*m.^2);
B = @(m) (0.38./sqrt(1-m.^2));
m_lower = 0;
m_upper = 1;
m_mid = (m_lower+m_upper)/2;
{while abs(A(m_mid))-(B(m_mid))) > 0
if (A(m_mid))<(B(m_mid))
m_lower = m_mid
else
m_upper = m_mid
end
m_mid = (m_lower+m_upper)/2
end
However, when I tried to plot the curves, (i.e. fplot(A,[0 1]);) it gives me an incorrect curve. but when I tried to solve individually A(1) etc. etc., it produce the correct answer. Similarly when I tried to loop the equation in the while loop, it just goes to infinity because it using the wrong curve.
Many thanks in advance!

Best Answer

Your functions produce complex results, so the best you can hope for is to compare the absolute values of them:
A = @(m) -2.*(1/1.895.*((1+(1.4-1).*m.^2/2).^(1.4/(1.4-1)))-1)./(1.4.*m.^2);
B = @(m) (0.38./sqrt(1-m.^2));
AminusB = @(m) abs(A(m)) - abs(B(m));
IntSct(1) = fzero(AminusB, 0.5)
IntSct(2) = fzero(AminusB, 1.5)
x = linspace(0, 5, 100);
figure(1)
semilogy(x, abs(A(x)), x, abs(B(x)) )
hold on
plot(IntSct(1), abs(A(IntSct(1))), 'gp', 'MarkerSize',10)
plot(IntSct(2), abs(A(IntSct(2))), 'gp', 'MarkerSize',10)
hold off
grid
Producing:
IntSct =
754.2877e-003 1.3359e+000
I found the intersections by taking the differences between the absolute values of your functions, and then letting the fzero function find the zero crossings.