Как раскрасить поверхность с более сильным контрастом

В Matlab я пытаюсь построить функцию в 2-мерном евклидовом пространстве с помощью следующего кода

s=.05;
x=[-2:s:2+s];
y=[-1:s:3+s];
[X,Y]=meshgrid(x,y);
Z=(1.-X).^2 + 100.*(Y-X.*X).^2;
surf(X,Y,Z)
colormap jet

Вот как выглядит мой график:

enter image description here

Я надеюсь раскрасить поверхность с более сильным контрастом, просто как показано в Википедии enter image description here

Сюжет в Википедии нарисован с помощью кода Python:

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.colors import LogNorm
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = Axes3D(fig, azim = -128, elev = 43)
s = .05
X = np.arange(-2, 2.+s, s)
Y = np.arange(-1, 3.+s, s)
X, Y = np.meshgrid(X, Y)
Z = (1.-X)**2 + 100.*(Y-X*X)**2
ax.plot_surface(X, Y, Z, rstride = 1, cstride = 1, norm = LogNorm(), cmap = cm.jet)

plt.xlabel("x")
plt.ylabel("y")

plt.show()

Мой код Matlab и код Python из Википедии, кажется, используют «струю» в качестве цветовой карты, но их фактическое отображение значения высоты в цвет отличается. Итак, мне было интересно, как я могу получить похожую раскраску в Matlab?

Спасибо и всего наилучшего!

6
задан Tim 22 February 2011 в 22:40
поделиться