【实验性质】综合性实验。

【实验目的】理解插值型积分法;掌握复化积分法算法。 

【实验内容】

1对 ,用复化梯形积分和变步长梯形积分求值(截断误差不超过)。

【理论基础】

积分在工程中有重要的应用,数值积分的基本思想是用被积函在区间上的一些点处的值 的线性组合作为积分的近似值:

实际应用中 f x( )是未知的,一般用 f x( ) 的次数不超过n的插值多项式来代替(插值型求积方法):

【实验过程】

1.用复化梯形积分求解,给出代码,并用表格记载求解过程〔区间数n=30、50、70、100、150〕。

程序代码:

头文件:

#ifndef DEFINITEINTEGRAL_H

#define DEFINITEINTEGRAL_H

#include<math.h>

class definiteintegral

{

public:

    definiteintegral();

    double T_Integral(double a ,double b,double(*f)(double));

    double S_Integral(double a ,double b,double(*f)(double));

    double C_Integral(double a ,double b,double(*f)(double));

    double Tn_Integral(double a ,double b,double(*f)(double),int n);

    double Sn_Integral(double a ,double b,double(*f)(double),int n);

    double Cn_Integral(double a ,double b,double(*f)(double),int n);

    double V_T_Integral(double a, double b, double(*f)(double),double e);

};

#endif // DEFINITEINTEGRAL_H

主函数:

//实验六

#include <iostream>

#include <windows.h>

#include "colvector.h"

#include "matrix.h"

#include <windows.h>

#include "linearequations.h"

#include "interpolationpolynomial.h"

#include "definiteintegral.h"

double f1(double x){

    return x*x*x-sin(x)-4*x-1;

}

double f2(double x){

    return 3*x*x-cos(x)-4;

}

double f3(double x){

    double result =sin(x)+4*x-1;

        if(result>0){

            return pow(result,1.0/3);

        }else{

             return -pow(fabs(result),1.0/3);

        }

}

using namespace std;

double f4(double x)

{

    return 1/(1+x*x);

}

int main()

{

    SetConsoleOutputCP(CP_UTF8);

    double a=0,b=1.0;

    definiteintegral obj;

    cout<<"梯形积分:\t\t"<<obj.T_Integral(a,b,f4)<<endl;

    cout<<"Simpson积分:\t\t"<<obj.S_Integral(a,b,f4)<<endl;

    cout<<"Cotess积分:\t\t"<<obj.C_Integral(a,b,f4)<<endl;

    cout<<endl;

    cout<<"复化梯形积分:\t\t"<<obj.Tn_Integral(a,b,f4,150)<<endl;

    cout<<"复化Simpson积分:\t"<<obj.Sn_Integral(a,b,f4,30)<<endl;

    cout<<"复化Cotes积分:\t\t"<<obj.Cn_Integral(a,b,f4,30)<<endl;

    cout<<endl;

    cout<<"交步长梯形积分:\t\t"<<obj.V_T_Integral(a,b,f4,0.00001)<<endl;

    return 0;

}

代码块:

#include "definiteintegral.h"
definiteintegral::definiteintegral(){}
double definiteintegral::T_Integral(double a,double b,double(*f)(double)){
    return (b-a)/2.0*(f(a)+f(b));
}
double definiteintegral::S_Integral(double a,double b,double(*f)(double)){
    return (b-a)/6.0*(f(a)+4*f((a+b)/2)+f(b));
}
double definiteintegral::C_Integral(double a,double b,double(*f)(double)){
    double h=(b-a)/4.0;
    return (b-a)/90*(7*f(a)+32*f(a+h)+12*f(a+2*h)+32*f(a+3*h)+7*f(b));
}
double definiteintegral::Tn_Integral(double a,double b,double(*f)(double),int n){
    double h=(b-a)/n;
    double result =0;
    double sum=0;
    for(int i=1;i<=n-1;i++){
            sum +=f(a+i*h);
    }
    result =h/2.0*(f(a)+2*sum+f(b));
    return result;
}
double definiteintegral::Sn_Integral(double a,double b,double(*f)(double),int n){
    double h=(b-a)/n;
    double result =0;
    double sum1=0,sum2=0;
    for(int i=1;i<=n;i++){
            sum1 +=f(a+(i-1)*h+h/2);
    }
    for(int i=1;i<=n-1;i++){
            sum2 +=f(a+i*h);
    }
    result =h/6.0*(f(a)+4*sum1+2*sum2+f(b));
    return result;
}
double definiteintegral::Cn_Integral(double a,double b,double(*f)(double),int n){
    double h=(b-a)/n;
    double result =0;
    double sum1=0,sum2=0,sum3=0,sum4=0;
    for(int i=1;i<=n;i++){
            sum1 +=f(a+(i-1)*h+h/4);
    }
    for(int i=1;i<=n;i++){
            sum2 +=f(a+(i-1)*h+h/2);
    }
    for(int i=1;i<=n;i++){
            sum3 +=f(a+(i-1)*h+3*h/4);
    }
    for(int i=1;i<=n-1;i++){
            sum4 +=f(a+i*h);
    }
    result =h/90.0*(7*f(a)+32*sum1+12*sum2+32*sum3+14*sum4+7*f(b));
    return result;
}
 
