Попробуйте замену и убедитесь, что результат не изменился
s = R*(lat - lat0);
rho = R/Tan[lat];
f = (x^2 + (rho + s - y)^2 - rho^2)*(Sin[lat])^2;
fd = D[f, lat];
FullSimplify[fd, TransformationFunctions->{Automatic,
#/.R(lat-lat0)->s&, #/.R/Tan[lat]->rho &}];
Simplify[% == fd]
и выход True
Обратите внимание, что вы ранее определили s=R*(lat-lat0)
, поэтому кажется, что вы заменяете R(lat-lat0)
на R(lat-lat0)
Попробуйте отменить определение s
перед заменой
s =.;
FullSimplify[fd, TransformationFunctions -> {Automatic,
#/.R(lat-lat0)->s&, #/.R/Tan[lat]->rho&}]
и результат 2 Cos[lat](R(s-y)Cos[lat]+(R^2+x^2+(s-y)^2)Sin[lat])
Теперь, почему замена R/Tan[lat]
не работала в оригинальном fd
?
D[f, lat]==2 Cos[lat](x^2-R^2 Cot[lat]^2+((lat-lat0)R-y+R Cot[lat])^2) Sin[lat]+(2 R^2 Cot[lat]Csc[lat]^2+2((lat-lat0)R-y+R Cot[lat])(R-R Csc[lat]^2)) Sin[lat]^2
Обратите внимание, что здесь нет R/Tan[lat]
. Сопоставление с образцом Mathematica очень буквальное и не имеет возможности понять это R/Tan[lat]==R Cot[lat]
Много лет назад один парень написал пакет, который делал "математические замены" вместо "буквальных замен" Mathematica, но он устарел, и я не знаю не знаю достаточно, чтобы это работало с текущими версиями.
Вместо этого попробуем заменить R Cot[lat]
и отменить определение rho, чтобы это не отменяло никаких замен.
s =.; rho =.
fd /. {R Cot[lat] -> rho}
Результат 2 Cos[lat](x^2+((lat-lat0)R+rho-y)^2-R^2 Cot[lat]^2) Sin[lat]+(2 R^2 Cot[lat]Csc[lat]^2+2 ((lat-lat0)R+rho-y)(R-R Csc[lat]^2))Sin[lat]^2
Обратите внимание, что R^2 Cot[lat]^2
остается, и снова буквальная замена не знает, что вы, вероятно, ожидаете, что R Cot[lat]->rho
изменит это на rho^2
, поэтому добавьте это правило.
s=.; rho=.
fd /. {R Cot[lat] -> rho, R^2 Cot[lat]^2 -> rho^2}
Обратите внимание, что R^2 Cot[lat]
остается, и вы, вероятно, имели в виду, что его нужно заменить на R rho
, поэтому добавьте это правило.
s =.; rho =.
fd /. {R Cot[lat]->rho, R^2 Cot[lat]^2->rho^2, R^2 Cot[lat]->R rho}
Вы начинаете понимать, что подстановка шаблонов в системе Mathematica может превратиться в темный извилистый коридор, ведущий к двери с надписью «Разочарование».
Есть один трюк, который вы можете использовать.
Simplify[fd, R Cot[lat] == rho]
Это попытается упростить fd
и обычно попытается заменить R Cot[lat]
на ро. И в этом конкретном примере это будет работать даже с
Simplify[fd, R/Tan[lat] == rho]
Но нет никаких гарантий, что это всегда будет работать или будет делать то, что вы хотите, а в некоторых случаях это будет делать еще более странные и причудливые вещи.
Возможно, это дает вам достаточно намеков на то, что вы можете добиться определенного прогресса.
person
Bill
schedule
12.08.2017