# Sampling with vectors at the same time

8 views (last 30 days)
Alfonso on 24 Feb 2013
Hello,
its a simple question, but i havent managed to solve it:
I have to sample a vector and the matlab doesn't understandme and prompts:
??? Error using ==> mtimes
Inner matrix dimensions must agree.
I wanted to sample a SUM (cos(2*pi*d*A) )where A is a vector of many degrees value, so I have:
function sample(d)
A = [1,2,3,....]
SUM (cos(2*pi*d*A) )
end
and the input is:
d=[1:1:20]
How can I make understand first vector is a sampling and second is a vector of values? (The idea is plotting (sample,d) )
The fact is that the expresion of the vector is a real for each value of d so I should expect something returning results of the SUM of different d's like:
Columns 1 through 11
1 2 3 4 5 6 7 8 9 10 11
Columns 12 through 20
12 13 14 15 16 17 18 19 20
But it doesn't understand each
Thank you
Alfonso on 24 Feb 2013
Edited: Alfonso on 24 Feb 2013
yes but A is NOT of twenty values, in my code A is 8128 and i just want 100 experiments anyway.. No more resolution needed, it has nothing to do because d is a scalar. in the end d will be a 1 or a 2 or a 3, it will be performed in 20 experiments or (100 in my code) (as 20 inputs are passed) and then returned this way:
Columns 1 through 11
a b c ..
Columns 12 through 20
...

Dr. Seis on 25 Feb 2013
Edited: Dr. Seis on 25 Feb 2013
Try this:
d = 1:20;
A = [24,34,56,66,86];
plot(d,arrayfun(@(x)sum(cos(2*pi*A*x)),d))
Obviously, in this simple case, the answer will always be 5 for all d since we are dealing with integer multiples of 2*pi (and there are only 5 elements in A), but I think this is what you are looking for.
##### 2 CommentsShow 1 older commentHide 1 older comment
Azzi Abdelmalek on 25 Feb 2013
To close the topic, you have to accept the answer which helped you

Image Analyst on 24 Feb 2013
Edited: Image Analyst on 24 Feb 2013
What is SUM? Is it a custom function you wrote, or an array of yours, because it's not the built-in MATLAB sum() function because MATLAB is case sensitive.
Perhaps you meant something like this:
A = 1:20
d=[1:1:20]
cosA = cos(2*pi*d.*A)
theSum = sum(cosA)
Note the .* instead of * between d and A to do an element by element multiplication, not a matrix multiplication like you were trying to do.
Image Analyst on 26 Feb 2013
Alfonso, you need to read the getting started guide. You can't just type all that code into a single m-file because you can't have a script followed by a function in the same file. The main program can be in one m-file, and the other function in another m-file, OR if you want them to be in the same file, then you must have a function name at the beginning of the file with the same name as the m-file. For example if it's test.m, then your code would be
function test()
dMain = [1:1:20]
for k = 1 : length(dMain)
% Call sample() once for each value of d
theSumMain(k) = sample(dMain(k));
end
theSumMain % Print to command window
function theSum = sample(d)
A = 1:20;
cosA = cos(2*pi*d.*A);
theSum = sum(cosA);
If it's like that they can all be in the same m-file. I guess I assumed that you knew this.

Azzi Abdelmalek on 24 Feb 2013
Edited: Azzi Abdelmalek on 24 Feb 2013
Maybe you mean indexing
v=[2 3 5 4 10 20]
d=[2 3 1 4 5 6]
new_v=v(d)
Alfonso on 24 Feb 2013
I meant to perform multiple experiments due to an entry of different values the d only affects for each experiment the d is first 1, the sum is done, then the d is two, the sum is done, then the d is three....
and then the result is returned of the function with 20 different d's as 20 different inputs to the function, the matlab wants to understand is a vector to multiply and is only 20 experiments so D is an scalar.

Alfonso on 24 Feb 2013
Edited: Alfonso on 24 Feb 2013
<< d=[1:1:20]
<< sample(d)
no more code needed.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function sample(d)
A = [24,34,56,....]
SUM (cos(2*pi*d*A) )
end

Alfonso on 24 Feb 2013
Edited: Alfonso on 24 Feb 2013
MAYBE Im complicating myself, forget about the 20 (Or 100)entries, how would you plot:
function sample(d)
A = [24,34,56,....]
SUM (cos(2*pi*d*A) )
end
I used to plot
plot (d,sample(d))
I want function to evolve non like an integer (0,1:0,1:20) instead, so i want increases of the X axis of 0,1 from 1 to 20 HOW WOULD YOU PLOT IT? I simplified in your example, but i don't want a deffault plotting progress, so i use multiple entry (d=[0,1:0,1:20]).