2010-07-27 118 views
15

我使用D來獲得函數的衍生物。但是,返回導數時,R不會簡化表達式。我需要弄清楚一個函數是否具有一般可以表示的導數。 R中有什麼方法來簡化表達式?衍生函數

> D(expression(sqrt(1 - x^2)), 'x') 
-(0.5 * (2 * x * (1 - x^2)^-0.5)) 
> D(D(expression(sqrt(1 - x^2)), 'x'), 'x') 
-(0.5 * (2 * (1 - x^2)^-0.5 - 2 * x * (-0.5 * (2 * x * (1 - x^2)^-1.5)))) 

其次,R有沒有辦法進行數值積分?

回答

14
library(Ryacas) 
x <- Sym("x") 
Simplify(deriv(sqrt(1 - x^2),x,2)) # return the result simplified 

expression((x^2 - 1 - x^2)/root(1 - x^2, 2)^3) 

您也可以嘗試

PrettyForm(Simplify(deriv(sqrt(1 - x^2),x,2))) 

這給

2  2 
    x - 1 - x 
--------------- 
       3 
    / 2 \ 
Sqrt\ 1 - x/

由於爲數字集成嘗試givi ng看看有什麼可用

library(sos) 
findFn('{numerical+integration}') 
+1

這真的很有幫助。它使搜索功能更容易! – user236215 2010-07-29 03:23:59

2

據我所知,R不會簡化D()的結果。這聽起來好像你想要一個適當的計算機代數系統,而R絕對不是一個完整的CAS。 MathematicaMaple是最知名的,但也有一些開源替代品(as discussed on this SO post)。

R可以進行數值積分 - 對於這類問題,首先需要在R幫助頁面(即help.search('integrate'))中進行搜索。您可以在stats包中使用integrate()MASS軟件包中也有area(),但這樣做要簡單得多(即爲了演示目的)。

+1

R符號功能可以用Ryacas或rSymPy進行擴展。 – mbq 2010-07-27 08:09:16

0

你可能想檢查Octave ...這是免費的,afaik數學人喜歡它。

編輯:@mbq,我不太確定...這就是我的想法。基本上它是免費的,也許能夠做到他想做的事 - 爲什麼不試一試。有一些evidence,我的猜測並不是那麼糟糕。當然,這也有可能是我不明白的事情:)

+1

八度有象徵?我雖然只是一個「GNU MATLAB」。 – mbq 2010-07-27 11:29:38

+0

也認爲它是GNU matlab,只是想說,它可能更容易處理數學軟件,即使它需要一些擴展。 – 2010-07-27 11:37:49

+0

你也可以看看Maxima。 http://maxima.sourceforge.net/ – 2010-07-27 16:13:25