数值计算方法 求解数值积分
使用梯形公式,中矩形公式和辛普森公式,并提供三个公式的复化求积法。
fun (input x)
//函数
return sqrt(x)
trapezium_formula(input a, input b)
//梯形公式
return (1/2 * (b-a) * (fun(a) + fun(b)))
rectangel_formula(input a, input b)
//中矩形公式
return (b - a) * fun((a+b)/2)
simpose_formula(input a, input b)
//辛普森公式
return 1/6 * (b - a) * (fun(a) + 4 * fun((a+b)/2) + fun(b))
composite_integration(input a, input b, input N)
//复化求积法
sum <- 0
s <- 0
step <- (b-a) / N
i <- a
while i < b:
s <- rectangel_formula(i,i+step)
/*
s <- rectangel_formula(i,i+step);
s <- simpose_formula(i,i+step);
*/
sum <- sum + s
i <- i + step
end
return sum
#include <iostream>
#include <cmath>
using namespace std;
double fun (double x);
double trapezium_formula(double a, double b);
double rectangel_formula(double a, double b);
double simpose_formula(double a, double b);
double composite_integration(double a, double b, int N);
int main ()
{
double a,b;
int N;
cout << "输入给定区间[a,b]以及区间变成N份"<<endl;
cin >> a >> b >> N;
cout << composite_integration(a,b,N);
}
double fun (double x)
{
return sqrt(x);
}
double trapezium_formula(double a, double b)
{
return (1/2 * (b-a) * (fun(a) + fun(b)));
}
double rectangel_formula(double a, double b)
{
return (b - a) * fun((a+b)/2);
}
double simpose_formula(double a, double b)
{
return 1/6 * (b - a) * (fun(a) + 4 * fun((a+b)/2) + fun(b));
}
double composite_integration(double a, double b, int N)
{
double i;
double step,sum,s;
sum = s = 0;
step = (b-a)/N;
for (i = a; i < b; i = i+step)
{
s = rectangel_formula(i,i+step);
/*
s = rectangel_formula(i,i+step);
s = simpose_formula(i,i+step);
*/
sum += s;
}
return sum;
}
def fun(x):
return x ** 0.5
def trapezium_formula(a, b):
return 1 / 2.0 * (b - a) * (fun(a) + fun(b))
def rectangel_formula(a, b):
return (b - a) * fun((a + b) / 2.0)
def simpose_formula(a, b):
return 1 / 6 * (b - a) * (fun(a) + 4 * fun((a + b) / 2) + fun(b))
def composite_integration(a, b, N):
sum = 0
s = 0
step = (b-a)/N
i = a
while i < b:
s = trapezium_formula(i, i+step)
#s = rectangel_formula(i, i+step)
#s = simpose_formula(i, i+step)
sum = sum + s
i = i + step
return sum
print composite_integration(0.5,1,1)