How to fix looping?

1 回表示 (過去 30 日間)
Devia Rafika Putri
Devia Rafika Putri 2013 年 5 月 15 日
this is my program:
v = 120;
r1 = 1.8;
x1 = 2.4;
r2 = 3.5;
x2 = 1.2;
xm = 60;
ns = 1800;
ws = 188.5;
s = (0.5:1:50)/50;
s (1) = 0.0001;
nm = (1-s)*ns;
for i = 1:51;
zf(i) =(((r2/s(i))+(j*x2))*(j*xm))/(((r2/s(i))+(j*x2))+(j*xm));
zb(i) = (((r2/(2-s(i)))+(j*x2))*(j*xm))/(((r2/(2-s(i)))+(j*x2))+(j*xm));
I(i) = v/(r1+(j*x1)+(0.5*zf(i))+(0.5*zb(i)));
PagF(i) = (abs(I(i)^2))*(0.5*real(zf(i)));
PagB(i) = (abs(I(i)^2))*(0.5*real(zb(i)));
Pag(i)=PagF(i)-PagB(i);
Tind(i) = Pag(i)/ws;
end
figure (1);
plot(nm,Tind,'Color','b','LineWidth',2.0);
grid on;
hold off;
*but after i run this program an error occurred with argument: Attempted to access s(51); index out of bounds because numel(s)=50.
Error in ==> fasbel3 at 15 zf(i) =(((r2/s(i))+(j*x2))*(j*xm))/(((r2/s(i))+(j*x2))+(j*xm));
how to fix it? please help thanks.. with sincerity :)
  4 件のコメント
Craig Cowled
Craig Cowled 2013 年 5 月 15 日
Devia, Andrei's code is much neater. No need for a loop, just use element wise divide './'. And no, I'm not an electrical engineer. I'm a structural engineer working on experimental structural dynamics problems.
Devia Rafika Putri
Devia Rafika Putri 2013 年 5 月 15 日
ok craig.. i see.. but some code from andrei, i still dont understand.. but i'll find it..
ooh, I thought you were an electrical engineer
because I'm having problems with programs relating to single phase motor..
thanks so much craig..you are very helpful..

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

採用された回答

Andrei Bobrov
Andrei Bobrov 2013 年 5 月 15 日
編集済み: Andrei Bobrov 2013 年 5 月 15 日
v = 120;
r1 = 1.8;
x1 = 2.4;
r2 = 3.5;
x2 = 1.2;
xm = 60;
ns = 1800;
ws = 188.5;
s = [.0001;(.5:50).'/50];
s1 = [2-s,s];
z =(r2./s1+1i*x2)*1i*xm./( r2./s1+1i*(x2+xm) );
I = v./(r1+1i*x1+mean(z,2));
Tind = diff(bsxfun(@times,abs(I.^2),real(z)*.5),1,2)/ws;
plot((1-s)*ns,Tind,'Color','b','LineWidth',2.0);
grid on;
  3 件のコメント
Andrei Bobrov
Andrei Bobrov 2013 年 5 月 15 日
Hi Devia!
Please read about functions of the MATLAB: bsxfun, diff.
Rewrite code:
s = [.0001;(.5:50).'/50];
s1 = [2-s,s];
z =(r2./s1+1i*x2)*1i*xm./( r2./s1+1i*(x2+xm) );
I = v./(r1+1i*x1+mean(z,2));
Tind = diff(bsxfun(@times,abs(I.^2),real(z)*.5),1,2)/ws;
as:
s = [.0001;(.5:50).'/50];
s1 = [2-s,s];
z =(r2./s1+1i*x2)*1i*xm./( r2./s1+1i*(x2+xm) );
I = v./(r1+1i*x1+mean(z,2));
Ia2 = abs(I.^2);
r = real(z)*.5;
P = bsxfun(@times,Ia2,r); % as in your code: P = [PagB PagF];
Pag = diff(P,1,2); % as Pag = PagF - PagB;
Tind = Pag/ws;
Devia Rafika Putri
Devia Rafika Putri 2013 年 5 月 15 日
Hi Andrei, thank you so much for your explain.. i'm so grateful.
but actually I have another problem. is about 1 phase motors, can you help me?
if you can, I will send my problem to your email..
thanks so much, Andrei..
with sincerity Devia

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

その他の回答 (1 件)

Yao Li
Yao Li 2013 年 5 月 15 日
It seems the length of array s is 50, but you wanna call s(51) in the for loop
  4 件のコメント
Yao Li
Yao Li 2013 年 5 月 15 日
Sometimes, I act as an electrical engineer. lol.
Pls. feel free to contact me if u have other questions. Email preferred.
Devia Rafika Putri
Devia Rafika Putri 2013 年 5 月 15 日
lol.. thanks so much Yao li, I've sent an email to you .. if you're not busy please check it..

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

カテゴリ

Help Center および File ExchangeMATLAB についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by