复合梯形公式、复合辛普森公式 matlab
1. 用1阶至4阶Newton-Cotes公式计算积分
程序:
function I = NewtonCotes(f,a,b,type)
%
syms t;
t=findsym(sym(f));
I=0;
switch type
case 1,
I=((b-a)/2)*(subs(sym(f),t,a)+subs(sym(f),t,b));
case 2,
I=((b-a)/6)*(subs(sym(f),t,a)+4*subs(sym(f),t,(a+b)/2)+...
subs(sym(f),t,b));
case 3,
I=((b-a)/8)*(subs(sym(f),t,a)+3*subs(sym(f),t,(2*a+b)/3)+...
3*subs(sym(f),t,(a+2*b)/3)+subs(sym(f),t,b));
case 4,
I=((b-a)/90)*(7*subs(sym(f),t,a)+...
32*subs(sym(f),t,(3*a+b)/4)+...
12*subs(sym(f),t,(a+b)/2)+...
32*subs(sym(f),t,(a+3*b)/4)+7*subs(sym(f),t,b));
case 5,
I=((b-a)/288)*(19*subs(sym(f),t,a)+...
75*subs(sym(f),t,(4*a+b)/5)+...
50*subs(sym(f),t,(3*a+2*b)/5)+...
50*subs(sym(f),t,(2*a+3*b)/5)+...
75*subs(sym(f),t,(a+4*b)/5)+19*subs(sym(f),t,b));
case 6,
I=((b-a)/840)*(41*subs(sym(f),t,a)+...
216*subs(sym(f),t,(5*a+b)/6)+...
27*subs(sym(f),t,(2*a+b)/3)+...
272*subs(sym(f),t,(a+b)/2)+...
27*subs(sym(f),t,(a+2*b)/3)+...
216*subs(sym(f),t,(a+5*b)/6)+...
41*subs(sym(f),t,b));
case 7,
I=((b-a)/17280)*(751*subs(sym(f),t,a)+...
3577*subs(sym(f),t,(6*a+b)/7)+...
1323*subs(sym(f),t,(5*a+2*b)/7)+...
2989*subs(sym(f),t,(4*a+3*b)/7)+...
2989*subs(sym(f),t,(3*a+4*b)/7)+...
1323*subs(sym(f),t,(2*a+5*b)/7)+...
3577*subs(sym(f),t,(a+6*b)/7)+751*subs(sym(f),t,b));
end
syms x
f=exp(-x).*sin(x);
a=0;b=2*pi;
I = NewtonCotes(f,a,b,1)
N=1:
I =
0
N=2:
I =
0
N=3:
I =
(pi*((3*3^(1/2)*exp(-(2*pi)/3))/2 - (3*3^(1/2)*exp(-(4*pi)/3))/2))/4
N=4:
I =
(pi*(32*exp(-pi/2) - 32*exp(-(3*pi)/2)))/45
2. 已知,因此可以通过数值积分计算的近似值。
(1)分别取和,利用复合梯形公式和复合Simpson公式计算的近似值;
程序:
function Y= CombineTraprl(f,a,b,h)
%用复合梯形公式计算积分
syms t;
t= findsym(sym(f));
n=(b-a)/h;
I1= subs(sym(f),t,a);
l=0;
for k=1:n-1
xk=a+h*k;
l=l+2*subs(sym(f),t,xk);
end
Y=(h/2)*(I1+l+subs(sym(f),t,b));
syms x
f=4/(1+x^2);
a=0;b=1;
y= CombineTraprl(f,a,b,0.1);
vpa(y,6)
h=0.1:
ans =
3.13993
H=0.2:
ans =
1.04498
复合辛普森:
function Y= CombineSimpson(f,a,b,h)
%用复合辛普森公式计算积分
syms t;
t= findsym(sym(f));
n=(b-a)/h;
I1= subs(sym(f),t,a);
l=0;
for k=1:n-1
xk=a+h*k;
l=l+2*subs(sym(f),t,xk);
end
l2=0;
for k=1:n-1
xk2=a+h*(k+1)/2;
l2=l2+4*subs(sym(f),t,xk2);
end
Y=(h/6)*(I1+l+l2+subs(sym(f),t,b));
H=0.1:
ans =
3.22605
H=0.2:
ans =
2.93353
(2)把区间[0,1] 等分,利用复合梯形公式和复合Simpson公式计算的近似值,若要求误差不超过,问需要把区间[0,1]划分成多少等份;
function n=trap(f,a,b)
syms t;
t= findsym(sym(f));
I=zeros(1,500);
I(1)=((b-a)/2)*(subs(sym(f),t,a)+subs(sym(f),t,b));
I(2)=((b-a)/4)*(subs(sym(f),t,a)+2*subs(sym(f),t,(b-a)/2)+subs(sym(f),t,b));
k=3;
while((I(k-1)-I(k-2))>1/2*10^(-6))
l=0;
for i=1:k-1
xi=a+(b-a)/k*i;
l=l+2*subs(sym(f),t,xi);
end
I(k)=((b-a)/(2*k))*(subs(sym(f),t,a)+l+subs(sym(f),t,b));
k=k+1;
end
n=k-1;
syms x;
f=4./(1+x.^2);
a=0;b=1;
n=trap(f,a,b)
n =
88
复合辛普森公式:
function n=Simpson(f,a,b)
syms t;
t= findsym(sym(f));
I=zeros(1,500);
I(1)=((b-a)/6)*(subs(sym(f),t,a)+4*subs(sym(f),t,(b-a)/2)+subs(sym(f),t,b));
I(2)=((b-a)/12)*(subs(sym(f),t,a)+4*subs(sym(f),t,(b-a)/4)+4*subs(sym(f),t,3*(b-a)/4)+2*subs(sym(f),t,(b-a)/2)+subs(sym(f),t,b));
k=3;
while((I(k-1)-I(k-2))>1/2*10^(-6))
l=0;
m=4*subs(sum(f),t,(a+((a+b)/(2*k))));
for i=1:k-1
xi=a+(b-a)/k*i;
l=l+2*subs(sym(f),t,xi);
end
for j=1:k-1
xj=a+(b-a)/(k*2)+(b-a)/k*j;
m=m+4*subs(sym(f),t,xj);
end
I(k)=((b-a)/(2*k))*(subs(sym(f),t,a)+l+m+subs(sym(f),t,b));
k=k+1;
end
n=k-1;
n =
5
(3)选择不同的,对两种复合求积公式,试将误差描述为的函数,并比较两种方法的精度。
复合求积公式:
function y=traprls(f,a,b,h)
syms t;
t= findsym(sym(f));
n=(b-a)/h;
l=0;
for k=1:n-1
xk=a+h*k;
l=l+2*subs(sym(f),t,xk);
end
I1=(h/2)*(subs(sym(f),t,a)+l+subs(sym(f),t,b));
h=(b-a)/(n-1);
n=(b-a)/h;
l=0;
for k=1:n-1
xk=a+h*k;
l=l+2*subs(sym(f),t,xk);
end
I2=(h/2)*(subs(sym(f),t,a)+l+subs(sym(f),t,b));
y=I2-I1;
y=abs(y);
y=vpa(y,8);
syms x;
f=4./(1+x.^2);
a=0;b=1;
h=0.01:0.05:0.5;
v=zeros(1,10);
for i=1:10
v(i)=traprls(f,a,b,h(i))
end
v
plot(h,v,'r-')
复合辛普森公式:
function y=Simpsons(f,a,b,h)
syms t;
t= findsym(sym(f));
n=(b-a)/h;
l=0;
m=4*subs(sum(f),t,(a+h/2));
for k=1:n-1
xk=a++h*k;
l=l+2*subs(sym(f),t,xk);
end
for i=1:n-1
xi=a+h/2+h*i;
m=m+4*subs(sym(f),t,xi);
end
I1=(h/6)*(subs(sym(f),t,a)+l+m+subs(sym(f),t,b));
h=(b-a)/(n-1);
n=(b-a)/h;
l=0;
m=4*subs(sum(f),t,(a+h/2));
for k=1:n-1
xk=a++h*k;
l=l+2*subs(sym(f),t,xk);
end
for i=1:n-1
xi=a+h/2+h*i;
m=m+4*subs(sym(f),t,xi);
end
I2=(h/6)*(subs(sym(f),t,a)+l+m+subs(sym(f),t,b));
y=abs(I2-I1);
y=vpa(y,10);
通过图像对比可知,复合辛普森公式精度更高。
(4)是否存在某个值,当小于这个值之后,再继续减小,计算结果不再有改进?为什么?
是
复合求积公式:
syms x;
f=4./(1+x.^2);
a=0;b=1;
h=0.001:0.004:0.2;
v=zeros(1,10);
for i=1:50
v(i)=traprls(f,a,b,h(i));
end
plot(h,v,'r-')
复合辛普森公式:
通过图像可以发现,当h<0.025后,精度不再有显著改变。
3. 分别用三点和五点Gauss-Legendre公式计算积分
程序:
function I = IntGaussLegen(f,a,b,n)
syms t;
t= findsym(sym(f));
ta = (b-a)/2;
tb = (a+b)/2;
switch n
case 0,
I=2*ta*subs(sym(f),t,tb);
case 1,
I=ta*(subs(sym(f),t,ta*0.5773503+tb)+...
subs(sym(f),t,-ta*0.5773503+tb));
case 2,
I=ta*(0.55555556*subs(sym(f),t,ta*0.7745967+tb)+...
0.55555556*subs(sym(f),t,-ta*0.7745967+tb)+...
0.88888889*subs(sym(f),t,tb));
case 3,
I=ta*(0.3478548*subs(sym(f),t,ta*0.8611363+tb)+...
0.3478548*subs(sym(f),t,-ta*0.8611363+tb)+...
0.6521452*subs(sym(f),t,ta*0.3398810+tb) +...
0.6521452*subs(sym(f),t,-ta*0.3398810+tb));
case 4,
I=ta*(0.2369269*subs(sym(f),t,ta*0.9061793+tb)+...
0.2369269*subs(sym(f),t,-ta*0.9061793+tb)+...
0.4786287*subs(sym(f),t,ta*0.5384693+tb) +...
0.4786287*subs(sym(f),t,-ta*0.5384693+tb)+...
0.5688889*subs(sym(f),t,tb));
case 5,
I=ta*(0.1713245*subs(sym(f),t,ta*0.9324695+tb)+...
0.1713245*subs(sym(f),t,-ta*0.9324695+tb)+...
0.3607616*subs(sym(f),t,ta*0.6612094+tb)+...
0.3607616*subs(sym(f),t,-ta*0.6612094+tb)+...
0.4679139*subs(sym(f),t,ta*0.2386292+tb)+...
0.4679139*subs(sym(f),t,-ta*0.2386292+tb));
end
I=simplify(I);
I=vpa(I,6);
三点:
syms x
f=x.*exp(x)./((1+x)^2);
a=0;b=1;
a=IntGaussLegen(f,a,b,2)
a =
0.359187
五点:
a =
0.359141
复合梯形公式、复合辛普森公式 matlab的更多相关文章
- C语言复合梯形公式实现定积分
假设被积函数为 f x ,积分区间为 , a b ,把区间 , a b 等分成 n 个小区间, 各个区间的长度为 h ,即 / h b a n ,称之为“步长” ...
- 复合梯形公式与Simpson公式的数值积分
#include <iostream>#include<math.h>#include<stdio.h>using namespace std; float f(f ...
- MATLAB数学实验总结
L1 MATLAB 基础知识 P6 表1-3 数据显示格式 format rat format long P20 表2-5 常用的矩阵函数 zeros(m,n) %零阵 eye(n) %单位阵 one ...
- [Beautifulzzzz的博客目录] 快速索引点这儿O(∩_∩)O~~,红色标记的是不错的(⊙o⊙)哦~
3D相关开发 [direct-X] 1.direct-X最小框架 [OpenGL] 1.环境搭建及最小系统 [OpenGL] 2.企业版VC6.0自带的Win32-OpenGL工程浅析 51单片机 [ ...
- C语言实现定积分求解方法
求定积分的方法有很多种,下面是我总结的几种比较常用的方法. #include <stdio.h> #include <stdlib.h> #include <math.h ...
- deep learning (六)logistic(逻辑斯蒂)回归中L2范数的应用
zaish上一节讲了线性回归中L2范数的应用,这里继续logistic回归L2范数的应用. 先说一下问题:有一堆二维数据点,这些点的标记有的是1,有的是0.我们的任务就是制作一个分界面区分出来这些点. ...
- 数值积分之Simpson公式与梯形公式
Simpson(辛普森)公式和梯形公式是求数值积分中很重要的两个公式,可以帮助我们使用计算机求解数值积分,而在使用过程中也有多种方式,比如复合公式和变步长公式.这里分别给出其简单实现(C++版): 1 ...
- 数值积分:基于牛顿-柯茨公式的定步长和自适应积分方法 [MATLAB]
#先上代码后补笔记# #可以直接复制粘贴使用的MATLAB函数!# 1. 定步长牛顿-柯茨积分公式 function [ integration ] = CompoInt( func, left, r ...
- 卷积相关公式的matlab代码
取半径=3 用matlab代码实现上式公式: length=3;for Ki = 1:length for Kj = 1:length for Kk = 1:length Ksigma(Ki,Kj,K ...
随机推荐
- Python模块: 命令行解析optionparser
Python 有两个内建的模块用于处理命令行参数:一个是 getopt,<Deep in python>一书中也有提到,只能简单处理 命令行参数:另一个是 optparse,它功能强大,而 ...
- 并发编程之 ConcurrentLinkedQueue 源码剖析
前言 今天我们继续分析 java 并发包的源码,今天的主角是谁呢?ConcurrentLinkedQueue,上次我们分析了并发下 ArrayList 的替代 CopyOnWriteArrayList ...
- 百度地图API,根据经纬度实现车辆移动轨迹绘制
百度地图,实现车辆轨迹绘制 实现思路: 1.根据经纬度实现车辆轨迹绘制 2.使用百度地图API的两个覆盖物实现,Polyline(折线)绘制轨迹,Marker(图标)绘制小车图标 3.将每两个坐标间连 ...
- 批处理TOMCAT8.0自动重启任务
@echo title tomcat重启 set num=7001 //端口号,根据tomcat的设置项设置set JAVA_HOME=D:\software\Java\jdk1.8.0_131 / ...
- 撩课-Web大前端每天5道面试题-Day32
1.module.export.import是什么,有什么作用? module.export.import是ES6用来统一前端模块化方案的设计思路和实现方案. export.import的出现统一了前 ...
- Hadoop在启动时的坑——start-all.sh报错
1.若你用的Linux系统是CentOS的话,这是一个坑: 它会提示你JAVA_HOME找不到,现在去修改文件: .修改hadoop配置文件,手动指定JAVA_HOME环境变量 [${hadoop_h ...
- OpenStack的架构详解[精51cto]
OpenStack既是一个社区,也是一个项目和一个开源软件,它提供了一个部署云的操作平台或工具集.其宗旨在于,帮助组织运行为虚拟计算或存储服务的云,为公有云.私有云,也为大云.小云提供可扩展的.灵活的 ...
- PHP中NOTICE错误常见解决方法
对于初学者,肯定会遇到不同的错误提示,比如:警告,致命,等等,其中NOTICE错误等级最低,页面中,好多类似 Notice: Use of undefined constant title - ass ...
- 排序算法(4)--Selection Sorting--选择排序[1]--Simple Selection Sort--简单(直接)选择排序
1.基本思想 在要排序的一组数中,选出最小的一个数与第一个位置的数交换:然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止. 2.实现原理 每趟从待排序的 ...
- Javascript 函数及其执行环境和作用域
函数在javascript中可以说是一等公民,也是最有意思的事情,javascript函数其实也是一个对象,是Function类型的实例.因此声明一个函数首先可以使用 Function构造函数: va ...