如何用matlab求积分
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用matlab求积分相关的知识,希望对你有一定的参考价值。
1、在matlab中,积分运算有多种方式,为了便于查看不同方式处理异同,以下面这个积分为例:
2、梯形积分法
第一种,采用最简单的方式,以函数trapz为例,z = trapz(x,y) 其中x表示积分区间的离散化向量,y是与x同维数的向量,表示被积函数,z是返回的积分近似值。
clc;clear;
% 梯形积分法
x = -1:0.001:1;
y = exp(-x.^2);
s = trapz(x,y)
% 计算结果: s = 1.4936
3、高精度数值积分(1)
为了克服梯形积分法精度低的问题,可以采用高精度积分方式,第一种可以采用 z = quad(Fun,a,b) 该方式是自适应步长Simpson计分法求得函数Fun在区间[a,b]上定积分,如下:
clc;clear;
% 梯形积分法
s = quad(inline(\'exp(-x.^2)\'),-1,1)
% 计算结果: s = 1.4936
4、高精度数据积分(2)
采用高精度Lobatto积分法,格式: z = quadl(Fun,a,b)
clc;clear;
% 梯形积分法
s = quadl(inline(\'exp(-x.^2)\'),-1,1)
% 计算结果: s = 1.4936
% 注:在编写完代码后,要按如下图红色箭头所指处运行程序才会有输出!
参考技术A使用int函数即可。
函数由integrate缩写而来,int 函数表达式,变量,积分上限,积分下限。
举例:求一个Fx = a*x^2,在区间(0,1)对x进行积分。
首先要将 m,x,a,b 这四个变量定义为符号变量。
syms m x a b;
Fx = a*x^2;
int(Fx,x,0,1)
扩展资料:
matlab数值积分中函数积分的几种方法:
1、采用inline内联函数
Matlab中可以有采用几种不同的方式来指定被积函数。对于简单的、长度不超过一行的公式采用inline命令比较方便。
例如:可用下面的语句进行计算
>> f=inline('1/sqrt(1+x^4)') %采用inline内联函数
2、特殊点不可积函数,采用realmin
如果我们想要计算,可能使用下面的语句
>> f=inline('sin(x)/x')
3、依赖于参数的积分
一个典型的例子是β函数,它定义为matlab中已经实现了一个现成的β函数,但我们可以以它为例,说明如何处理积分中的参数。创建一个带三个参数的内联函数
>> F=inline('t^(z-1)*(1-t)^(w-1)','t','z','w')
符号积分由函数int来实现。该函数的一般调用格式为:
int(s):没有指定积分变量和积分阶数时,系统按findsym函数指示的默认变量对被积函数或符号表达式s求不定积分;
int(s,v):以v为自变量,对被积函数或符号表达式s求不定积分;
int(s,v,a,b):求定积分运算。a,b分别表示定积分的下限和上限。该函数求被积函数在区间[a,b]上的定积分。a和b可以是两个具体的数,也可以是一个符号表达式,还可以是无穷(inf)。当函数f关于变量x在闭区间[a,b]上可积时,函数返回一个定积分结果。当a,b中有一个是inf时,函数返回一个广义积分。当a,b中有一个符号表达式时,函数返回一个符号函数。
2.数值积分的实现方法
基于变步长辛普生法,MATLAB给出了quad函数来求定积分。该函数的调用格式为:
[I,n]=quad('fname',a,b,tol,trace)
基于变步长、牛顿-柯特斯(Newton-Cotes)法,MATLAB给出了quadl函数来求定积分。该函数的调用格式为:
[I,n]=quadl('fname',a,b,tol,trace)
其中fname是被积函数名。a和b分别是定积分的下限和上限。tol用来控制积分精度,缺省时取tol=0.001。trace控制是否展现积分过程,若取非0则展现积分过程,取0则不展现,缺省时取trace=0。返回参数I即定积分值,n为被积函数的调用次数。 参考技术C
于无法求得exp(x^2)的原函数,我们只能用数值算法来求解,可以用复化梯形公式、Romberg公式、Gauss公式等,有好多种。我用Matlab编了一个用Gauss公式求解积分的函数。
function S=GaussIntegrate()
%运用Gauss求积公式计算数值积分
%f为被积函数,Rho为权函数,二者均为符号函数
x=sym('x');
f=exp(x^2);
Rho=1;
%a,b分别为求积区间的左界和右界
a=1;
b=2;
%n表示求积结点的个数,是一正整数
n=8;
%本程序利用线性变换将区间[a,b]变换到[-1.1],
%同时令g=f*Rho为被积函数,然后利用
%古典的Gauss求积公式进行计算,此时直交多项式即为Legendre多项式
if n=0||n~=floor(n)
error('错误,n必须是一个非负整数!');
end;
if a>b
error('错误,区间的左界a一定不大于右界b!');
end;
%计算n次Legendre多项式
syms x;
P=1/(2^n*factorial(n))*diff((x^2-1)^n,n);
w=roots(sym2poly(P));
%计算数值积分
A=zeros(1,n);
S=0;
for k=1:n
A(k)=2/((1-w(k)^2)*(subs(diff(P),w(k))^2));
t=a+(b-a)/2*(w(k)+1);
g=(b-a)/2*subs(f*Rho,t);
S=S+A(k)*g;
end;
--------------------------------
我取了8个结点,计算精度就已经达到了小数点后8位,效率还是很高的。
注意:由于Matlab调用Maple的符号计算工具箱,第一次运行时会加载一小会,耐心等待。
以后再运行速度就很快了。
本回答被提问者采纳 参考技术D
以下列函数为例
求函数x^2+y^2+z^2的三重积分。内积分上下限都是函数,对z积分下限是sqrt(x*y),积分上限是x^2*y;对y积分下限是sqrt(x),积分上限是x^2;对x的积分下限1,上限是2,求解如下:
>>syms x y z%定义符号变量
>>F2=int(int(int(x^2+y^2+z^2,z,sqrt(x*y),x^2*y),y,sqrt(x),x^2),x,1,2) %注意定积分的书写格式
F2=
1610027357/6563700-6072064/348075*2^(1/2)+14912/4641*2^(1/4)+6 4/225*2^(3/4)%给出有理数解
>>VF2=vpa(F2)%给出默认精度的数值解
VF2=
224.92153573331143159790710032805
二、数值积分
1.数值积分基本原理
求解定积分的数值方法多种多样,如简单的梯形法、辛普生(Simpson) 法、牛顿-柯特斯(Newton-Cotes)法等都是经常采用的方法。它们的基本思想都是将整个积分区间[a,b]分成n个子区间[xi,xi+1],i=1,2,…,n,其中x1=a,xn+1=b。这样求定积分问题就分解为求和问题。
2.数值积分的实现方法
基于变步长辛普生法,MATLAB给出了quad函数来求定积分。该函数的调用格式为:
[I,n]=quad('fname',a,b,tol,trace)
基于变步长、牛顿-柯特斯(Newton-Cotes)法,MATLAB给出了quadl函数来求定积分。该函数的调用格式为:
[I,n]=quadl('fname',a,b,tol,trace)
其中fname是被积函数名。a和b分别是定积分的下限和上限。tol 用来控制积分精度,缺省时取tol=0.001。trace控制是否展现积分过程,若取非0则展现积分过程,取0则不展现,缺省时取trace=0。返回参数I即定积分值,n为被积函数的调用次数。百度文库
如何用matlab求周期函数的频谱?
参考技术A 使用fft函数,就是傅里叶变换 参考技术B fft(function)以上是关于如何用matlab求积分的主要内容,如果未能解决你的问题,请参考以下文章