2016-11-15 12 views
1

Matlab의 표면에 미리 정의 된 등고선이있는 표면 플롯을 생성하려고합니다. 필자는 이미 Mathematica에서 그 음모를 만들었으며 Matlab에서 상응하는 그림을 만들고 싶습니다.윤곽선 및 표면 Matlab

surf= Plot3D[-1/L1[G, V], {G, 10, 100}, {V, 0, 12}]; 
Show[surf, hike, hikeHeight, AxesLabel -> {G, V,Z}, Boxed -> False] 
다음 기능

나는 표면

k2[G_, V_] = Sqrt[G]*Exp[-V]; 
k1[G_] = Sqrt[G]*Exp[-10]; 
L1[G_, V_] = -0.5*(k1[G_] + 2*k2[G, V]) + 0.5*Sqrt[k1[G_]^2 + 4*k2[G, V]^2]; 

hike=ParametricPlot3D[{10, 0, 0} + {x^2, x, -(1/L1[10 + x^2, x])}, {x, 0, 12},PlotStyle -> Directive[Thick, Red]]; 
hikeHeight=ParametricPlot3D[{10, 0, 0} + {x^2,x, -z*(1/L1[10 + x^2, x])}, {x, 0, 12}, {z, 0, 1},PlotStyle -> Directive[Gray], Mesh -> None]; 

그럼 I 표면과 함께 등고선 플롯 표면 위에 파라미터 곡선을 정의

enter image description here

Matlab에서 함수를 평가하고 동일한 플롯을 생성하는 프로세스는 무엇입니까? 난 내 MATLAB 시도

[X,Y,Z] = peaks(25); 
curvX=diag(X); 
curvY=diag(Y); 
curvZ=diag(Z); 

nn = 401; 
xi = linspace(-3.0, 3.0, nn); 
yi = xi; 
[xi, yi] = meshgrid(xi, yi); 
zi = interp2(X, Y, Z, xi, yi, 'spline'); 

figure() 
surf(xi, yi, zi,'LineStyle', 'none', 'FaceColor', 'interp') 
colormap(parula) 
alpha 0.7 
hold on 
surf(diag(curvX),diag(curvY),diag(curvZ),'LineStyle', 'none') 

enter image description here

표면과 파라 메트릭 곡선과 얼마나 멀리

이것은 분명히 동일하지 않습니다하지만 아이디어는 표면

의 조각을 플롯하는 동일
+0

우리가 가진 것을 보여주세요! 제발, 당신이 시도한 것을 추가하십시오, 이것은 코딩 tranlating 서비스가 아닙니다! 또한 Mathematica는 무엇입니까? –

+0

가끔은, 미안 해요 :) –

+0

@DylanRichardMuir 나는 당신이 재미를 위해 그것을하기를 바란다! 사람들이 코드를 붙여 넣기를 너무 많이하도록 장려하지 마십시오. 좋은 답변 btw –

답변

2

벡터화 된 함수 핸들 인라인으로 함수를 정의하는 것으로 시작해 보겠습니다.

k2 = @(g, v)sqrt(g).*exp(-v); 
k1 = @(g)sqrt(g).*exp(-10); 
l1 = @(g, v) -.5 .* (k1(g) + 2.*k2(g, v)) + 0.5 * sqrt(k1(g).^2 + 4.*k2(g, v).^2); 

nMeshPoints = 50; 

vfG = linspace(10, 100, nMeshPoints); 
vfV = linspace(0, 12, nMeshPoints); 
[mfG, mfV] = ndgrid(vfG, vfV); 

좋아, 이제 우리는 메쉬를 통해 표면을 평가할 수 있으며, 표면 플롯합니다 : 매트랩 티카처럼 자동 가지 해석을 할만큼 똑똑하지 않기 때문에

이제 우리는, 메쉬를 정의 할 필요가

vfX = linspace(0, 12, nMeshPoints); 
vfZ = linspace(0, 1, nMeshPoints); 

vfLX = 10 + vfX.^2; 
vfLY = vfX; 
vfLZ = -(1 ./ l1(10 + vfX.^2, vfX)); 

vfLHeight = vfLZ .* vfZ; 

plot3(vfLX, vfLY, vfLZ, 'r-'); 
plot3(vfLX, vfLY, vfLHeight, 'k-'); 

이제 우리는 플롯 리튬 만들 수 있습니다

hSurf = surf(mfG, mfV, -1./l1(mfG, mfV)); 
shading interp; 
hold on; 
hSurf.FaceAlpha = 0.5; 

이제 우리는 구축하고 또한 명시 가지 해석을 통해, 당신의 파라 메트릭 라인을 그릴 필요 더 아름다운 화선 :

xlim([10 100]); 
ylim([0 12]); 
zlim([0 20000]); 
caxis([0 20000]); 
xlabel('G'); 
ylabel('V'); 
zlabel('Z'); 
view([60, 30]); 

결과 : Mathematica만큼 아름답지는 않지만 그 이상입니다.

Surface plot with contour

+0

힌트 1 :'caxis ([0 20000])'. 또한 검은 선은 단일 'Z'값을 가져야한다고 말하고 싶습니다.plot3'비슷해 (vfLX, vfLY, 제로 (크기 (vfLX)) K '-')'또는'plot3 (vfLX, vfLY, 사람 (크기 (vfLX)) * 분 (Zsurf) 'K-') ;''Zsurf' 표면의 최소 –

+0

멋진 캐치, 어쨌든 덕분에 –

+0

, 무작위 힌트, 내가 MATLAB 플롯을 좋아하는 것 : P –