本文共 1946 字,大约阅读时间需要 6 分钟。
题目:
利用复化梯形求积公式计算圆周率
具体要求:
用下面这个公式,把【0,1】区间十等分,用梯形法计算Π。
import java.util.Scanner;public class CompoundTrapezium { public static void main(String args[]) { Scanner sc = new Scanner(System.in); System.out.println("输入区间下限:"); double a = sc.nextDouble(); System.out.println("输入区间上限:"); double b = sc.nextDouble(); System.out.println("输入将区间分成的份数:"); double h=sc.nextInt(); compoundTrapezium(a,b,h); } //复化梯形公式 public static void compoundTrapezium(double a,double b,double h){ double value=0; //记录最终数值 double contain=0; //记录一个中间值 for(double k=1;k<=h-1;k++){ contain=contain+f(a+k*((b-a)/h)); //调用公式 } contain=2*contain; //调用公式 value=((b-a)/(2*h))*(f(a)+f(b)+contain); //调用公式 System.out.println("通过给定的公式、指定的上下限和区间分成份数,可以得到结果为:"+4*value); //因为Π/4 才等于这个结果,所以要乘4 } //用给定公式计算相应数值 public static double f(double x) { double value=0; //记录经过公式算出来的值 value=1/(1+x*x); //题目中给定公式,需要手动更改 return value; }}
题目:
import java.util.Scanner;public class CompoundTrapezium { public static void main(String args[]) { Scanner sc = new Scanner(System.in); System.out.println("输入区间下限:"); double a = sc.nextDouble(); System.out.println("输入区间上限:"); double b = sc.nextDouble(); System.out.println("输入将区间分成的份数:"); double h=sc.nextInt(); compoundTrapezium(a,b,h); } //复化梯形公式 public static void compoundTrapezium(double a,double b,double h){ double value=0; //记录最终数值 double contain=0; //记录一个中间值 for(double k=1;k<=h-1;k++){ contain=contain+f(a+k*((b-a)/h)); //调用公式 } contain=2*contain; //调用公式 value=((b-a)/(2*h))*(f(a)+f(b)+contain); //调用公式 System.out.println("通过给定的公式、指定的上下限和区间分成份数,可以得到结果为:"+value); } //用给定公式计算相应数值 public static double f(double x) { double value=0; //记录经过公式算出来的值 value=x+Math.sin(x)/3;//题目中给定公式,需要手动更改 /** 测试 system.out.println("x:"+x+",value:"+value) */ return value; }}
注意:基本公式应该没错,如果套用请注意公式是否与题目中一致。(公式是定积分中的)同时也要注意分成的区间数是否正确。
转载地址:http://ixyki.baihongyu.com/