2017-08-12 39 views
0

方程有下面的公式:Mathematica的,简化与subsitutions

s = R*(lat - lat0) 
rho = R/Tan[lat] 
f = (x^2 + (rho + s - y)^2 - rho^2)*(Sin[lat])^2 

及其衍生物

fd = D[f, lat] 

其中

Output[1] = 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 

我想使用的置换来表达的fd s,rho

FullSimplify[fd, TransformationFunctions -> {Automatic, # /. R (lat - lat0) -> s &, # /. R/Tan[lat] -> rho &}] 

然而,只出现没有任何替代简化公式:

Output[2] = 2 Cos[lat] ((1 + (lat - lat0)^2) R^2 + x^2 + 2 (-lat + lat0) R y + y^2 + R (lat R - lat0 R - y) Cot[lat]) Sin[lat] 

感谢您的帮助。

回答

1

尝试替代和确认的结果是不变

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] 

工作,但没有保证,这将一直工作还是会做你想要什么,并在某些情况下,这将做更加诡异离奇的事情。

也许这给你足够的提示,你可以取得一些进展。

+0

@ Bill:非常感谢您的解释和评论.... – justik