2021年
8月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

setup diary

2007|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|06|08|11|
2015|01|02|03|04|05|06|07|08|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|

2021-08-03 Rで数値積分

_ diffinvを使って

Rで数値積分をする方法を聞かれたので、ついでにここにも書いておくことにする。数値積分をするためには、基本的にはy*dxを足していけば良い。dxを求めるには、diff(x)とすれば良いが、数が一つ減ってしまうので、そのままではyをかけられない。そこで、最初の要素を除いてy[-1]*diff(x)として、それを足し上げていくと数値積分となる。つまり、cumsum(y[-1]*diff(x))とすれば良い。

この方法では少し誤差が大きいので、せめて台形積分にしてみよう。yのところは、隣り合ったyの値の平均にするために、(head(y,-1)+tail(y,-1))/2として、cumsum((head(y,-1)+tail(y,-1))/2*diff(x))とすれば良い。この最初に0を加えるために、diffinv((head(y,-1)+tail(y,-1))/2*diff(x))とすると、xと数が同じになって良いだろう。