数值计算方法 数值积分(伪代码 c/c++ python)

数值计算方法 求解数值积分

使用梯形公式,中矩形公式和辛普森公式,并提供三个公式的复化求积法。

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
	
	


c/c++

#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;
}


python:

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)




本光盘是《计算机常用数值计算算法与程序 C++版》一书的配套光盘,盘中包括了书中所有的C++程序源代码文件,每个源程序文件的文件扩展名都使用.cpp形式。这些C++程序已经在微软公司Windows平台下的Virsual C++ 6.0环境下通过。盘中还包括由这些源程序在VC++6.0下生成的可执行文件(文件扩展名为.exe),以及由这些程序运行后产生的结果文件(文件扩展名为.dat)。另外,还包括若干类书中所介绍算法的头文件,由文件扩展名为.h和.inl所组成。 为了方便读者实际应用书中所介绍的算法程序,本光盘专门预创建了VC++6.0的工程,以每一章建立一个工程,一共有16个工程,对应着书中的16章。全部工程包含在一个目录(文件夹)——NumComp下,该目录下一共有17个子目录(文件夹),第一个到第十六个为每章所对应的工程文件夹,命名为ChapXX,XX表示01至16,如Chap05,表示为第五章的程序所建立了工程目录(文件夹),第17个目录(文件夹)名为include,其中存放了本书中算法程序需要的诸头文件。在前十六个目录(文件夹)中除存放了各章所介绍的算法示例C++源程序文件,还包括几个VC++6.0工程所需要的文件,读者可以不用去动它们。在每一个ChapXX目录(文件夹)下,还有一个目录(文件夹):debug,该目录(文件夹)中存放了ChapXX所对应的章中所有算法C++源程序生成的可执行文件和这些程序运行后生成的结果数据文件。除止之外,还有几个是VC++6.0工程所生成的文件,读者可以不用去动它们。 在每一个ChapXX目录(文件夹)下,包括一个这样的文件:ChapX.dsw,X表示1至16这16个阿拉伯数字之一,对应于这X章的工程。当进入到某一这样的目录(文件夹)中,用鼠标双击该文件名,就可以启动VC++6.0程序,并调用了该工程,这是最方便的一种启动VC++6.0的方法之一,下面就可以进行对C++程序的编辑、编译、连接、运行等工作了。具体的操作步骤,可以参阅有关VC++6.0的使用操作手册,或技术手册。 如果读者要自己另外建立VC++6.0的工程及相应的目录(文件夹),可以参阅VC++6.0的使用操作手册,也可阅读《计算机常用数值计算算法与程序 C++版》一书的第一章“概论”中的1.8节“Visual C++ 6.0的编译运行环境”,其中有详细说明。 最后注意,在VC++ 6.0中设置好路径,特别是include目录(文件夹)的路径,否则在编译时会出现找不到头文件的错误,使编译无法正常进行。具体的设置方法请参看本书第1章的相关内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值