数值积分——复合梯形求积公式

  这段代码实现的是最一般的数值积分法——梯形求积法,积分值的准确依赖于所取精度大小

  1.代码

%%复合梯形求积公式
%%Y是数值(attribute=0)或具体表达式(attribute=1),interval是求积区间,n是精度(如果是数值,则为数值长度-1)
function CTQF = Compound_trapezoid_quadrature_formula(Y,interval,n,attribute)
a = interval(1);b = interval(2);
h = (b-a)/n;
if attribute == 0
    sum = 0;
    for i=1:1:n-1
        sum=sum+Y(i+1);
    end
    Tn = (Y(1)+Y(n+1)+2*sum)*h/2;
    CTQF = vpa(Tn,8);
elseif attribute == 1
    syms x;
    X(1) = a;
    X(n+1) = b;
    for i=1:1:n-1
        X(i+1)=a+i*h;
    end
    sum=0;
    for i=1:1:n-1
        sum=sum+subs(Y,x,X(i+1));
    end
    Tn=(subs(Y,x,a)+subs(Y,x,b)+2*sum)*h/2;
    CTQF = vpa(Tn,8);
end

  2.例子

syms x;
Y = exp(x)*sin(x)+log(x+1);
interval=[0 pi];
attribute = 1;
n = 1000;
Compound_trapezoid_quadrature_formula(Y,interval,n,attribute)

vpa(int(Y,x,interval),8)

  3.结果

ans =
14.814269
ans =
14.81429

  我们选取的精度为1000,即区间分割个数,结果精确到1e-4,而随着所需要精确程度的变大,运算时间将大大增加

原文地址:https://www.cnblogs.com/guliangt/p/12243022.html

时间: 2024-07-29 16:44:43

数值积分——复合梯形求积公式的相关文章

【数值分析】复化积分公式

对于积分: 只要找到被积公式的原函数F(x),利用牛顿莱普利兹公式有: 但是,实际使用这种求积分的方法往往是有困难的,因为大量的被积函数的原函数是不能用初等函数表示的:另外,当f(x)是由测量或数值计算给出的一张数据表时,牛顿莱普利兹公式也无法直接运用,因此有必要研究积分的数值计算问题. 对于一些理论的推导,大家可以看看维基百科,下面我主要给出牛顿-科特斯公式在n=1(梯形求积公式).n=2(辛普森公式)的情况,并通过代码实现. 梯形公式: 辛普森公式: 应用高阶牛顿-科特斯公式计算积分时,会出

实验报告(2019年4月30日)下半部分

c程序实验报告 姓名:黄志乾????实验地点:教学楼514教室????实验时间:4月30日 实验项目: ???1.利用复化梯形公式计算定积分 ???2.计算Ackerman函数 ???3.编写计算x的y次幂的递归函数getpower(int x,int y).并在主程序中实现输入输出. ???4.编写计算学生年龄的递归函数 ???5.编写递归函数下hi先Ackerma函数 一.实验目的与要求 1.利用复化梯形公式计算定积分 ●掌握c语言中定义函数的方法 ●掌握通过"值传递"调用函数的方

第六章函数与宏定义实验报告(2)

C程序设计实验报告 实验项目: 1.利用复化梯形公式计算定积分2.计算Ackerman函数3.编写计算x的y次幂的递归函数getpower(int x,int y),并在主程序中实现输入输出4.编写计算学生年龄的递归函数5.编写递归函数实现Ackman函数 姓名:魏志远  实验地点:教学楼514  实验时间:5.16 一.实验目的与要求 1.利用复化梯形公式计算定积分 掌握C语言中定义函数的方法 掌握通过“值传递”调用函数的方法 2.计算Ackerman函数 掌握递归函数的设计方法 进一步练习阅

第六章 函数和宏定义实验(2)

C程序设计实验报告 实验项目: 6.4.2.模块化程序设计 利用复化梯形公式计算定积分 计算Ackerman函数 6.4.3 函数的递归调用 编程计算x的y次幂的递归函数getpower(int x,int y),并在主程序中实现输入输出 编写计算学生年龄的递归函数 编写递归函数实现Ackman函数 姓名:罗龙妹 实验地点: 514实验室 实验时间:2019年5月16日 一.实验目的与要求 6.4.2.模块化程序设计 6.4.2.2 利用复化梯形公式计算定积分 掌握C语言中定义函数的方法 掌握通

第六章函数和宏定义

C程序设计实验报告 实验项目: 第六章函数和宏定义 姓名:李儿龙  实验地点:514教室 实验时间:5.16 一.实验目的与要求 1.模块化程序设计: 6.4.2.2. 利用复化梯形公式计算定积分 掌握C语言中定义函数的方法: 掌握通过“值传递”调用函数的方法. 6.4.2.3. 计算Ackerman函数 掌握递归函数的设计方法: 进一步练习阅读检查与调试修改C程序的方法. 6.4.3.1. 编写计算x的y次幂的递归函数getpower(int x,int y),并在主程序中实现输入输出 写出该

第六次实验报告第二部分

第六章函数和宏定义 姓名:廖云福 实验地点:514教室 实验时间:5.16 一.实验目的与要求 1.模块化程序设计: 6.4.2.2. 利用复化梯形公式计算定积分 掌握C语言中定义函数的方法: 掌握通过"值传递"调用函数的方法. 6.4.2.3. 计算Ackerman函数 掌握递归函数的设计方法: 进一步练习阅读检查与调试修改C程序的方法. 6.4.3.1. 编写计算x的y次幂的递归函数getpower(int x,int y),并在主程序中实现输入输出 写出该函数的递归算法: 在递归

第六章 函数和宏定义实验(2)

C程序设计实验报告 实验项目: 1.利用复化梯形公式计算定积分 2.计算Ackerman函数 3.编写计算x的y次幂的递归函数getpower(int x,int y),并在主程序中实现输入输出 4.编写计算学生年龄的递归函数 5.编写递归函数实现Ackman函数 姓名:王锦辉 实验地点: 514实验室 实验时间:2019.5.16 一.实验目的与要求一.实验目的与要求 1.利用复化梯形公式计算定积分 掌握C语言中定义函数的方法: 掌握通过"值传递"调用函数的方法: 2.计算Acker

函数和宏定义实验(2)

C程序设计实验报告 实验项目:函数和宏定义实验 姓名:黄澄 实验地点:514教室 实验时间:5月16日 一.实验目的与要求 学习模块化程序设计方法,增强程序设计能力. 掌握C语言中定义函数的方法. 掌握值传递调用函数的方法. 掌握递归函数的设计方法. 进一步练习阅读检查与调试修改C程序的方法. 在递归函数中,使用数字1作为回归条件. 在递归函数中.使用if_else语句根据条件的真假来决定是递归还是回归. 二.实验内容 1.实验练习2:6.4.2-1.1 问题描述: (1)编制一个函数saibo

数值计算实验报告---复合求积公式(梯形、抛物线、龙贝格)、导数求值(三点、四点、五点公式)

----------------------个人作业,如果有后辈的作业习题一致,可以参考学习,一起交流,请勿直接copy ··复合抛物线公式: ··龙贝格公式: 四.实验内容 ------1 实验题目1中所用到的三种算法的matlab实现代码具体如下: %复合梯形公式 function y=funct(f,n,a,b) fi=f(a)+f(b); h=(b-a)/n; d=1; for i=1:n-1 x=a+i*h; fi=fi+2*f(x); d=d+1; end f4=h/2*fi,d %