728x90
주어진 함수 f는 아래와 같다!
이 함수의 대략적인 모습을 보기 위해 먼저 평면을 그려본다. 참고로 함수 f는 그 자체로 3차원 상의 그래프를 그릴 수는 없기 때문에 f = 0으로 가정하고 z에 대하여 식을 다시 써주면 아래와 같다.
이때 우리는 z 의 양, 음을 전부 다 알 필요는 없으므로 양의 부분만 그려본다.
1. A, B 에 x, y 좌표값을 넣어주고 C에 z 값을 넣어준다.
[A, B] = meshgrid(0:1:10, 0:1:10);
C = sqrt(500-2*A.^2 - 3*B.^2);
2. 매트랩 내장함수 surf 를 이용하여 그래프를 그린다.
surf(A,B,C);
대략적인 평면의 그래프를 알았으니 f의 그라디언트(gradient) 벡터장을 그려보자!
1. 함수 f 와 f의 gradient 설정!
syms x y z
f = 2*x^2 + 3*y^2 + z^2;
f_grad = gradient(f, [x,y,z]);
>> f_grad f_grad 은 3 x 1 행렬이다!
f_grad =
4*x
6*y
2*z
2. 매개변수 t 를 통한 좌표공간 상의 영역 설정.
t = linspace(0, 20, 10);
[X, Y, Z] = meshgrid(t);
3. 위에서 구한 f_grad 에 변수 x, y, z 값을 실제 값인 X, Y, Z와 바꿔준다
G1 = subs(f_grad(1), [x], {X});
G2 = subs(f_grad(2), [y], {Y});
G3 = subs(f_grad(3), [z], {Z});
4. quiver3를 통하여 그래프 그려주기!
quiver3(X,Y,Z,G1,G2,G3);
마지막으로 매트랩 내장함수 surfnorm을 통해 실제로 일치하는지 비교해 보자!
surfnorm(A,B,C);
대략적으로 일치한다!
전체 코드
syms x y z
f = 2*x^2 + 3*y^2 + z^2;
f_imp = solve(f,z);
f_grad = gradient(f, [x,y,z]);
t = linspace(0, 20, 10);
[X, Y, Z] = meshgrid(t);
%subplot(2,1,1)
G1 = subs(f_grad(1), [x], {X});
G2 = subs(f_grad(2), [y], {Y});
G3 = subs(f_grad(3), [z], {Z});
quiver3(X,Y,Z,G1,G2,G3);
[A, B] = meshgrid(0:1:10, 0:1:10);
C = sqrt(500-2*A.^2 - 3*B.^2);
%subplot(2,1,2)
hold on
surf(A,B,C);
surfnorm(A,B,C);
hold off