Filter löschen
Filter löschen

While taking large range error is occur. How to solve this problem?

2 Ansichten (letzte 30 Tage)
My code is as below:
f=1:1000:1000000000;
t1=1/0.4521;
t2=1/0.4908;
t3=1/0.61;
t4=1/1;
for i=1:1000:1000000000
z1(i)=(3.68*10^(-7)*(t1)^(1/2)*(2*3.14*f(i))^0.5);
z2(i)=(3.68*10^(-7)*(t2)^(1/2)*(2*3.14*f(i))^0.5);
z3(i)=(3.68*10^(-7)*(t3)^(1/2)*(2*3.14*f(i))^0.5);
z4(i)=(3.68*10^(-7)*(t4)^(1/2)*(2*3.14*f(i))^0.5);
end
loglog(f,z1,'r',f,z2,'b',f,z3,'g',f,z4,'k');
xlabel('Frequency in Hz');
ylabel('Impedance in ohm');
Error is as below:
Error in ==> he_impe at 3
f=1:1000000000;
??? Attempted to access f(1e+006); index out of bounds because
numel(f)=1000000.
Error in ==> he_impe at 9
z1(i)=(3.68*10^(-7)*(t1)^(1/2)*(2*3.14*f(i))^0.5);
  1 Kommentar
Jan
Jan am 28 Apr. 2012
"3.68*10^(-7)" is processed much more efficient by "3.68e-7". SQRT is much faster than "^(1/2)".

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Walter Roberson
Walter Roberson am 28 Apr. 2012
Yes, that makes sense. 1:1000:1E9 has 1E9/1000 elements in it, but you try to access those elements at indexes as high as 1E9.
I would suggest to you:
for i=1:length(f)

Weitere Antworten (1)

Jan
Jan am 28 Apr. 2012
You can replace the loop:
z1 = 3.68e-7 * sqrt(t1 * 2 * 3.14 * f);
z2 = 3.68e-7 * sqrt(t2 * 2 * 3.14 * f);
z3 = 3.68e-7 * sqrt(t3 * 2 * 3.14 * f);
z4 = 3.68e-7 * sqrt(t4 * 2 * 3.14 * f);

Kategorien

Mehr zu Modeling finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by