If statement didnt work correctly
3 次查看(过去 30 天)
显示 更早的评论
Mariam Gasra
2019-3-26
If i run the program if p less than min the result must be equal to zero but in this programme the result equal to min can any one correct the program
clc;
unit=input('input the number of unit:');
D=input('input total load :');
dP=D;
Bdat1=input('transmission losses considered matrix:');
B=Bdat1;
dB=diag(B);
data1=input('input the data:n a b c min max');
DA=array2table(data1,'V',{'Unit' 'a' 'b' 'c' 'Pl' 'Ph'});
x=max(DA.b);
n=input('insert number of iteration:')
for i=1:n
while abs(dP)>0.00001
P=(x-DA.b)./(2*(DA.c+x*dB));
P=min(P,DA.Ph);
P=max(P,DA.Pl);
dP=D+P'*B*P-sum(P);
x=x+dP*2/(sum(1./DA.c));
end
end
if P<min(P,DA.Ph)
P=0;
P=P+P;
else
P=P;
end
if P>max(P,DA.Pl)
P=0;
P=P+P;
else
P=P;
end
C=DA.a+DA.b.*P+DA.c.*P.*P;
totalCost=sum(C);
display(totalCost);
lamda=x;
display(lamda);
Loss=P'*B*P;
display(Loss);
table(DA.Unit,P,C,'V',{'Unit' 'Power' 'Cost'})
19 个评论
Stephan
2019-3-26
Attaching pictures of code is useless. provide code we can copy and paste in Matlab.
Walter Roberson
2019-3-26
I have a suspicion that P becomes a vector or matrix rather than a scalar, but we would need the actual code (instead of an image of the code) and we would need to know what inputs to use.
James Tursa
2019-3-26
What are the sizes of the variables involved? In particular, which ones are scalars and which ones are vectors/matrices/arrays?
Mariam Gasra
2019-3-26
编辑:Walter Roberson
2019-3-26
Unit=3
Total load=850
Bdat1=[0.00003 0 0;0 0.00009 0;0 0 0.00012]
data1=[605 7.92 0.001562 500 600; 310 7.785 0.00194 100 400;78 7.97 0.00482 50 300]
n=1
Walter Roberson
2019-3-26
Your code is expecting 6 columns for data1, but your suggested input has only 5 columns for it.
Mariam Gasra
2019-3-27
编辑:Walter Roberson
2019-3-27
Unit=3
Total load=850
Bdat1=[0.00003 0 0;0 0.00009 0;0 0 0.00012]
data1=[1 605 7.92 0.001562 500 600; 2 310 7.785 0.00194 100 400;3 78 7.97 0.00482 50 300]
n=1
Yasasvi Harish Kumar
2019-3-27
DA.Ph is not less than P, therefore your condition isn't true and P is not equal to 0. Consider changing your input for data1 to satisfy the condition.
Mariam Gasra
2019-3-27
编辑:Walter Roberson
2019-3-27
Unit=3
Total load=850
Bdat1=[0.00003 0 0;0 0.00009 0;0 0 0.00012]
data1=[605 7.92 0.001562 700 800; 310 7.785 0.00194 100 400;78 7.97 0.00482 50 300]
n=1
Jan
2019-3-27
编辑:Jan
2019-3-27
The code is meaningless:
P=0;
P=P+P;
else
P=P;
??? While "P=P" does nothing, setting P to 0 and adding it to itself will not change the value of P.
The comparison:
if P<min(P,DA.Ph)
is not smart also: min(P, X) replies the minimum of both values. Comparing P with something, which is the minimum of P and a value, is the same as comparing P with this value:
if P < DA.Ph
This means, that you can replace:
if P<min(P,DA.Ph)
P=0;
P=P+P;
else
P=P;
end
if P>max(P,DA.Pl)
P=0;
P=P+P;
else
P=P;
end
by
if P < DA.Ph || P > DA.Pl
P = 0;
end
Mariam Gasra
2019-3-27
Thanks alot But i want in second step add the value of p if its less than min or greater than max to another p's For example if min of p1 500 and the value of p1 get 400 I wannt p1 equal to zero and the 400 added to another p which is p2 and p3
Jan
2019-3-27
@Mariam: Then simply implement this. I do not understand, what this means:
"I wannt p1 equal to zero and the 400 added to another p which is p2 and p3"
Mariam Gasra
2019-3-27
If i run the program there is error Operands to the and && operators must be convertible to logical scalar VaLues
Walter Roberson
2019-3-27
Your P is a vector 3 x 1 (at least for the parameters you posted in https://www.mathworks.com/matlabcentral/answers/452567-if-statement-didnt-work-correctly#comment_686298 )
You have tests comparing P to various values. With P being a vector, those are vector comparisons producing a vector result of logical values. When you use if or while with a non-scalar, the test is considered to succeed if all of the values are non-zero (which would correspond to all of the values being true for logical tests.) Thus
if P<min(P,DA.Ph)
is interpreted by MATLAB as
if all(P<min(P,DA.Ph))
Are you sure that is what you mean?
Perhas what you would want is
P(P < DA.Pl | P > DA.Ph) = 0;
Mariam Gasra
2019-3-27
Still i have same problem if p less than min the output equal to min value of p but i want it to be equal to zero
Mariam Gasra
2019-3-28
in this example P1=435.2
P2=299.97 P3=130.66
if min of P1=500
thhen by if statment condition p=0 and the value of P1 "435.2" add it to P2 and P3
Jan
2019-3-28
@Mariam: The variables P1, P2 and P3 do not occur anywhere in your code, so what is the meaning of providing their values here?
Another hint:
for i=1:n
while abs(dP)>0.00001
P=(x-DA.b)./(2*(DA.c+x*dB));
P=min(P,DA.Ph);
P=max(P,DA.Pl);
dP=D+P'*B*P-sum(P);
x=x+dP*2/(sum(1./DA.c));
end
end
The "for i=1:n" loop is meaningless here. In the first iteration for i==1 the inner loop runs until dP has the wanted size. In all following loops i=2:n the inner loop is not entered anymore, because the value of dP is not modified. So you can omit the for loop completely.
There is a language problem also: I do not understand the meaning of "by if statment condition p=0 and the value of P1 "435.2" add it to P2 and P3".
Without meaningful and exhaustive comments it is impossible to guess the purpose of the code. Please cleanup the code and post it again. Otherwise "Still i have same problem" is not clear enough to be answered.
Mariam Gasra
2019-3-28
If I enter the above data i get3 value of P : 435.2, 299.97,130.66 If min of first p =500 Then first p should equal to zero by if statement conditions
For loop it's for number of unit
Jan
2019-5-3
@Mariam: You still did not mention, what the problem is. Posting a bunch of unclear question might decrease the interest of the forum in reading your questions.
回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Surface and Mesh Plots 的更多信息
标签
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!发生错误
由于页面发生更改,无法完成操作。请重新加载页面以查看其更新后的状态。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
亚太
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)