2013-10-18 47 views
-1

下面是我想擴大和導出功能乳膠代碼:擴展功能,並與DERIV計算導

$f(x) = \sum\limits_{i=1}^n \left(x_i + \frac{h}{2}(1-ih)\sum\limits_{j=1}^i jh(x_j + jh +1)^3 + \frac{h}{2}ih\sum\limits_{j=i+1}^n (1-jh)(x_j+jh+1)^3 \right)^2$

enter image description here

我打算通過deriv(expression(myfunction),c('x1', 'x2','x3','x4','x5','x6'))推導n=6。我不知道如何在不擴展函數的情況下計算導數,但如果有方法,請讓我知道。

n<-6 
myexpr <- sapply(1:n, function(i) paste(paste('x',i,sep=''),paste('+h/2*(1-',i,'*h)*(',sep=''), 
          sapply(1:i,function(j) paste('(j*h*(',paste('x',j,sep=''),'j*h+1)^3)',collapse='+')), 
          paste('+h/2*',i,'*h*(',sep=''), 
          sapply((i+1):n,function(j) paste('((1-j*h)*(',paste('x',j,sep=''),'+j*h+1)^3)',collapse='+')) 
          ,collapse='+')) 


deriv(expression(myexpr),c('x1', 'x2','x3','x4','x5','x6')) 
+0

「derive」!=「區分」。無論如何,你寫的代碼失敗時會出現「缺少參數」的錯誤。你如何提供序列術語定義的簡單例子?另外,你真的想要六個獨立變量的函數嗎? –

+0

這太荒謬了。當我運行這個計算時,我會得到:'object.size(myexpr)#62425288 bytes'。 R不是一個符號代數系統。 –

+0

@DWin感謝您的嘗試,無論如何我知道我的代碼是錯誤的,它應該更短,這就是爲什麼我問如何避免重複條款,等你是否正確的表達達到這種規模嗎?也許你可以提供我的代碼只是爲了知道 – nopeva

回答

0

我一直沒有投票贊成,但我可以這樣做。事實上,這不僅是可以做到的,而且R也能很快解決:

z <- paste(
    sapply(1:6, function(i,n=6) { 

    require(MASS) 
    h <- fractions(1/(n+1)) 

    a <- paste('x',i,sep='') 
    b <- paste('+.5*',h,'*(1-',i,'*',h,')*(',sep='') 
    cc <- paste(sapply(1:i,function(j) paste(j,'*',h,'*(',paste('x',j,sep=''),'+',j,'*',h,'+1)^3',sep='')),collapse='+') 
    d <- paste(a,b,cc,')') 

    e <- if (i < 6) paste('+.5*',h,'*(',i,'*',h,')*(',sep='') else '' 
    f <- if (i < 6) paste(sapply((i+1):n,function(j) paste('(1-',j,'*',h,')*(',paste('x',j,sep=''),'+',j,'*',h,'+1)^3',sep='')),collapse='+') else '' 
    g <- paste(e,f,ifelse(i!=6,')',"")) 

    paste('(',d,g,')^2',sep='') 

    } 
), 
    collapse='+') 

deriv(parse(text=z),c('x1','x2','x3','x4','x5','x6')) 
+0

@DWin只是爲了表明它可以完成 – nopeva

2

我想你應該嘗試一些簡單的獲得一個句柄:嘗試,因爲表達式的一部分重複得到,因此任何幫助,將不勝感激擴大隻是一個字符串函數時

我的問題開始使用表達式。在你的情況下,我可以通過簡單地查看第一個參數找到這個(可笑的大)表達式的構造錯誤。

> do.call(deriv, list(expr=parse(text=myexpr[1]), namevec=c('x1'))) 
Error in parse(text = myexpr[1]) : <text>:1:31: unexpected symbol 
1: x1 +h*0.5*(1-1*h)*((j*h*(x1 j 
           ^
> substr(myexpr[1],1,40) 
[1] "x1 +h*0.5*(1-1*h)*((j*h*(x1 j*h+1)^3) " 

所以你錯過了一個「+」號 - 第二項的擴展符號。

然而,從戰略角度來看,我會認爲Mathematica或Maxima是更好的平臺,可以用於此目的。