The roots for an equation containing tangent
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Mia Finit
el 4 de Oct. de 2020
Respondida: Milind Amga
el 8 de Oct. de 2020
I'm going to find the roots of an equation containing tangent. like x*1.4 - atan(0.28*x)=37.5
I dont know how to write the code to find x in above equation.
1 comentario
James Tursa
el 4 de Oct. de 2020
You say "like". Is that your actual equation? Or is your actual equation something else?
Respuesta aceptada
Image Analyst
el 5 de Oct. de 2020
Assuming it's not your homework, try this:
x = linspace(0, 40, 10000);
y = x*1.4 - atan(0.28*x);
plot(x, y, 'b-', 'LineWidth', 2);
grid on;
yline(37.5, 'LineWidth', 2, 'Color', 'r');
diffs = abs(y - 37.5);
[minDiff, index] = min(diffs)
xCrossing = x(index)
caption = sprintf('y crosses 37.5 at x = %f', xCrossing);
title(caption, 'FontSize', 18);
xlabel('x', 'FontSize', 18);
ylabel('y', 'FontSize', 18);
xline(xCrossing, 'LineWidth', 2, 'Color', 'g');
4 comentarios
Image Analyst
el 6 de Oct. de 2020
Look:
x = 27.8147814781478
y = x*1.4 - atan(0.28*x)
and you'll see in the command window:
x =
27.8147814781478
y =
37.4975993926413
Didn't you want to know the value of x where y = 37.5? Because that's what we were all thinking. If not, explain it to someone else and let them write the question. Maybe it will be better understood by us if you do that.
Más respuestas (3)
Alan Stevens
el 5 de Oct. de 2020
If x*1.4 - atan(0.28*x)=37.5 is the equation then fixed point iteration will work.
Rewrite the equation as x(n+1) = (37.5+atan(0.28*x(n)))/1.4, use an initial guess for x, say, x(1) = 20, then use a while loop until x(n+1) and x(n) are the same (or within some tolerance).
3 comentarios
Alan Stevens
el 6 de Oct. de 2020
The following is what I mean:
% Fixed point iteration
% If the equation is 1.4x - atan(0.28x) = 37.5 rearrange it as
% x = (37.5 + atan(0.28x))/1.4
tol = 1^-8; % Set desired tolerance
x = 20; % initial guess
flag = true; % Set to false when converged
while flag
xold = x;
x = (37.5 + atan(0.28*xold))/1.4;
if abs(x-xold)<tol
flag = false;
end
end
disp(x)
However, if you have a different equation in mind, you might have to manipulate it in a few different ways in order to find an arrangement that converges.
An alternative is to look up the Newton-Raphson method.
Bruno Luong
el 6 de Oct. de 2020
>> fzero(@(x) x*1.4 - atan(0.28*x) - 37.5, 0)
ans =
27.8165
2 comentarios
Image Analyst
el 7 de Oct. de 2020
I did it numerically rather than analytically or by using a function. So it's not exact but as close as you want to get. However there are optimization functions (seems like a lot of them) that may do the trick. I'm not very familiar with them, since I don't have the optimization toolboxes. There is a function fminsearch() you may want to study up on. Or lsqnonneg().
Ver también
Categorías
Más información sobre Linear Least Squares en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!