Unable to convert expression into double array

1 view (last 30 days)
Following code produces the error for 'while abs(double(subs(diff))) < 1/10'
syms f(t)
syms t
syms n
T = 2*pi;
w1 = 1;
t2 = linspace(-1, 1, 10);
f(t) = piecewise(-pi<t<0, (4+t)/2, 0<=t<pi, (2-t).*cos(2*t));
Cn = (int(f(t) * exp(-1j * n * w1 * t), -T/2, T/2))/T;
n = 1;
f(t2);
diff = 0;
while abs(double(subs(diff))) < 1/10
Cn = (int(f(t) * exp(-1j * n * w1 * t2), -T/2, T/2))/T
Sn = Cn.*exp(1j * n * w1 * t);
diff = abs(f(t2)-Sn)
diff = simplify(diff)
diff = vpa(diff)
n = n + 1;
end
n
Anyone know what i can do? Cheers

Answers (1)

KSSV
KSSV on 8 Apr 2021
This line:
subs(diff)
You have to substitute some value right? I guess you need to input value of t here......
  1 Comment
Cameron Rampersadh
Cameron Rampersadh on 8 Apr 2021
I need to calculate the difference between f(t2) and Sn, and if their difference is greater than 1/10, the while loop needs to be exited and displays what value of n the while loop got up to. Hence, putting diff in the while loop. I have changed diff to another variable name as ive just learnt that it is a standard matlab function.

Sign in to comment.

Tags

Community Treasure Hunt

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

Start Hunting!