when i run my code, it says index exceeds number of array elements. But i have used sum() which should by itself determine the array length, right? The final value of expression is a single integer which varies continuously in each iteration of loop.

 Akzeptierte Antwort

Ameer Hamza
Ameer Hamza am 30 Sep. 2020
Bearbeitet: Ameer Hamza am 30 Sep. 2020

1 Stimme

No, the error is caused by missing multiplication operators on line 33. * Should be placed after Kad at two places on this line.
A new error occurs after the above correction that is caused because you are trying to access the 299th element of vector Cs, whereas it only has 294 elements.

3 Kommentare

Abhishek Varma
Abhishek Varma am 30 Sep. 2020
why is sum() bothered with value of i? it should simply sum the elements in array and give me the result. right? what should i do if i want to code like what i want
Stephen23
Stephen23 am 30 Sep. 2020
Bearbeitet: Stephen23 am 30 Sep. 2020
"why is sum() bothered with value of i?"
The error has nothing to do with sum.
"what should i do if i want to code like what i want"
If you want to multiply two variables, then you need to use a multiplication operator.
Abhishek Varma
Abhishek Varma am 30 Sep. 2020
Bearbeitet: Abhishek Varma am 30 Sep. 2020
No, i made the change to code.
Its now showing 'index exceed array element (294)'.
which means since i is varying from 299 to 1, it contradicts Cs which has only 294 elements. So, if i want to vary i from 299 to 1 at the same time, have to find the sum of elements in Cs, Cl, Cm which has 294,6,6 elements respectively, what should i do?
Or is this error purely because i missed * operator at other points im not aware of?

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Walter Roberson
Walter Roberson am 30 Sep. 2020

0 Stimmen

You have
Ef = (((Kad -(Aem*Kad(1+(((i-1)*sum(Cs,2))/K1s)))-(((i-1)*(sum(Cl,2)-Cl(1)-Cl(2)))/K1l)- (Cl(1)/KG1)- (Cl(2)/KG2)-1)) + ((((Kad -(Aem*Kad(1+(((i-1)*sum(Cs,2))/K1s)))-((i-1)*((sum(Cl,2)-Cl(1)-Cl(2))/K1l))- (Cl(1)/KG1)- (Cl(2)/KG2)-1))^2) + 4*Kad*((((i-1)*sum(Cl,2)-Cl(1)-Cl(2))/K1l)+(Cl(1)/KG1)+(Cl(2)/KG2)+1))^0.5)/(2*Kad*((((i-1)*sum(Cl,2)-Cl(1)-Cl(2))/K1l)+(Cl(1)/KG1)+(Cl(2)/KG2)+1));
That is a request to index the scalar Kad at offset (1+(((i-1)*sum(Cs,2))/K1s)) . That offset happens to be an integer that is greater than 1.
Reminder; MATLAB has absolutely no implied multiplication. When you see something of the form A(B) then it always means either invoking function A with parameter B, or else indexing array A with index B. It **never* means multiplying A by B. Not anywhere in MATLAB. Not even inside the internal programming language of the symbolic engine.

Community Treasure Hunt

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

Start Hunting!

Translated by