**You are now following this question**

- You will see updates in your followed content feed.
- You may receive emails, depending on your communication preferences.

# If statement didnt work correctly

6 views (last 30 days)

Show older comments

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 Comments

Walter Roberson
on 26 Mar 2019

James Tursa
on 26 Mar 2019

Walter Roberson
on 26 Mar 2019

Okay, and what inputs should we use?

Mariam Gasra
on 26 Mar 2019

Edited: Walter Roberson
on 26 Mar 2019

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
on 26 Mar 2019

Your code is expecting 6 columns for data1, but your suggested input has only 5 columns for it.

Mariam Gasra
on 27 Mar 2019

Edited: Walter Roberson
on 27 Mar 2019

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
on 27 Mar 2019

Mariam Gasra
on 27 Mar 2019

Edited: Walter Roberson
on 27 Mar 2019

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
on 27 Mar 2019

Edited: Jan
on 27 Mar 2019

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
on 27 Mar 2019

Mariam Gasra
on 27 Mar 2019

Walter Roberson
on 27 Mar 2019

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
on 27 Mar 2019

Mariam Gasra
on 28 Mar 2019

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
on 28 Mar 2019

@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
on 28 Mar 2019

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

### Answers (0)

### See Also

### Categories

### Tags

### Products

### Community Treasure Hunt

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

Start Hunting!**An Error Occurred**

Unable to complete the action because of changes made to the page. Reload the page to see its updated state.

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list

How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

Americas

- América Latina (Español)
- Canada (English)
- United States (English)

Europe

- 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)

Asia Pacific

- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)