Undefined function 'int' for input arguments of type 'char'.

10 views (last 30 days)
Hi Guys
this code gives me this error when I tried to change it a little
Any solutions?
syms n t ;
n=50;
t=linspace(-5,5,1000);
T=max(t);
wo=(2*pi)/T;
for k=1:n
ao= (1/T).*(int('1',t,0,t));
an= (2/T).*(int('1*cos(n*wo*t)',t,0,t))
bn= (2/T).*(int('1*sin(n*wo*t)',t,0,t))
f=ao+(an.*cos(k.*wo.*t))+(bn.*sin(k.*wo.*t));
end
figure(1);clf(1)
plot(t,f)
xlabel('Time')
ylabel('Amplitude')
title('Fourier sawtooth Trasnform')
  2 Comments
Stephen23
Stephen23 on 5 Dec 2017
Edited: Stephen23 on 5 Dec 2017
Newer MATLAB versions only accept symbolic inputs to int, as the documentation clearly shows:
What do you expect a character input to do? What MATLAB version are you using?
Walter Roberson
Walter Roberson on 5 Dec 2017
Character input is still supported, though no longer documented.

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 5 Dec 2017
You have
syms n t ;
which is equivalent to
n = sym('n');
t = sym('t');
which make connections between those variables in the MATLAB workspace and symbolic variables with those names inside the symbolic engine.
You have
n=50;
t=linspace(-5,5,1000);
This breaks the connection between the variables in the MATLAB workspace and the variables in the symbolic engine, because you wrote over variables with the same names.
You have
ao= (1/T).*(int('1',t,0,t));
You replaced t with a numeric variable, so this is
int('1', NUMERIC_VECTOR, 0, NUMERIC_VECTOR)
None of the parameters are object-oriented objects, so the first parameter is used as the data type to search for a matching method. There is no method int for character vectors, so you get a failure.
If you had used
ao= (1/T).*(int(sym('1'),t,0,t));
then since there was an object-oriented parameter, the int method for that object would be looked up and found, so symbolic int would be called. However, this case would be
int(SYMBOL, NUMERIC_VECTOR, 0, NUMERIC_VECTOR)
and symbolic int cannot have a numeric vector as it second argument.
So what you should have done is not re-used the variable 't' between the syms t and the t = linspace(...) . Use different variable names for the two, and use the appropriate variable names in the appropriate positions in the int() call.
If syms t was still in effect, then the call would be
int(CHARACTER_VECTOR, SYMBOL, 0, SYMBOL)
which would invoke symbolic int, which would automatically transform it to equivalent to
int(sym(CHARACTER_VECTOR), SYMBOL, 0, SYMBOL)
and do the integration. Perhaps
syms n t ;
n=50;
trange=linspace(-5,5,1000);
T=max(trange);
wo=(2*pi)/T;
for k=1:n
thist = trange(k);
ao= (1/T).*(int('1',t,0,thist));
an= (2/T).*(int('1*cos(n*wo*t)',t,0,thist))
bn= (2/T).*(int('1*sin(n*wo*t)',t,0,thist))
f(k) = ao+(an.*cos(k.*wo.*thist))+(bn.*sin(k.*wo.*thist));
end
figure(1);clf(1)
plot(t,f)
xlabel('Time')
ylabel('Amplitude')
title('Fourier sawtooth Trasnform')
  2 Comments
Rana 55
Rana 55 on 5 Dec 2017
I tried what you said but it gives me another error (A numeric or double convertible argument is expected)
Walter Roberson
Walter Roberson on 5 Dec 2017
syms n t ;
n=50;
trange=linspace(-5,5,n);
T=max(trange);
wo=(2*pi)/T;
for k=1:n
thist = trange(k);
ao= (1/T).*(int(sym(1), t, 0, thist));
an= (2/T).*(int(1*cos(n*wo*t), t, 0, thist));
bn= (2/T).*(int(1*sin(n*wo*t), t, 0, thist));
f(k) = ao+(an.*cos(k.*wo.*thist))+(bn.*sin(k.*wo.*thist));
end
figure(1);clf(1)
plot(trange,f)
xlabel('Time')
ylabel('Amplitude')
title('Fourier sawtooth Trasnform')

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!