double definiteintegral::V_T_Integral(double a, double b, double(*f)(double),double e){
 
    double h=(b-a);
    double T1=h/2.0*(f(a)+f(b));
    double T2=T1/2.0+h/2.0*f(a+h/2.0);
    double error=fabs(T2-T1);
    while(error>=e){
        T1=T2;
        h=h/2;
        double x=a+h/2;
        double sum=0;
        while(x<b){
            sum+=f(x);
            x+=h;
        }
        T2=T1/2.0+h/2.0*sum;
        error=fabs(T2-T1);
    }
    return T2;
}
 

表格:

n=30
n=50
n=70
n=100
n=150
0.785352
0.785381
0.785390
0.785394
0.785396

 

2.用变步长梯形积分求解,给出代码,并用表格记载求解过程。

代码块:

double definiteintegral::V_T_Integral(double a, double b, double(*f)(double),double e){
 
    double h=(b-a);
    double T1=h/2.0*(f(a)+f(b));
    double T2=T1/2.0+h/2.0*f(a+h/2.0);
    double error=fabs(T2-T1);
    while(error>=e){
        T1=T2;
        h=h/2;
        double x=a+h/2;
        double sum=0;
        while(x<b){
            sum+=f(x);
            x+=h;
        }
        T2=T1/2.0+h/2.0*sum;
        error=fabs(T2-T1);
    }
    return T2;
}

表格:

3.比较复化积分与变步长积分,分析实验出现的问题,总结解决办法。

    复化积分是将一个区间分成若干子区间,然后在每个子区间上应用数值积分方法。它的优点是简单易实现,计算结果比较稳定。但是,如果子区间的数量不够多,或者函数在某些子区间上变化较大,可能会导致计算结果的误差较大。为了解决这个问题,可以增加子区间的数量,或者使用自适应方法,根据函数的变化情况来调整子区间的数量。

变步长积分是根据函数的变化情况,调整积分步长来提高计算精度。它的优点是能够更好地适应函数的变化情况,减小误差。但是,如果调整步长的策略不合理,可能会导致计算时间过长。为了解决这个问题,可以采用适当的步长调整策略,如自适应选取步长或者根据函数的一阶或二阶导数来调整步长。

【实验心得】

在本次实验中,我们学习了三种数值积分的方法,包括差值积分法、复化积分法和复化梯形公式。通过这些实验,我对数值积分的原理和计算方法有了更深入的了解。

在差值积分法中,我们使用了牛顿-科特斯公式对函数进行了差值,然后通过对差值多项式进行求和来计算积分。这种方法的优点是计算简单,适用于低次多项式的积分,但对于高次多项式的积分误差较大。

复化积分法是将计算区间分成若干小区间,然后对每个小区间应用数值积分方法。我们采用了复化梯形公式,其原理是通过将每个小区间近似为梯形来计算积分。这种方法误差较差值积分法要小,但计算较复杂。

综合考虑精度和计算复杂度,我们可以选择合适的数值积分方法。如果函数是低次多项式,可以使用差值积分法进行计算。对于复杂函数,可以采用复化积分法进行分区间计算。通过这些实验,我掌握了数值积分的基本原理和计算方法,并且了解了不同方法的优缺点,这对于解决实际问题具有重要的参考价值。

得    分_____________

 

评阅日期_____________

 

