| 情報学部 | 菅沼ホーム | 目次 | 索引 |
/****************************/
/* 台形則 */
/* coded by Y.Suganuma */
/****************************/
#include <stdio.h>
#include <math.h>
double snx(double);
double daikei(double, double, int, double(*)(double));
int main()
{
double y, pi2 = 2.0 * atan(1.0);
y = daikei(0.0, pi2, 100, snx);
printf("result %f\n", y);
return 0;
}
/****************/
/* 関数値の計算 */
/****************/
double snx(double x)
{
return sin(x);
}
/******************************************************/
/* 数値積分(台形則) */
/* x1 : 下限 */
/* x2 : 上限 */
/* n : 分割数 */
/* fun : 関数名(f) */
/* return : 積分値 */
/******************************************************/
double daikei(double x1, double x2, int n, double(*fun)(double))
{
double s = 0.0;
double x, h;
int i1;
h = (x2 - x1) / n;
x = x1;
for (i1 = 0; i1 < n-1; i1++) {
x += h;
s += (*fun)(x);
}
s = 0.5 * h * ((*fun)(x1) + (*fun)(x2) + 2.0 * s);
return s;
}
/****************************/
/* 台形則 */
/* coded by Y.Suganuma */
/****************************/
import java.io.*;
public class Test {
public static void main(String args[]) throws IOException
{
double y;
Kansu kn = new Kansu();
y = kn.daikei(0.0, 0.5*Math.PI, 100);
System.out.println("result " + y);
}
}
/****************/
/* 関数値の計算 */
/****************/
class Kansu extends Daikei
{
double snx(double x)
{
double y = Math.sin(x);
return y;
}
}
abstract class Daikei
{
/******************************************************/
/* 数値積分(台形則) */
/* x1 : 下限 */
/* x2 : 上限 */
/* n : 分割数 */
/* return : 積分値 */
/******************************************************/
abstract double snx(double x);
double daikei(double x1, double x2, int n)
{
double s = 0.0;
double x, h;
int i1;
h = (x2 - x1) / n;
x = x1;
for (i1 = 0; i1 < n-1; i1++) {
x += h;
s += snx(x);
}
s = 0.5 * h * (snx(x1) + snx(x2) + 2.0 * s);
return s;
}
}
<!DOCTYPE HTML>
<HTML>
<HEAD>
<TITLE>数値積分(台形則)</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
<SCRIPT TYPE="text/javascript">
str = "";
function main()
{
str = document.getElementById("func").value + ";";
// データの設定
let n = parseInt(document.getElementById("haba").value);
let x1 = parseFloat(document.getElementById("x1").value);
let x2 = parseFloat(document.getElementById("x2").value);
// 実行
let x = daikei(x1, x2, n, snx);
// 結果
let c = 100000;
let s1 = Math.round(x * c) / c;
document.getElementById("res").value = s1;
}
/****************/
/* 関数値の計算 */
/****************/
function snx(x)
{
let y = eval(str);
return y;
}
/**********************************/
/* 数値積分(台形則) */
/* x1 : 下限 */
/* x2 : 上限 */
/* n : 分割数 */
/* fn : 関数値を計算する関数 */
/* return : 積分値 */
/**********************************/
function daikei(x1, x2, n, fn)
{
let s = 0.0;
let h = (x2 - x1) / n;
let x = x1;
for (let i1 = 0; i1 < n-1; i1++) {
x += h;
s += fn(x);
}
s = 0.5 * h * (fn(x1) + fn(x2) + 2.0 * s);
return s;
}
</SCRIPT>
</HEAD>
<BODY STYLE="font-size: 130%; background-color: #eeffee;">
<H2 STYLE="text-align:center"><B>数値積分(台形則)</B></H2>
<DL>
<DT> テキストフィールドには,例として,sin(x) を 0 から π/2 まで積分する場合に対する値が設定されています.他の問題を実行する場合は,それらを適切に修正してください.なお,式は,JavaScript の仕様に適合した形式で記述してあることに注意してください.
</DL>
<DIV STYLE="text-align:center">
積分範囲:<INPUT ID="x1" STYLE="font-size: 100%" TYPE="text" SIZE="10" VALUE="0.0">,
<INPUT ID="x2" STYLE="font-size: 100%" TYPE="text" SIZE="10" VALUE="1.570796327">
分割:<INPUT ID="haba" STYLE="font-size: 100%" TYPE="text" SIZE="5" VALUE="100"><BR><BR>
式:<INPUT ID="func" STYLE="font-size: 100%" TYPE="text" SIZE="50" VALUE="Math.sin(x)">
<BUTTON STYLE="font-size: 100%; background-color: pink" onClick="main()">実行</BUTTON><BR><BR>
結果:<INPUT ID="res" STYLE="font-size: 100%" TYPE="text" SIZE="10">
</DIV>
</BODY>
</HTML>
<?php
/****************************/
/* 台形則 */
/* coded by Y.Suganuma */
/****************************/
$pi2 = 2.0 * atan(1.0);
$y = daikei(0.0, $pi2, 100, "snx");
printf("result %f\n", $y);
/****************/
/* 関数値の計算 */
/****************/
function snx($x)
{
return sin($x);
}
/******************************************************/
/* 数値積分(台形則) */
/* x1 : 下限 */
/* x2 : 上限 */
/* n : 分割数 */
/* fun : 関数名(f) */
/* return : 積分値 */
/******************************************************/
function daikei($x1, $x2, $n, $fun)
{
$s = 0.0;
$h = ($x2 - $x1) / $n;
$x = $x1;
for ($i1 = 0; $i1 < $n-1; $i1++) {
$x += $h;
$s += $fun($x);
}
$s = 0.5 * $h * ($fun($x1) + $fun($x2) + 2.0 * $s);
return $s;
}
?>
#***************************/
# 台形則 */
# coded by Y.Suganuma */
#***************************/
#***************/
# 関数値の計算 */
#***************/
snx = Proc.new { |x|
Math.sin(x)
}
#*****************************************************/
# 数値積分(台形則) */
# x1 : 下限 */
# x2 : 上限 */
# n : 分割数 */
# fun : 関数名(f) */
# return : 積分値 */
#*****************************************************/
def daikei(x1, x2, n, &fun)
s = 0.0
h = (x2 - x1) / n
x = x1
for i1 in 0 ... n-1
x += h
s += fun.call(x)
end
s = 0.5 * h * (fun.call(x1) + fun.call(x2) + 2.0 * s)
return s
end
pi2 = 2.0 * Math.atan(1.0)
y = daikei(0.0, pi2, 100, &snx)
printf("result %f\n", y)
# -*- coding: UTF-8 -*-
import numpy as np
from math import *
############################################
# 数値積分(台形則)
# x1 : 下限
# x2 : 上限
# n : 分割数
# fn : 関数名(f)
# return : 積分値
# coded by Y.Suganuma
############################################
def daikei(x1, x2, n, fn) :
s = 0.0
h = (x2 - x1) / n
x = x1
for i1 in range(0, n-1) :
x += h
s += fn(x)
s = 0.5 * h * (fn(x1) + fn(x2) + 2.0 * s)
return s
############################################
# 台形則
# coded by Y.Suganuma
############################################
# 関数値の計算
def snx(x) :
return sin(x)
# 計算
pi2 = 0.5 * pi
y = daikei(0.0, pi2, 100, snx)
print("result " + str(y))
/****************************/
/* 台形則 */
/* coded by Y.Suganuma */
/****************************/
using System;
class Program
{
static void Main()
{
Test1 ts = new Test1();
}
}
class Test1
{
public Test1()
{
double y = daikei(0.0, 0.5*Math.PI, 100, snx);
Console.WriteLine("result " + y);
}
// 関数値の計算
double snx(double x)
{
return Math.Sin(x);
}
/**********************************/
/* 数値積分(台形則) */
/* x1 : 下限 */
/* x2 : 上限 */
/* n : 分割数 */
/* fn : 関数値を計算する関数 */
/* return : 積分値 */
/**********************************/
double daikei(double x1, double x2, int n, Func<double, double> fn)
{
double s = 0.0;
double h = (x2 - x1) / n;
double x = x1;
for (int i1 = 0; i1 < n-1; i1++) {
x += h;
s += fn(x);
}
s = 0.5 * h * (fn(x1) + fn(x2) + 2.0 * s);
return s;
}
}
''''''''''''''''''''''''''''
' 台形則 '
' coded by Y.Suganuma '
''''''''''''''''''''''''''''
Module Test
Sub Main()
' 関数値の計算(ラムダ式)
Dim snx = Function(x) As Double
Return Math.Sin(x)
End Function
' 実行
Dim y As Double = daikei(0.0, 0.5*Math.PI, 100, snx)
Console.WriteLine("result " & y)
End Sub
''''''''''''''''''''''''''''''''''
' 数値積分(台形則) '
' x1 : 下限 '
' x2 : 上限 '
' n : 分割数 '
' fn : 関数値を計算する関数 '
' return : 積分値 '
''''''''''''''''''''''''''''''''''
Function daikei(x1 As Double, x2 As Double, n As Integer, fn As Func(Of Double, Double))
Dim s As Double = 0.0
Dim h As Double = (x2 - x1) / n
Dim x As Double = x1
For i1 As Integer = 0 To n-2
x += h
s += fn(x)
Next
s = 0.5 * h * (fn(x1) + fn(x2) + 2.0 * s)
Return s
End Function
End Module
| 情報学部 | 菅沼ホーム | 目次 | 索引 |