Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/bunji2/gointegral
gointegral --- golang implementation of Simpson method (described in Japanese)
https://github.com/bunji2/gointegral
golang integral-equations javascript simpson-method
Last synced: about 14 hours ago
JSON representation
gointegral --- golang implementation of Simpson method (described in Japanese)
- Host: GitHub
- URL: https://github.com/bunji2/gointegral
- Owner: bunji2
- License: mit
- Created: 2020-02-15T14:21:59.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2020-04-20T14:14:40.000Z (over 4 years ago)
- Last Synced: 2023-03-02T00:25:44.250Z (over 1 year ago)
- Topics: golang, integral-equations, javascript, simpson-method
- Language: Go
- Homepage:
- Size: 31.3 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# gointegral --- golang implementation of Simpson method
シンプソン法の golang 実装。
十分小さな区間
![](0.gif)
における関数![](1.gif)
の定積分は、次の近似式で与えられる。![](2.gif)
区間
![](3.gif)
の定積分であれば、区間を N 等分した十分に小さな区間![](4.gif)
の定積分の合計と考えればよい。![](5.gif)
where![](6.gif)
![](7.gif)
----
gointegral では積分区間 interval、区間を等分する個数 N、積分対象とする関数 f を JavaScript のコードで与える。
例として、sin 関数の[0,π] 区間での定積分では次のような JavaScript コードを使う。
```javascript
// sin.js// 積分区間 [a, b]
var interval = [0, Math.PI];// 区間等分数 N
var n = 1000;// 積分の対象とする関数 f(x)
function f(x) {
return Math.sin(x);
}
```gointegral の使い方は次の通りである。
```
$ ./gointegral sin.js
interval = [0 3.141592653589793]
n = 1000
result = 1.999995065201925
$
```積分結果がわかっていて、シンプソン法のエラー率[%]を求めたい場合には、次のように answer 変数を指定する。
```javascript
// 積分区間 [a, b]
var interval = [0, Math.PI];// 区間等分数 N
var n = 1000;// 積分の対象とする関数 f(x)
function f(x) {
return Math.sin(x);
}// エラー率[%]を算出するための正しい積分結果の指定
var answer = 2;
```実行結果は以下のとおりである。
```
$ ./gointegral sin.js
interval = [0 3.141592653589793]
n = 1000
result = 1.999995065201925
answer = 2
error = 0.0002467399037531237 [%]
```----
いくつか実行例を示す。![](8.gif)
```javascript
// 積分区間
var interval = [0, 1];// 区間等分数 N
var n = 1000;// 積分対象の関数
function f(x) {
return 5*Math.pow(x, 4);
}// エラー率を算出するための正しい積分結果の指定
var answer = 1;
```実行結果:
```
interval = [0 1]
n = 1000
result = 1.0000000000000449
answer = 1
error = 4.4853010194856324e-12 [%]
```----
![](9.gif)
```javascript
// 積分区間
var interval = [0, 2*Math.PI];// 区間等分数
var n = 1000;// 積分対象の関数
function f(x) {
return Math.abs(Math.cos(x));
}// エラー率を算出するための正しい積分結果の指定
var answer = 4;
```実行結果:
```
interval = [0 6.283185307179586]
n = 1000
result = 4.006283143967614
answer = 4
error = 0.15707859919034117 [%]
```----
![](10.gif)
```javascript
// 積分区間
var interval = [Math.sqrt(2), 2];// 区間等分数
var n = 1000;// 積分対象の関数
function f(x) {
return 1/(x*Math.sqrt(Math.pow(x, 2)-1));
}// エラー率を算出するための正しい積分結果の指定
var answer = Math.PI/12;
```実行結果:
```
interval = [1.4142135623730951 2]
n = 1000
result = 0.26196843201518166
answer = 0.2617993877991494
error = 0.06457013419830616 [%]
```