教师签名_____________

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/81748.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/81748.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/81748.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Webug4.0靶场通关笔记11- 第15关任意文件下载与第16关MySQL配置文件下载

目录 一、文件下载 二、第15关 任意文件下载 1.打开靶场 2.源码分析 3.渗透实战 三、第16关 MySQL配置文件下载 1.打开靶场 2.源码分析 3.渗透实战 &#xff08;1&#xff09;Windows系统 &#xff08;2&#xff09;Linux系统 四、渗透防御 一、文件下载 本文通过…

小土堆pytorch--tensorboard的使用

小土堆pytorch--tensorboard的使用 小土堆pytorch--tensorboard的使用0.介绍1.使用tensorboard绘制 y x 等简单函数1.1 相应的代码1.2 对上述代码的解释1.3 可能遇到的问题1.3.1 问题1.3.2 解决方法 2.使用tensorboard加载数据集中的图片2.1 相应代码2.2 对上述代码的解释2.2.…

大模型(LLMs)RAG 版面分析——文本分块面

大模型&#xff08;LLMs&#xff09;RAG 版面分析——文本分块面 一、为什么需要对文本分块&#xff1f; 二、能不能介绍一下常见的文本分块方法&#xff1f; 2.1 一般的文本分块方法 2.2 正则拆分的文本分块方法 2.3 Spacy Text Splitter 方法 2.4 基于 langchain 的 Cha…

解构区块链身份认证:从ID到零知识证明的实战指南

引言 在数字经济高速发展的今天&#xff0c;数字身份已成为个人与数字世界交互的核心凭证。传统中心化身份系统存在数据孤岛、隐私泄露、单点故障等痛点&#xff0c;而区块链技术凭借​​去中心化、不可篡改、可追溯​​的特性&#xff0c;为数字身份验证提供了革命性解决方案…

c#数据结构 线性表篇 非常用线性集合总结

本人能力有限,使用了一些Ai的结论,如有不足还请斧正 目录 1.HashSet <> Dictionary 2.SortedSet <>提供升序方法的List 3.ArrayList<>List 4.BitArray <> Bit[] array 5.StringCollection <>List 6.StringDictionary<>Dictionary 1…

爬虫管理平台-最新版本发布

TaskPyro 是什么&#xff1f; TaskPyro 是一个轻量级的 Python 任务调度平台&#xff0c;专注于提供简单易用的任务管理和爬虫调度解决方案。它能够帮助您轻松管理和调度 Python 任务&#xff0c;特别适合需要定时执行的爬虫任务和数据处理任务。 官方文档&#xff1a;https:/…

过采样处理

一、数据读取与初步观察 首先&#xff0c;使用pandas库读取信用卡交易数据集&#xff1a; data pd.read_csv(r"./creditcard.csv") print(data.head())通过head()方法查看数据集的前几行&#xff0c;初步了解数据的结构和内容。该数据集包含交易时间、交易金额、多…

潮乎盲盒商城系统全开源多级分销推广海报奖品兑换试玩概率OSS云存储多端源码

一、源码描述 这是一套潮乎盲盒商城源码&#xff0c;仿小叮当盲盒商城&#xff0c;后端Laravel框架前端uniappvue&#xff0c;前后端数据库分离&#xff0c;支持四端同步数据&#xff08;H5小程序等&#xff09;&#xff0c;测试环境: php7.4&#xff0c;mysql5.6&#xff0c;…

c++环境和vscode常用的一些有用插件

环境 WSL需要安装cmake 编译器g14 应该是包含了所有std:c23把好像包含部分c26 vscode 需要插件cmake vscode clangd 方便提示吧 File Watch 插件目的在保存.h/.cpp文件时候自动执行vscode 的cmake吧 error lens 方便每次显示错误和警告的提示懒得每次点击去看错误 Edit Sugge…

Spring 转发 form-data 文件上传请求时中文文件名乱码

Spring 转发 form-data 文件上传请求时中文文件名乱码 复现问题找原因解决问题参考 复现问题 后端有两个接口&#xff1a; /upload 是文件上传的接口。 /forward 是转发文件上传请求的接口。 RequestMapping RestController public class FileUploadController {/*** 直接调…

MySQL 8.4.4 安全升级指南:从漏洞修复到版本升级全流程解析

