Info

この質問は閉じられています。 編集または回答するには再度開いてください。

Error:Subscript indices must either be real positive integers or logicals

1 回表示 (過去 30 日間)
John
John 2014 年 9 月 22 日
閉鎖済み: MATLAB Answer Bot 2021 年 8 月 20 日
I am fairly new to MATLAB and I am still learning the tricks to it. In this program I am trying to make, I want the program to calculate average power in two separate (but similar in design) AC circuits with 2 impedance and then plot these average power values vs. x. One impedance is a variable impedance where one impedance has its phase (x) varying from -50 degrees to 50 degrees and the other circuit contains the complex conjugate of this variable impedance. To keep these 2 circuits separate, I defined 2 different average power values to be calculated,(Pavg1 and Pavg2). I defined x to be a range from -50 to 50 with increments at 0.01. When I run my program, I get the error seen above and I am not certain as to why. Below is my code:
x = -50:0.01:50;
Zs = 20 + (20i);
Z01(x) = 20 + (x*1i);
Z02(x) = 20 - (x*1i);
Ztotal1(x) = Zs + Z01;
Ztotal2(x) = Zs + Z02;
I1(x) = 240/Ztotal1;
I2(x) = 240/Ztotal2;
Pavg1(x) = (240*I1(x))/2;
Pavg2(x) = (240*I2(x))/2;
Plot(x,Pavg1(x));
Plot(x,Pavg2(x))
And MATLAB says that my error is on Line 3 (Z01(x)).
Any help for a semi-beginner to MATLAB is appreciated. Thank you ahead of time for any help.

回答 (2 件)

Matt J
Matt J 2014 年 9 月 22 日
編集済み: Matt J 2014 年 9 月 22 日
x contains non-integer and negative numbers, so the indexing expression Z01(x) makes no sense. Presumably you really meant,
Z01 = 20 + (x*1i);
  1 件のコメント
John
John 2014 年 9 月 22 日
編集済み: John 2014 年 9 月 22 日
Thank you. I got rid of all of my (x) indexes and fixed a few things on the code. My new code looks likes this:
x = -50:0.01:50;
Zs = 20 + (20i);
Z01 = 20 + (x*1i);
Z02 = 20 - (x*1i);
Ztotal1 = Zs + Z01;
Ztotal2 = Zs + Z02;
I1 = 240./Ztotal1;
I2 = 240./Ztotal2;
Pavg1 = (240*I1)/2;
figure;
plot(Pavg1);
Pavg2 = (240*I2)/2;
figure;
plot(Pavg2);
It runs now, but I am still having a problem. I'm only getting one graph, not two. I need a graph of Pavg1 and a graph of Pavg2. Also, I need both of the graphs to be plotted against x. Can you explain to me how I do that? Thank you again for your help.

Iain
Iain 2014 年 9 月 22 日
編集済み: Iain 2014 年 9 月 22 日
The simple answer, which should work is to drop all of the (x) you've got.
The reason being that it looks like you're confusing a "function" with a "vector".
To define a function, on the fly:
Z01 = @(x) (20+x*i); %The second load of () are optional, but I find they make it clearer.
Z01(-5.45641) will then give you an answer
  3 件のコメント
John
John 2014 年 9 月 22 日
Thank you. I am still having a problem though. Please see my response to the above answer from "Matt J" for a description of the problem.
John
John 2014 年 9 月 22 日
Got it! Thank you both so much for your help!

この質問は閉じられています。

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by