How to Scale Gradient Field for large z-values?
4 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Niklas Kurz
il 29 Apr 2021
Commentato: Niklas Kurz
il 12 Mag 2024
I want to plot a function R^2 -> R with gradient Field beneath:
f2 = @(x,y) 1./sqrt(x.^2+y.^2);
[u2,v2] = meshgrid(-1:0.01:1);
[du2,dv2] = gradient(f2(u2,v2));
s = surf(u2,v2,f2(u2,v2));
hold on
contour(u2,v2,f2(u2,v2))
hold on
norm = 1./sqrt(du2.^2+dv2.^2);
quiver(u2,v2,du2./norm,dv2./norm,'LineWidth',2)
axis([-1 1 -1 1 0 10])
caxis([0,10])
colormap(cool)
alpha(s,0.95)
shading flat
Sadly the gradient field is not visible. Probably because it's too small, f2 get's too large and I'm lacking of the mathmatical knowledge to adjust it properly
0 Commenti
Risposta accettata
Anurag Ojha
il 8 Mag 2024
Hello Niklas
One way to adjust it is by normalizing the gradient vectors before plotting them.
Here's an updated version of your code:
f2 = @(x,y) 1./sqrt(x.^2+y.^2);
[u2,v2] = meshgrid(-1:0.01:1);
[du2,dv2] = gradient(f2(u2,v2));
% Normalize the gradient vectors
norm = sqrt(du2.^2+dv2.^2);
du2_norm = du2./norm;
dv2_norm = dv2./norm;
s = surf(u2,v2,f2(u2,v2));
hold on
contour(u2,v2,f2(u2,v2))
hold on
quiver(u2,v2,du2_norm,dv2_norm,'LineWidth',2)
axis([-1 1 -1 1 0 10])
caxis([0,10])
colormap(cool)
alpha(s,0.95)
shading flat
This code normalizes the gradient vectors by dividing the du2 and dv2 components by their magnitude (norm). This ensures that the length of each vector is 1, making them visible in the plot.
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Surface and Mesh Plots in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!