# *** Write a function called triangle_wave that computes the sum (−1) sin(2 +1) (2 +1) for each of 1001 values of t uniformly spaced from 0 to 4π inclusive. The input argument is a scalar non-negative integer n, and the output argument is a row v

2 views (last 30 days)

Show older comments

Wasi von Deutschland
on 20 May 2017

Commented: Vikrant dhall
on 29 Apr 2018

this is my code and I need your help I couldn't figure out where I'm making mistake.

function theSum = triangle_wave(n)

t = linspace(0, 4*pi, 1001);

for tIndex = 1 : length(t)

this_t = t(tIndex);

k = 1 : n;

numerator = ((-1)^k).*sin(this_t * (2*k+1));

denominator = (2 * k + 1)^2;

theSum(tIndex) = sum(numerator ./ denominator);

end

##### 5 Comments

Jan
on 21 May 2017

@Waseem Iqbal: It is okay. This happens frequently and we all remind newcomers to improve the format. Now let's come back to the question for clarification:

You forgot to mention, why you assume that there is a mistake. Please explain this.

### Accepted Answer

Jan
on 21 May 2017

Edited: Jan
on 21 May 2017

denominator = (2 * k + 1) .^ 2;

Use the elemtnwise .^ instead of the matrix operation ^ . The same for "(-1)^k" .

The corresponding error message is clear:

Error using ^

Inputs must be a scalar and a square matrix.

To compute elementwise POWER, use POWER (.^) instead.

[EDITED] The formula contains: "Sum from k=0 to n", you code contains:

k = 1:n;

Replace this by k = 0:n. It will be more efficient to move the definition before the loop and pre-allocate the output:

function S = triangle_wave(n)

t = linspace(0, 4*pi, 1001);

S = zeros(size(t)); % Pre-allocation

k = 0:n; % Not 1:n

for tIndex = 1 : length(t)

numerator = ((-1) .^ k) .* sin(t(tIndex) .* (2 * k + 1));

denominator = (2 .* k + 1) .^ 2;

S(tIndex) = sum(numerator ./ denominator);

end

##### 6 Comments

Jan
on 21 May 2017

rishabh gupta
on 10 Feb 2018

can you please tell how is the value of k changing when it is placed outside the loop??

### More Answers (2)

Walter Roberson
on 21 May 2017

(-1)^k needs to be (-1).^k

(2 * k + 1)^2 needs to be (2 * k + 1).^2

##### 0 Comments

Vikrant dhall
on 29 Apr 2018

function v = triangle_wave(n) t = linspace(0,4 * pi, 1001); v = zeros(size(t)); p = 1; for tt = 0:length(t) suma = 0; for k = 0:n suma = suma + (((-1 .^ k) .* sin((2.*k+1).*tt)) / ((2.* k+1).^2)); %suma end %suma v(1,p) = suma; p = p + 1; end end

What is the error in this can anyone please help

##### 1 Comment

Vikrant dhall
on 29 Apr 2018

function v = triangle_wave(n)

if true

% code

end

t = linspace(0,4 * pi, 1001);

v = zeros(size(t));

p = 1;

for tt = 0:length(t)

suma = 0;

for k = 0:n

x = ((-1 .^ k) .* sin((2.*k+1).*tt)) / ((2.* k+1).^2);

suma = suma + x;

%suma

end

%suma

v(1,p) = suma;

p = p + 1;

end

end

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!