MATLAB积分 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
% 注:在编写完代码后,要按如下图红色箭头所指处运行程序才会有输出!
MATLAB中主要用int进行符号积分,用trapz、dblquad、quad、quad8等进行数值积分。
MATLAB 可以用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
优势特点
1) 高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;
2) 具有完备的图形处理功能,实现计算结果和编程的可视化;
3) 友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;
4) 功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。
扩展资料:
Matlab是一个高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好一个较大的复杂的应用程序(M文件)后再一起运行。
新版本的MATLAB语言是基于最为流行的C++语言基础上的,因此语法特征与C++语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式。使之更利于非计算机专业的科技人员使用。而且这种语言可移植性好、可拓展性极强,这也是MATLAB能够深入到科学研究及工程计算各个领域的重要原因。
说明
1、题目的条件在这里说的不清楚,楼主提问之后发私信向我求助,很多信息都是在私信交流的。为便于其他人阅读,我把主要条件说明如下:
(1)表达式中的Ωu=2.145e-3*tan(θ),楼主希望的是求gb与θ之间的关系。
(2)有关系数如代码中所示,不再赘述。
(3)J0和J1分别表示0阶和1阶第一类bessel函数。
2、θ的取值为0~50,我是按照角度(而不是弧度)理解的。
3、式中的积分表达式用常用的函数如quad、quadl都会遇到问题,因为这些函数的迭代执行次数是固定写在程序中的(10000次),无法修改,导致计算精度不够。而quadgk提供了更多选项,能够满足这里的要求。
下面是几种函数的计算结果对比(θ取50度):
>> quad( @(u) besselj(0,u).^2*besselj(0,oumu).*u,0,k01*a)
Warning: Maximum function count exceeded; singularity likely.
> In quad at 106
ans =
2439.5
>> quadl( @(u) besselj(0,u).^2*besselj(0,oumu).*u,0,k01*a)
Warning: Maximum function count exceeded; singularity likely.
> In quadl at 104
ans =
3473.4
>> quadgk( @(u) besselj(0,u).^2*besselj(0,oumu).*u,0,k01*a,'MaxIntervalCount',1e5)
ans =
3387.5
>> syms u
>> I=int(besselj(0,u)^2*besselj(0,oumu)*u,0,k01*a);
>> vpa(I)
ans =
3387.4806929786229142471940788763
最后一种方法是使用符号数学工具箱的int、vpa函数计算,精度最高,但耗时较长。可以看到,quadgk在设置足够的迭代次数后能够提供高精度的结果,而quad和quadl误差较大,而且会导致警告信息。
参考代码
a = 2.625e-3;
b01 = 0.5;
k01 = 4.054e6;
T = 0 : 5 : 50;
G = zeros(size(T));
for i = 1:length(T)
theta = T(i) *pi/180;
oumu = 2.145e-3*tan(theta);
I = quadgk( @(u) besselj(0,u).^2*besselj(0,oumu).*u,0,k01*a,'MaxIntervalCount',1e5);
gb = 2*b01 * I / ( (k01*a)^2 * bessel(1,k01*a)^2 );
G(i) = gb;
end
plot(T,G)
xlabel('heta')
ylabel('g_b')