Problem with IF statement
显示 更早的评论
why doesn't it give me a result if I enter " if D == l " I wan't to calculate all initial velocities and angles at which the length is 100m.
clear all
close all
clc
%1
v0 = [15:0.001:60]; %initial velocity
kot = [15:60]; %angle
g = 9.81; %gravity
l = 100; %distance
for i = 1:length(v0)
for j = 1:length(kot)
D = (v0(i)^2*sind(2*kot(j)))/g; %distance
if D == l
fprintf('Vo = %.2f m/s | kot = %.2f° | D = %.2f \n',v0(i),kot(j), D);
end
end
end
回答(1 个)
Rik
2020-11-27
0 个投票
Don't use clear all. You don't need it.
I suspect you encountered the wondrous world of floats. Computers don't have infinite memory and may round numbers in ways that you don't expect. This is especially a problem if you are asking for exact equality, while you would be satisfied with equality within machine precision.
Instead of a==b use abs(a-b)<tol. You can use the eps function, or set another value.
4 个评论
Fe99
2020-11-27
Why not? Using the code below you can find how close D gets to 100. So if you pick a tolerance that is above that, your code will print.
v0 = 15:0.001:60; %initial velocity
kot = 15:60; %angle
g = 9.81; %gravity
l = 100; %distance
[i,j] = meshgrid(1:length(v0),1:length(kot));
D = (v0(i).^2.*sind(2*kot(j)))/g; %distance
smallest_diff=min(abs(D(:)-100))
%repeat your code, but with the edits I described
tol=5e-5;
for i = 1:length(v0)
for j = 1:length(kot)
D = (v0(i)^2*sind(2*kot(j)))/g; %distance
if abs(D-l)<tol
fprintf('Vo = %.2f m/s | kot = %.2f° | D = %.2f \n',v0(i),kot(j), D);
end
end
end
Fe99
2020-11-27
Rik
2020-11-27
No problem. If my answer solved your question, please consider marking my answer as accepted answer. If not, feel free to comment with your remaining issues.
类别
在 帮助中心 和 File Exchange 中查找有关 Programming 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!