Sampling with vectors at the same time

3 ビュー (過去 30 日間)
Alfonso
Alfonso 2013 年 2 月 24 日
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
  7 件のコメント
Image Analyst
Image Analyst 2013 年 2 月 24 日
See the code in my comment.
Alfonso
Alfonso 2013 年 2 月 24 日
編集済み: Alfonso 2013 年 2 月 24 日
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
Dr. Seis 2013 年 2 月 25 日
編集済み: Dr. Seis 2013 年 2 月 25 日
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 件のコメント
Alfonso
Alfonso 2013 年 2 月 25 日
編集済み: Alfonso 2013 年 2 月 25 日
That was PRO!! That's what i'm searching for, Thank you!!
I'll search with the arrayfunc to draw my function, one thousand thanks to all.
Azzi Abdelmalek
Azzi Abdelmalek 2013 年 2 月 25 日
To close the topic, you have to accept the answer which helped you

サインインしてコメントする。

その他の回答 (4 件)

Image Analyst
Image Analyst 2013 年 2 月 24 日
編集済み: Image Analyst 2013 年 2 月 24 日
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.
  8 件のコメント
Alfonso
Alfonso 2013 年 2 月 25 日
編集済み: Alfonso 2013 年 2 月 25 日
It worked typing 60% of your code on the command window but i need something more elegant, Matlab is quite stranger that i though.
Need help to write some code equivalent to this almost all in a function
Very grateful anyway.
Image Analyst
Image Analyst 2013 年 2 月 26 日
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
Azzi Abdelmalek 2013 年 2 月 24 日
編集済み: Azzi Abdelmalek 2013 年 2 月 24 日
Maybe you mean indexing
v=[2 3 5 4 10 20]
d=[2 3 1 4 5 6]
new_v=v(d)
  1 件のコメント
Alfonso
Alfonso 2013 年 2 月 24 日
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
Alfonso 2013 年 2 月 24 日
編集済み: Alfonso 2013 年 2 月 24 日
<< 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
Alfonso 2013 年 2 月 24 日
編集済み: Alfonso 2013 年 2 月 24 日
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]).

カテゴリ

Help Center および File ExchangeStartup and Shutdown についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by