use vector as input
7 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I want to give each input of a vector as an argument to my function to recive a list of values that i can then plot (my goal is to plot the time it takes to execute the function for a given n). The problem is, that i only get the output of the first entry of the vector. What did I do wrong?
>> n = [1:1:10];
>> [a,b] = calcEulerSum2 (n)
it returns only calcEulerSum2(1)
function [e, a] = calcEulerSum2(n)
den = 1;
e = 1;
tic
for i = 1 : n
den = den * i;
e = e + 1/den;
end
a = toc;
end
2 commentaires
dpb
le 28 Fév 2021
"What did I do wrong?"
We dunno and have no way to know -- you forgot to show us the code for calcEulerSum2
dpb
le 28 Fév 2021
What do you expect for output and what is the expected input?
I think you aren't using for as documented/wanted here.
Try at the command line to see what you get for:
n=1:3;
for i=1:n, disp(i), end
followed by
for i=n, disp(i), end
and see if that doesn't clear up the mystery.
Réponses (2)
Robert U
le 28 Fév 2021
Hi Vincent Degonda,
Your for-loop call is not providing what you expected. Your input variable is a vector already. dpb tried to lead you to that. Output in vector form would need an indexing of your output variable.
function [e, a] = calcEulerSum2(n)
den = 1;
e = 1;
tic
for i = n
den = den * i;
e(end+1) = e(end) + 1/den;
end
a = toc;
end
Kind regards,
Robert
0 commentaires
Steven Lord
le 28 Fév 2021
So you want to compute the value of e and the time required to compute that value for each element of n? A couple of suggestions:
function [e, a] = calcEulerSum2(n)
den = 1;
e = 1;
Make the variable e an array of ones the same size as n. The documentation page for ones include a couple of examples that you can use as a model.
tic
Before you start timing, you'll need a loop over the elements of the input. Use the numel function that gives the number of elements in an array for this loop.
for whichElement = <you fill this in> % I added this to your code
Continuing on with the code you already wrote:
for i = 1 : n
You don't want to use the whole n array here, just one element. Which element should you use instead of n here? I think you can guess.
den = den * i;
e = e + 1/den;
Since e is now an array here, not just one value, you need to operate on and assign back into a particular element. Which element of e? It should be clear.
By the way, you'll need to adjust how (or more precisely where/when) you initialize den. If the first element of n was 3, what should den be when you start processing the second element of n and what will it actually be?
end
a = toc;
end
Since I added a for loop to your code, you'll need one more end statement. Where should the for loop I added end?
0 commentaires
Voir également
Catégories
En savoir plus sur Matrix Indexing 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!