The roots for an equation containing tangent
3 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
James Tursa
2020 年 10 月 4 日
You say "like". Is that your actual equation? Or is your actual equation something else?
採用された回答
Image Analyst
2020 年 10 月 5 日
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 件のコメント
Image Analyst
2020 年 10 月 6 日
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.
その他の回答 (3 件)
Alan Stevens
2020 年 10 月 5 日
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 件のコメント
Alan Stevens
2020 年 10 月 6 日
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
2020 年 10 月 6 日
>> fzero(@(x) x*1.4 - atan(0.28*x) - 37.5, 0)
ans =
27.8165
2 件のコメント
Image Analyst
2020 年 10 月 7 日
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().
参考
カテゴリ
Help Center および File Exchange で Linear Least Squares についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!