| 情報学部 | 菅沼ホーム | 目次 | 索引 | 
/****************************/
/* 台形則                   */
/*      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
			
| 情報学部 | 菅沼ホーム | 目次 | 索引 |