Asked by Max
on 11 Feb 2015

I have been working on a script that calculates a Taylor series without using the built-in function.

I am having a lot of trouble extracting the proper array of numbers for the three iteration values I need to plot together with the error (I need to plot N = 2 5 & 50 with the exact function of 5sin(3x)).

This is what I have:

clear;clc

n =[2 5 50];

do=linspace(-2*pi,2*pi,720);

T = zeros(51);

for i =1:720

for k=1:1:50;

ns=2*k+1;

T(i)=T(i)+5*(((-1)^k)*(3*do(i))^(ns))/factorial(ns);

end

end

approx2 = T(:,2);

approx5 = T(:,5);

aprrox50 = T(:,50);

exact = 5*sin(3*do);

plot(do,exact, '-r')

hold on

ez1=ezplot('approx2');

ez2=ezplot('approx5');

ez3=ezplot('approx50');

legend('5sin(3x)','T2','T5','T50')

set(ez1, 'color', [0 1 0])

set(ez2, 'color', [0 0 1])

set(ez3, 'color', [1 0 1])

title('Graph of 5sin(3x) and taylor expansions T2, T5 and T50')

I cannot get it to graph properly though......

I have looked through the matlab help file and searched through google.

I am thinking it might have to do with not defning the Taylor iterations properly.

This is a homework assignment so I AM NOT LOOKING FOR SOMEONE TO DO THIS FOR ME.

Any hints or tips to put me in the right direction will be greatly appreciated!

Thank You

Answer by per isakson
on 11 Feb 2015

Edited by per isakson
on 11 Feb 2015

Hints:

- aprrox50   is a typo
- read the doc on ezplot, note that approx.. are double vectors
- use plot to plot approx..
- I find it easier to work with functions than with scripts when it comes to debugging - it used to be anyhow.
- try   figure, imagesc(T), colorbar
- ALWAYSONTOP, by Elmar Tarajan makes it possible to see the effect on the diagram of each line of code; step through the code and watch - or dock the figure

Max
on 11 Feb 2015

hence the reason why k was always definded as k = 1:n

per isakson
on 11 Feb 2015

Max
on 11 Feb 2015

well the first term is always 15x

so would defining the series as

(for example)

approx2(i) = 15*x + 5*(((-1)^k)*(3*x(i))^(ns))/factorial(ns);

i want to say that takes care of the 0 term

Sign in to comment.

Answer by Roger Stafford
on 11 Feb 2015

It looks as though your T is incorrectly computed. For each of three different counts, n = 2, 5, and 50, you need to compute n terms of the Taylor series for each of 720 different values of the angle. That would imply three, not two, nested for-loops or their equivalent, and the resulting T should be two-dimensional, not one-dimensional.

for n = [2,5,50]

for i = 1:720

for k = 1:n

etc.

(Of course, with the appropriate use of matlab's 'sum' function you could eliminate at least one of these loops.)

Roger Stafford
on 11 Feb 2015

I really should have written the loops in my suggestion this way:

T = zeros(720,3);

n = [2,5,50];

for j = 1:3

for i = 1:720

for k = 1:n(j)

T(i,j) = T(i,j) + ....

.......

approx2 = T(:,1);

approx5 = T(:,2);

approx50 = T(:,3);

Does that help you any?

Max
on 11 Feb 2015

Yes this does help, but for the three loops would i define the j values as

j = 1:2

j = 1:5

J = 1:50

I know they would go at the begging of each loop for that specific number of iterations.

Max
on 11 Feb 2015

I tried this:

T = zeros(720,3);

n = [2 5 50];

do=linspace(-2*pi,2*pi,720);

for j = 1:2

for i = 1:720

for k = 1:n(j)

ns=2*k+1;

T(i,j)=T(i,j)+5*(((-1)^k)*(3*do(i))^(ns))/factorial(ns);

end

end

end

for j = 1:5

for i = 1:720

for k = 1:n(j)

ns=2*k+1;

T(i,j)=T(i,j)+5*(((-1)^k)*(3*do(i))^(ns))/factorial(ns);

end

end

end

for j = 1:50

for i = 1:720

for k = 1:n(j)

ns=2*k+1;

T(i,j)=T(i,j)+5*(((-1)^k)*(3*do(i))^(ns))/factorial(ns);

end

end

end

approx2 = T(:,1);

approx5 = T(:,5);

approx50 = T(:,50);

But matlab complains about n(4) being out of bonds because numel(n)=3

which makes no sense to me because its defined at the begging of the script that n = [2 5 50]...

Sign in to comment.

Answer by daniel
on 11 Feb 2015

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.