2017-10-25 2 views
-1

3D 플롯을 만들려고하는데 오류가 발생하고 해결 방법을 모르겠습니다. 나는 거기에 다른 질문이 내 비슷한 것을 알고 있지만 그들 중 일부를 시도하고 그것은 작동하지 않았다.Z는 스칼라 또는 벡터가 아닌 행렬이어야합니다. matlab

fh = sin(x)*cos(y).^3 + 2*cos(x).^5*sin(y) 

[X,Y] = meshgrid(1:0.5:10,1:20); 

surf(X,Y,fh) 

Error using surf (line 82) 
Z must be a matrix, not a scalar or vector. 
+0

실행할 수있는 코드로 최소한의 예를 게시하시기 바랍니다. 'x'와'y'가 정의되지 않았기 때문에 첫 번째 줄은 에러를 줄 것입니다. –

+0

@LuisMendo 간단한 3 차원 플롯 예제를 본 후에 어디에서나 X와 Y를 정의하는 것을 보지 못했습니다. 그 첫 번째 3D 플롯 이후로 나는이 기능을 계획 할 수있는 도움을 찾고 있습니다. 이것이 내가 가진 모든 코드입니다. – AppCodah

답변

0

이 경우 Z 데이터는 fhsurf에 전달하는 것입니다. Z을 계산하는 데 사용하려는 함수 인 fh 인 것처럼 보입니다. 그러나 XY에 대해 생성 된 격자 값을 사용하여이를 계산해야합니다. 귀하의 코드가 지금은 우리가 정의하지 않은 xy (대소 문자가 중요 함)을 사용하여 함수를 평가하고 있습니다. 대신 사용해 : I가 .* 연산자 (element-wise multiplication) 대신 식에서의 * 연산자 (matrix multiplication)를 사용

[X, Y] = meshgrid(1:0.5:10, 1:20); 
Z = sin(X).*cos(Y).^3 + 2.*cos(X).^5.*sin(Y); 

surf(X, Y, Z); 

통지.

또한 주어진 데이터 집합에 대한 공식을 평가하는 anonymous function을 정의하여이 작업을 수행 할 수 있습니다 :

fh = @(x, y) sin(x).*cos(y).^3 + 2.*cos(x).^5.*sin(y); 
[X, Y] = meshgrid(1:0.5:10, 1:20); 

surf(X, Y, fh(X, Y)); 
관련 문제