da dove vengono dx e dy ?

dx e dy sono spostamenti infinitesimi e basta. L'unica cosa che puoi fare è definire le derivate direzionali e poi prendere una base. Forse è un po' troppo avanti come cosa, ma nel Carroll (spacetime and geometry) spiega gli spazi tangenti in questo modo e credo che la cosa possa applicarsi anche qui.
In pratica tu appunto definisci le derivate direzionali lungo le curve e poi scegli una base che sono le derivate parziali e poi una base del duale che sono i dx, dy.
interpretare dx e dy come le funzioni lineari (in questo caso da R^2 in R) che, sul vettore (h,k) di R^2, agiscono in questo modo:
dx(h,k)=h
dy(h,k)=k
Queste due applicazioni lineari costituiscono una base per lo spazio duale di R^2, quindi ogni applicazione lineare L da R^2 in R, può essere espressa in termini di dx e dy. In particolare, se L(1,0)=k_1 e L(0,1)=k_2, allora possiamo scrivere L = (k_1)dx + (k_2)dy
In questo modo, si può esprimere la differenziabilità di una funzione f : R^2 —> R in un punto (x_0,y_0) di R^2 con l’esistenza di un’applicazione lineare (chiamata df(x_0,y_0)) che approssima la differenza f(x_0+h,y_0+k)-f(x_0,y_0) a meno di un o-piccolo della norma del vettore (h,k). In altri termini, ci chiediamo: se parto dal punto (x_0,y_0) e mi discosto di un vettore (h,k) e calcolo la differenza dei valori di f nei punti, posso approssimare questa differenza con un’applicazione lineare (che chiamiamo df(x_0,y_0)) nel vettore (h,k)? se la risposta è affermativa, significa che la funzione è differenziabile.
A questo punto, usando dx e dy, possiamo riscrivere df(x_0,y_0) come loro combinazione lineare. Se si fanno i conti, si scopre che i coefficienti di questa combinazione lineare, sono proprio dati dalle componenti del gradiente di f in (x_0,y_0).