嘗試替代和確認的結果是不變
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])
現在爲什麼沒有在原來的fd
更換R/Tan[lat]
工作?
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}
你開始得到的想法在數學這一模式替代可以成爲一個黑暗和扭曲的走廊通向一個標門「的挫折。」
有一個技巧,你可能能夠使用。
Simplify[fd, R Cot[lat] == rho]
這將盡量簡化fd
通常試圖與RHO更換R Cot[lat]
。而且,在這個特殊的例子,這將即使
Simplify[fd, R/Tan[lat] == rho]
工作,但沒有保證,這將一直工作還是會做你想要什麼,並在某些情況下,這將做更加詭異離奇的事情。
也許這給你足夠的提示,你可以取得一些進展。
@ Bill:非常感謝您的解釋和評論.... – justik