目录 二、升级前关键注意事项 1. 数据安全与备份 2. 版本兼容性与路径规划 三、分步升级操作流程 1. 环境预检与准备 2. 安装包部署 3. 强制升级组件 4. 验证与启动 一、背景与必要性 近期安全扫描发现生产环境的 MySQL 数据库存在多个高危漏洞(CVE 详情参见Oracle 官…

vulkanscenegraph显示倾斜模型(6.4)-多线程下的记录与提交

前言 上章深入分析了帧循环中呈现阶段的具体实现。本章将分析多线程下的记录与提交&#xff0c;进一步剖析vsg帧循环过程中的同步机制&#xff0c;并揭露信号量(VkSemaphore)和围栏(VkFence)以及vsg::FrameBlock与vsg::Barrier在其中的作用。 目录 1 信号量(VkSemaphore)、栅栏…

Python爬虫实战:获取扇贝单词数据并分析,为用户高效学习单词做参考

一、引言 随着互联网的迅猛发展,在线学习资源日益丰富多样。扇贝单词作为一款备受欢迎的在线英语学习平台,积累了海量的单词学习数据。借助 Python 强大的爬虫技术获取这些数据,并运用数据分析和机器学习方法进行深度挖掘,能够为用户量身定制更个性化、更高效的单词学习方…

【Vagrant+VirtualBox创建自动化虚拟环境】Ansible-Playbook

Vagrant 后续Ansible实战&#xff1a;【Ansible自动化运维实战&#xff1a;从Playbook到负载均衡指南】-CSDN博客 Vagrant是一个基于Ruby的工具&#xff0c;用于创建和部署虚拟化开发环境。它使用Oracle的开源VirtualBox虚拟化系统&#xff0c;使用 Chef创建自动化虚拟环境 Do…

Codigger Desktop:重新定义数字工作与生活方式

Codigger Desktop是一款革命性的智能桌面操作系统&#xff0c;专为现代数字生活和工作场景打造。它不仅成为开发者的强大生产力工具&#xff0c;更是普通用户日常数字生活的得力助手&#xff0c;完美实现了专业性与易用性的平衡。 Multimedia Desktop全能数字生活平台 重新定…

Servlet+tomcat

serverlet 定义&#xff1a;是一个接口&#xff0c;定义了java类被浏览器&#xff08;tomcat识别&#xff09;的规则 所以我们需要自定义一个类&#xff0c;实现severlet接口复写方法 通过配置类实现路径和servlet的对应关系 执行原理 当用户在浏览器输入路径&#xff0c;会…

什么是 DDoS 攻击?高防 IP 如何有效防护?2025全面解析与方案推荐

一、DDoS 攻击&#xff1a;互联网时代的 “数字核武器” 1. DDoS 攻击的本质与原理 ** 分布式拒绝服务攻击&#xff08;DDoS&#xff09;** 通过操控海量僵尸设备&#xff0c;向目标服务器发送洪水般请求&#xff0c;耗尽带宽、连接或计算资源&#xff0c;导致合法用户无法访…

Circular Plot系列(一): 环形热图绘制

针对近期多个粉丝咨询环形图的绘制&#xff0c;我意识到&#xff0c;我们似乎没有真正介绍过circle图&#xff0c;但这一类图确是非常常用的图&#xff0c;所以这里详细学习一下circle的绘制&#xff0c;使用的是circlize包&#xff0c;功能很完善&#xff1a;安装包, #https:/…

【数据挖掘】时间序列预测-时间序列预测策略

时间序列预测策略 &#xff08;1&#xff09;单步预测与多步预测&#xff08;2&#xff09;直接多步预测&#xff08;3&#xff09;递归多步预测&#xff08;4&#xff09;直接递归的混合预测&#xff08;5&#xff09;多输入多输出预测 &#xff08;1&#xff09;单步预测与多…

【LLM】deepseek R1之GRPO训练笔记(持续更新)

note 相关框架对比&#xff1a; 需微调模型且资源有限 → Unsloth&#xff1b;本地隐私优先的小规模推理 → Ollama&#xff1b;复杂逻辑或多模态任务 → SGLang&#xff1b;高并发生产环境 → vLLM 微调SFT和GRPO是确实能学到新知识的四种格式&#xff08;messages、sharegpt…