Evaluating 3D Function

조회 수: 6 (최근 30일)
Brian Lee
Brian Lee 2012년 2월 2일
편집: Matt J 2013년 9월 26일
I have a 3-D function f(x,y,z) which I want to evaluate at a discrete set of points (i.e. create an array with values of f).
My x,y,z variables are not equally spaced. What is the best way to define f?
For a 1-D function, I would normally use array operators:
x=linspace(1,5,100); f=x.^2;
For speed reasons I would like to avoid for loops.
But for higher dimensions this stops working:
x=linspace(1,5,100); y=linspace(1,5,10); f=x.^2+y.^2; <----does not work because of diff array sizes

답변 (2개)

Sean de Wolski
Sean de Wolski 2012년 2월 2일
I would use bsxfun() to generate the grid of points in 3d. If this approach wouldn;t work, you could always use ndgrid() and actually generate the grid matrices.
Example with bsxfun:
x = [0 .3 5 100];
y = linspace(1,10,20);
z = logspace(1,2,3);
f = bsxfun(@plus,bsxfun(@plus,x',y),reshape(z,1,1,numel(z))) %just adding - nothing fancy

Benjamin Schwabe
Benjamin Schwabe 2012년 2월 2일
Hi,
another easy way to do that, is using the meshgrid command.
x = linspace(1,5,100); y=linspace(1,5,10); [X,Y] = meshgrid(x,y); F = X.^2+Y.^2;
If you want to go to even higher dimensions, you will require multidimensional arrays and for loops.
Benjamin
  댓글 수: 3
Walter Roberson
Walter Roberson 2012년 2월 2일
Sean: http://www.mathworks.com/help/techdoc/ref/meshgrid.html
"The meshgrid function is similar to ndgrid, however meshgrid is restricted to 2-D and 3-D while ndgrid supports 1-D to N-D."
Sean de Wolski
Sean de Wolski 2012년 2월 2일
Interesting, I stand corrected. I could've sworn it did the same thing as ndgrid just with x/y swapped with r/c.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Matrices and Arrays에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by