EmbDev.net

Forum: DSP MATLAB error


von bora b. (borabora2012)


Rate this post
useful
not useful
Hi everyone,

I have an error in that algorithm.

Undefined function or method 'F' for input arguments of
type 'double'.

Error in ==> Untitled67 at 31
du(i-1)=F(i-1)*t/0.05;

My question is F(i-1) is result of the if elseif end loop below. How can 
I define it before? I wrote the equations

F(i-1)=F1(i-1)-F2(i-1)    and

F(i-1)=F4(i-1)-F3(i-1)    also before the if elseif loop but it does not 
work ... and it is unlogic to write the results before (??)... However 
the simulation runs when I wrote before but it is not as I wanted.

I have defined the equations and have two cases for the F(i-1) function 
which I wrote in the if elseif end loop...

my algorithm is here :

A(1)=0.005;
t=0.01;
v=5;
u(1)=0;
a(1)=0;

for i=2:2000;

C1(i-1)=0.82+0.48*cos(a(i-1));
C2(i-1)=0.82+0.48*cos(a(i-1)+pi);

A(i)=abs(A(1)*cos(a(i-1)));

F1(i-1)=0.5*1.225*C1(i-1)*A(i-1)*(v-u(i-1))^2*abs(cos(a(i-1)));

F2(i-1)=0.5*1.225*C2(i-1)*A(i-1)*(v+u(i-1))^2*abs(cos(a(i-1)));

F3(i-1)=0.5*1.225*C1(i-1)*A(i-1)*(v+u(i-1))^2*abs(cos(a(i-1)));

F4(i-1)=0.5*1.225*C2(i-1)*A(i-1)*(v-u(i-1))^2*abs(cos(a(i-1)));


n=0:100;

if a(i-1)>=(2*pi*n+(3*pi/2)) & a(i-1)<(2*pi*n+(2*pi)) | 
a(i-1)>=(2*pi*n+0) & a(i-1)<(2*pi*n+(pi/2))

    F(i-1)=F1(i-1)-F2(i-1)

elseif a(i-1)>=(2*pi*n+(pi/2)) & a(i-1)<(2*pi*n+(3*pi/2))

    F(i-1)=F4(i-1)-F3(i-1)
end

du(i-1)=F(i-1)*t/0.05;
ds(i-1)=(u(i-1)+du(i-1))*t;
da(i-1)=ds(i-1)*2*pi/0.628; %to write 'ds' in radian as angle
u(i)=u(i-1)+du(i-1);
a(i)=da(i-1)+a(i-1);

end

:
von ich (Guest)


Rate this post
useful
not useful
If both cases are not true u get the error, because F(i-1) is not 
defined. U need a code which handles every single possible case, not 
only this one u think that is possible ;)

von bora b. (borabora2012)


Rate this post
useful
not useful
But there is only two ranges of the value a ,

between 90 and 270 degree and 270 - 360  and 0 - 90 degree which I have 
defined...

von ich (Guest)


Rate this post
useful
not useful
As i have said before:

for i=2

a(i-1)>=(2*%pi*n+(3*%pi/2)) & a(i-1)<(2*%pi*n+(2*%pi)) | 
a(i-1)>=(2*%pi*n+0) & a(i-1)<(2*%pi*n+(%pi/2))

== 101 times false

a(i-1)>=(2*%pi*n+(%pi/2)) & a(i-1)<(2*%pi*n+(3*%pi/2))

== 101 times false

If both cases are not true u get the error, because F(i-1) is not
defined. U need a code which handles every single possible case, not
only this one u think that is possible ;)

von bora b. (borabora2012)


Rate this post
useful
not useful
thank you for your answer but I do not understand all what you mean.

a(i-1)  shows the angles in radian anyway we can talk now in degrees.

a(1) is defined "0" as starting point. The degrees refers to the way of 
anemometer . When it turns once position "a" reaches the angle of 360 
degree. However it turns several times. that is why I defined an n value 
to simulate for example in that case 100 times and wrote 2*pi*n before 
the angles.

there are two possibilities.

if a is in between 0 and 90 and 270 - 360 I defined an equation as:
F(i-1)=F1(i-1)-F2(i-1)


if a is in between 90 - 270 (right plane of a coordinate system when we 
consider the left side as 0 degree) the equation is :

F(i-1)=F4(i-1)-F3(i-1)

i is the number of calculation for example in my example 2000 times. I 
do not know until which degree I arrive.

Can it happen that i:2000 and n until 100 should match. I do not think 
that it is the problem...

I have a question for you: you have written when for i=1   n==101 times 
false....

I didnt understand it.

thank you

von ich (Guest)


Rate this post
useful
not useful
You compare a scalar a(i-1) with a vector (2*%pi*n+(3*%pi/2)) because n 
has the size of 101. So the program compares a() with every single 
member of the vector. -> You get 101 times a false if the comparison is 
not true. That happen in your program when i = 2.

von bora b. (borabora2012)


Rate this post
useful
not useful
You compare a scalar a(i-1) with a vector (2*%pi*n+(3*%pi/2)) because n
has the size of 101. So the program compares a() with every single
member of the vector. -> You get 101 times a false if the comparison is
not true. That happen in your program when i = 2.

when i=2 the a(i-1)=a(1)=0 as defined at the beginning.

then the program compares this 0 value with (2*pi*n+(3*pi/2)) and it is 
270 degree and its periods. for example 270 + 360 = 630 degree the same 
point in my anemometer which turns. It makes this calculation 100 times 
to get every point.. for 270 + 720 and so on.

I have a question. you have written when i=2. however it makes the same 
thing also when if=3 , 4 and so on ???

von bora b. (borabora2012)


Rate this post
useful
not useful
and the value of a(1)=0 when it is compared it is in the range that I 
defined with:

a(i-1)>=(2*pi*n+0) & a(i-1)<(2*pi*n+(pi/2))


or I am wrong. I have written >=  big and equal ?

I wrote also in the previous message some explanations

von ich (Guest)


Rate this post
useful
not useful
a(i-1)>=(2*pi*n+0) => false
a(i-1)<(2*pi*n+(pi/2)) => true

but false & true = false. So it is allwayse false....

How many additional advices do you need to find your problem?

von ich (Guest)


Rate this post
useful
not useful
sry

for n =0

a(i-1)>=(2*pi*n+0) => true
a(i-1)<(2*pi*n+(pi/2)) => true

so you get 1 time true and 100 false (n>0).

1 true & 100 false = false

von bora b. (borabora2012)


Rate this post
useful
not useful
ok that is why I asked you what you mean...

I tried only with n=0. There is still error.

I do not need anymore advice

thanks.

von bora b. (borabora2012)


Rate this post
useful
not useful
it works without any n vector. without n=0 and without any n integer.

my algorithm is correct only I have to define the correct cycle

Please log in before posting. Registration is free and takes only a minute.
Existing account
Do you have a Google/GoogleMail account? No registration required!
Log in with Google account
No account? Register here.