< p>
f = @(i,j) i+j
(But my situation is much more complicated)
What I want to do is create A matrix M
M(i,j) = f(i,j)
Of course I can use nested loops, but I am trying to avoid these . I have managed to do this in Maple in a very simple way:
f:=(i,j)->i+j;
M:=Matrix(N,f);
(where N is the dimension of the matrix) but I need to use MATLAB. Now I stick to nested loops, but I really appreciate your help!
bsxfun
:
>> [ii jj] = ndgrid(1:4 ,1:5); %// change i and j limits as needed
>> M = bsxfun(f, ii, jj )
M =
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
If your function f meets the following conditions:
C = fun(A,B)
accepts arraysA
andB
of arbitrary, but equal size and returns output of the same size. Each element in the output arrayC< /code> is the result of an operation on the corresponding elements of
A
andB
only.fun
must also support scalar expansion< /strong>, such that ifA
orB
is a scalar,C
is the result of applying the scalar to every element in the other input array.
You can handle ndg rid. Just add transpose (.') to the first (i) vector:
>> M = bsxfun(f, (1:4).' , 1:5)
What I intend to do is simple, but I can't find a suitable method. I have a function handle which depends on two variables, for example :
f = @(i,j) i+j
(But my situation is much more complicated)
What I want to do is create a matrix M
M(i,j) = f(i,j)
Of course I can use Nested loops, but I tried to avoid these. I have managed to do this in Maple in a very simple way:
f:=(i,j) ->i+j;
M:=Matrix(N,f);
(where N is the dimension of the matrix) but I need to use MATLAB. Now I insist on using nested loops, But I really appreciate your help!
Use bsxfun
:
>> [ii jj ] = ndgrid(1:4 ,1:5); %// change i and j limits as needed
>> M = bsxfun(f, ii, jj)
M =< br />
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
If your function f Meet the following conditions:
C = fun(A,B)
accepts arraysA
andB
of arbitrary, but equal size and returns output of the same size. Each element in the output arrayC
is the result of an operation on the corresponding elements ofA
andB
only.fun
must also support scalar expansion, such that ifA< /code> or
B
is a scalar,C
is the result of applying the scalar to every element in the other input array.
You can handle ndgrid. Just add transpose (.') to the first (i) vector:
>> M = bsxfun(f, (1:4).', 1:5)