没有合适的资源?快使用搜索试试~ 我知道了~
(整理)Matlab积分..pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 15 浏览量
2021-09-14
16:14:54
上传
评论
收藏 503KB PDF 举报
温馨提示
试读
20页
。。。
资源推荐
资源详情
资源评论
精品文档
一.数值积分的实现方法
1.变步长辛普生法
基于变步长辛普生法,MATLAB 给出了 quad 函数来求定积分。该函数的调用格式为:
[I,n]=quad('fname',a,b,tol,trace)
其中 fname 是被积函数名。a 和 b 分别是定积分的下限和上限。tol 用来控制积分精度,
缺省时取 tol=0.001。trace 控制是否展现积分过程,若取非 0 则展现积分过程,取 0 则不展
现,缺省时取 trace=0。返回参数 I 即定积分值,n 为被积函数的调用次数。
例 8-1 求定积分。
(1) 建立被积函数文件 fesin.m。
function f=fesin(x)
f=exp(-0.5*x).*sin(x+pi/6);
(2) 调用数值积分函数 quad 求定积分。
[S,n]=quad('fesin',0,3*pi)
S = 0.9008
n = 77
2.牛顿-柯特斯法
基于牛顿-柯特斯法,MATLAB 给出了 quad8 函数来求定积分。该函数的调用格式为:
[I,n]=quad8('fname',a,b,tol,trace)
其中参数的含义和 quad 函数相似,只是 tol 的缺省值取 10-6。•该函数可以更精确地求
出定积分的值,且一般情况下函数调用的步数明显小于 quad 函数,从而保证能以更高的效
率求出所需的定积分值。
(1) 被积函数文件 fx.m。
function f=fx(x)
f=x.*sin(x)./(1+cos(x).*cos(x));
(2) 调用函数 quad8 求定积分。
I=quad8('fx',0,pi)
I = 2.4674
分别用 quad 函数和 quad8 函数求定积分的近似值,并在相同的积分精度下,比较函数
的调用次数。
调用函数 quad 求定积分:
format long;
fx=inline('exp(-x)');
[I,n]=quad(fx,1,2.5,1e-10)
I = 0.28579444254766
n = 65
调用函数 quad8 求定积分:
format long;
fx=inline('exp(-x)');
[I,n]=quad8(fx,1,2.5,1e-10)
I = 0.28579444254754
n = 33
精品文档
精品文档
3.被积函数由一个表格定义
在 MATLAB 中,对由表格形式定义的函数关系的求定积分问题用 trapz(X,Y)函数。其
中向量 X,Y 定义函数关系 Y=f(X)。
用 trapz 函数计算定积分。
命令如下:
x=1:0.01:2.5;
Y=exp(-X); %生成函数关系数据向量
trapz(X,Y)
ans = 0.28579682416393
8.1.3 二重定积分的数值求解
使用 MATLAB 提供的 dblquad 函数就可以直接求出上述二重定积分的数值解。该函数
的调用格式为:
I=dblquad(f,a,b,c,d,tol,trace)
该函数求 f(x,y)在[a,b]×[c,d]区域上的二重定积分。参数tol,trace 的用法与函数 quad 完
全相同。
计算二重定积分
(1) 建立一个函数文件 fxy.m:
function f=fxy(x,y)
global ki;
ki=ki+1; %ki 用于统计被积函数的调用次数
f=exp(-x.^2/2).*sin(x.^2+y);
(2) 调用 dblquad 函数求解。
global ki;ki=0;
I=dblquad('fxy',-2,2,-1,1)
ki
I = 1.57449318974494
ki = 1038
二.数值微分
数值微分的实现
在 MATLAB 中,没有直接提供求数值导数的函数,只有计算向前差分的函数 diff,其
调用格式为:
DX=diff(X):计算向量 X 的向前差分,DX(i)=X(i+1)-X(i),i=1,2,…,n-1。
DX=diff(X,n):计算 X 的 n 阶向前差分。例如,diff(X,2)=diff(diff(X))。
DX=diff(A,n,dim):计算矩阵 A 的 n 阶差分,dim=1 时(缺省状态),按列计算差分;dim=2,
按行计算差分。
生成以向量 V=[1,2,3,4,5,6]为基础的范得蒙矩阵,按列进行差分运算。
命令如下:
V=vander(1:6)
DV=diff(V) %计算 V 的一阶差分
精品文档
精品文档
例 8-7 用不同的方法求函数 f(x)的数值导数,并在同一个坐标系中做出 f'(x)的图像。
程序如下:
f=inline('sqrt(x.^3+2*x.^2-x+12)+(x+5).^(1/6)+5*x+2');
g=inline('(3*x.^2+4*x-1)./sqrt(x.^3+2*x.^2-x+12)/2+1/6./(x+5).^(5/6)+5');
x=-3:0.01:3;
p=polyfit(x,f(x),5); %用 5 次多项式 p 拟合 f(x)
dp=polyder(p); %对拟合多项式 p 求导数 dp
dpx=polyval(dp,x); %求 dp 在假设点的函数值
dx=diff(f([x,3.01]))/0.01; %直接对 f(x)求数值导数
gx=g(x); %求函数 f 的导函数 g 在假设点的导数
plot(x,dpx,x,dx,'.',x,gx,'-'); %作图
Matlab 数值积分的一些做法
Filed under: 未分类 — franz @ 9:31 pm
今天是元宵节,突然来讲 Matlab 的确很奇怪,连我自己也这样感觉.
由于 Matlab 对于计算过程的细节要求定义详细,往往让人觉得使用不方便.与同样很流行
的 Mathematic 相比,Matlab 更象是程序,而不是象 Mathematic 那么直观的写作业.
Matlab 同样提供符号积分(不定积分)和数值积分(定积分)两大功能.符号积分使用 int
命令,配合之前的函数定义使用.比如:
a=…;
b=…;
function f = fun(x)
f=a*x^2+b;
将此文件寸为一个单独 m 文件,再在主程序中调用即可:
F = int(fun,c,d);
c 和 d 为积分上下限,通常为符号,可使用 syms c;语句定义。在完成符号积分之后可以对其
附值,则就完成了数值积分的任务.
有一点需要注意的是,通过这样过程求的数值,其格式为符号格式’ sym’,不能做图,不
能和数值进行运算.处理方法是:
vpa (F); 求得32位符号近似解,再用 double ( vpa (F) ); 将其转换成 Matlab 默认的双精度
精品文档
精品文档
位数就可以.注意,直接做 double (F) 行不通,Matlab 会提示你"Conversion from sym to
double is not possible",不知道"not possbile"和"impossible"有什么区别,呵呵.
符号积分中一个最大的问题在于存在不可积的函数,比如十分常用的 Boltzman 分布,或者
叫 Arrhenius 公式:exp(- q*V/ (k *T )).
插句话,我一直以为 Arrhenius 是德国人,知道前几天在和老师讨论中讲起,我老师很自豪
的对我说,有个著名的瑞典化学家,得过 Noble Prize,叫 Arrhenius 你知道不知道,才发现
这个小问题,3滴汗,搞的我老师也很有挫败感...
对于不可积的函数,使用 int 命令之后,得到的表达式中会含有 Ei 项,其本身也是一个
函数,以你给定的符号积分上下限为变量.在含有 Ei 项后,对符号上下限附值亦无法得
到数值积分解,因为 Ei 项也需要解.解 Ei 项的方法如下:
result = str2num (maple(‘evalf(Ei(a,b))’));
%此语句可以直接使用,其中的 a 和 b 就是你所要解数值解的积分上下限,并且只能是具体
数值,不能为符号.
若是积分上限或者下限是一个变化的值 (比如今天我做的一个很简单的计算就是这样的情
况),则可以使用以下的方法:
>> result=maple(‘evalf’,'(Ei(1,y))’)
result =Ei(1,y)
>> y=2
y = 2
>> result=subs(result)
result =Ei(1,2)
>> result=vpa(result)
result =.48900510708061119567239835228050e-1
>> result=str2num(maple(‘evalf’,'(Ei(1,2))’))
result = 0.0489
比如其中的 y 就可以是一个变化的值,写成一个循环,从而计算相应的积分值.
Matlab 也直接提供两种主要的数值积分函数:quad 和 quad8.quad 是变步长辛普生法,
精品文档
剩余19页未读,继续阅读
资源评论
苦茶子12138
- 粉丝: 1w+
- 资源: 6万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于C和C++的二维绘制工具设计源码 - DrawPro
- Object.defineProperty 的 IE 补丁object-defineproperty-ie-master.zip
- 整卷预览.mhtml
- MySQL是一种广泛使用的开源关系型数据库管理系统,它提供了丰富的SQL语句用于数据库的创建、查询、更新和管理 以下是一些常见的
- MySQL是一种广泛使用的开源关系型数据库管理系统,它提供了丰富的SQL语句用于数据库的创建、查询、更新和管理 以下是一些常见
- MySQL是一种广泛使用的开源关系型数据库管理系统,它提供了丰富的SQL语句用于数据库的创建、查询、更新和管理 以下是一些常见的
- 基于Javascript的结婚请帖设计源码 - Invitation
- mysql语句大全及用法
- mysql语句大全及用法
- mysql语句大全及用法
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功