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