Может быть немного проще, если мы используем немедленные, а не отложенные присвоения для этих производных. (Если вы хотите, чтобы что-то более общее, то есть обрабатывало произвольные функции f, его было бы не слишком сложно модифицировать с помощью локальных переменных.) Я использую новую функцию, которая имеет несколько критических точек.
f[x_, y_] := y^4 - y^3 - 3 x^2 y + x^4
dfx[x_, y_] = D[f[x, y], x];
dfy[x_, y_] = D[f[x, y], y];
dfxx[x_, y_] = D[f[x, y], x, x];
dfyy[x_, y_] = D[f[x, y], y, y];
dfxy[x_, y_] = D[f[x, y], x, y];
dff[x_, y_] = dfxx[x, y]*dfyy[x, y] - (dfxy[x, y])^2;
solns = {x, y} /. Solve[{dfx[x, y] == 0, dfy[x, y] == 0}, {x, y}];
realsolns = Select[solns, FreeQ[#, Complex] &]
Вот точки решения.
Out[87]= {{0, 0}, {0, 3/4}, {-(3/2), 3/2}, {3/2, 3/2}}
Теперь можно применить второй производный якобиан к каждому, как показано ниже.
In[88]:= jacs = dff @@@ realsolns
Out[88]= {0, -(81/8), 243, 243}
Даниэль Лихтблау
Wolfram Research