Effacer les filtres
Effacer les filtres

*** 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 vues (au cours des 30 derniers jours)
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 commentaires
Wasi von Deutschland
Wasi von Deutschland le 21 Mai 2017

@ stephen I'm really sorry. Next I will keep this in mind.

Jan
Jan le 21 Mai 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.

Connectez-vous pour commenter.

Réponse acceptée

Jan
Jan le 21 Mai 2017
Modifié(e) : Jan le 21 Mai 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 commentaires
Jan
Jan le 21 Mai 2017
@Waseem: Look at the formula: Look at the limits of the sum, it goes from k = 0 to n. Do you see it under and above the Sigma? With the zeros() command I've pre-allocated the output. Search in this forum for "pre-allocation".
rishabh gupta
rishabh gupta le 10 Fév 2018
can you please tell how is the value of k changing when it is placed outside the loop??

Connectez-vous pour commenter.

Plus de réponses (2)

Walter Roberson
Walter Roberson le 21 Mai 2017
(-1)^k needs to be (-1).^k
(2 * k + 1)^2 needs to be (2 * k + 1).^2

Vikrant dhall
Vikrant dhall le 29 Avr 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 commentaire
Vikrant dhall
Vikrant dhall le 29 Avr 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

Connectez-vous pour commenter.

Catégories

En savoir plus sur Elementary Math dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by