-1

展開して派生させたい関数のラテックスコードは次のとおりです。

$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$

ここに画像の説明を入力

n=6throughの導出を予定していderiv(expression(myfunction),c('x1', 'x2','x3','x4','x5','x6'))ます。関数を展開せずに導関数を計算する方法がわかりませんが、方法があれば教えてください。

私の問題は、式の一部が繰り返されるため、関数を1つの文字列に展開しようとしたときに始まります。

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'))
4

2 に答える 2

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) "

つまり、第 2 項の展開に「+」記号がありません。

しかし、戦略的には、Mathematica または Maxima がこの目的に使用するのに適したプラットフォームになると考えていました。

于 2013-10-18T16:24:01.793 に答える
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'))
于 2013-10-23T12:13:27.393 に答える