eq1 have at each nf the values 0.186170065500000 0.336133515500000 0.486096965500000 0.636060415500000 0.786023865500000 0.935987315500000 1.08595076550000
i want to plot out1 when eq1 >1so, out1 should be calculated at 1.08595076550000
eq1=((bwf*nf)./wi)+((bwm*nm1)./wi);
out1=(bwf*nf)./wi;
plot (eq1);
hold on
if all(eq1 >=1)
out1=(bwf*nf)./wi;
plot (out1);
end

1 件のコメント

Adam
Adam 2018 年 11 月 22 日
To answer the question in the title, read the logic of your if statement.
if all( eq1 >= 1 )
i.e. it will only evaluate to true if all the values in eq1 are greater than or equal to 1. The result is a scalar logical, as needed generally for an if statement, but it isn't capturing what you want.

サインインしてコメントする。

 採用された回答

madhan ravi
madhan ravi 2018 年 11 月 22 日
編集済み: madhan ravi 2018 年 11 月 22 日

0 投票

8 件のコメント

maryhan mohamed
maryhan mohamed 2018 年 11 月 22 日
it works now
but,
nf 1:7
so eq1 will be >1 at nf=7 only
when out1 is calculated by the above code it calculate all nf 1:7 not nf=7
madhan ravi
madhan ravi 2018 年 11 月 22 日
Did you read the first link?
maryhan mohamed
maryhan mohamed 2018 年 11 月 22 日
編集済み: madhan ravi 2018 年 11 月 22 日
yes, i got my floating point problem
but
nf = 1, 2,3,4,5,6,7
and
eq1 will be >1 at nf=7
please, i want to calculate the out1 when eq1 >1 at nf =7
out1=(bwf*nf)./wi;
my code give me result for out1 at each nf not at nf =7
eq1=((bwf*nf)./wi)+((bwm*nm1)./wi);
out1=(bwf*nf)./wi;
plot (eq1);
hold on
if sum(eq1)>=1
out1=(bwf*nf)/wi;
plot (out1);
end
madhan ravi
madhan ravi 2018 年 11 月 22 日
if abs(eq1-1)>1e-4 %set tolerance by the way you didn't read the links I suggested
maryhan mohamed
maryhan mohamed 2018 年 11 月 22 日
from the shown code,
eq1=((bwf*nf)./wi)+((bwm*nm1)./wi);
out1=(bwf*nf)./wi;
plot (eq1);
hold on
if abs(eq1-1)>1e-4
out1=(bwf*nf)/wi;
plot (out1);
end
the output will be
eq1=0.186170065500000 0.336133515500000 0.486096965500000 0.636060415500000 0.786023865500000 0.935987315500000 1.08595076550000
out1=0.149963450000000 0.299926900000000 0.449890350000000 0.599853800000000 0.749817250000000 0.899780700000000 1.04974415000000
please,, what i want is to make out1 result = 1.04974415000000 only % nf=7 at eq1=1.08595076550000 which is greater than 1.
thanks for ur helping,
madhan ravi
madhan ravi 2018 年 11 月 22 日
bwf , wi?
maryhan mohamed
maryhan mohamed 2018 年 11 月 22 日
wi=10000000;
nf=1:7;
nm1=1;
bwf=1499634.50;
bwm=362066.155;
madhan ravi
madhan ravi 2018 年 11 月 22 日
編集済み: madhan ravi 2018 年 11 月 22 日
wi=10000000;
nf=1:7;
nm1=1;
bwf=1499634.50;
bwm=362066.155;
eq1=[0.186170065500000 0.336133515500000 0.486096965500000 0.636060415500000 0.786023865500000 0.935987315500000 1.08595076550000];
idx=abs(eq1-0)>1
result=(bwf*nf)/wi;
result=result(idx)

サインインしてコメントする。

その他の回答 (1 件)

Image Analyst
Image Analyst 2018 年 11 月 22 日

3 投票

The link about comparing equality of floating point numbers is good information, though it doesn't apply here since none of your eq1 numbers are expected to be exactly 1 - they're all clearly either more than or less than 1.
Your original code
wi=10000000;
nf=1:7;
nm1=1;
bwf=1499634.50;
bwm=362066.155;
eq1=((bwf*nf)./wi)+((bwm*nm1)./wi);
out1=(bwf*nf)./wi;
plot (eq1);
hold on
if all(eq1 >=1)
out1=(bwf*nf)./wi;
plot (out1);
end
did plot the first plot. It did not plot the second plot since not ALL elements of eq1 were more than 1. I believe you want masking, where you plot only those elements where eq1 > 1 and no others ("i want to plot out1 when eq1 >1"). To do that, see this corrected code:
wi=10000000;
nf=1:7;
nm1=1;
bwf=1499634.50;
bwm=362066.155;
eq1=((bwf*nf)./wi)+((bwm*nm1)./wi)
% Plot eq1.
plot (eq1, 'bo-');
xlabel('index', 'FontSize', 15);
ylabel('eq1', 'FontSize', 15);
grid on;
% Compute out1.
out1 = (bwf * nf) ./ wi % Note: same as
% Create a mask where only those where eq1 > 1 are true.
mask = eq1 > 1
% Plot only those where eq1 > 1 (where the mask is true).
hold on;
x = 1 : length(out1)
plot (x(mask), out1(mask), 'r*', 'MarkerSize',13, 'LineWidth', 2);
legend('eq1', 'out1', 'Location', 'north');
0000 Screenshot.png
Your original eq1 (outside the if block) is plotted in blue while the points of out1, only where eq1 is greater than 1, are plotted in red.

1 件のコメント

maryhan mohamed
maryhan mohamed 2018 年 11 月 22 日
thanks alot for your help

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeEnvironment and Settings についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by