matlab编程怎么求无穷限定积分

matlab编程怎么求无穷限定积分,第1张

matlab编程求无穷限定积分

用如下程序:

syms x

f = exp(-x^2);

int(f, x, 0, inf)

结果是pi^(1/2)/2,即2分之根号派

MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。

MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。

它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。

MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。

MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。

MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C、FORTRAN等语言完成相同的事情简捷得多。

并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。

下面是使用龙贝格算法求积分的matlab程序代码

clear

clc

format

long

f='4/(1+x^2)';

%这是被积函数

x='x';

%这是被积自变量

a=0;

%这是积分下限

b=1;

%这是积分上限

e=1e-5;

%这是积分误差限制

%以下是龙贝格积分算法,是目前最为成熟的积分算法,具有收敛速度快,精度可以自定义的优点

%

I为积分的估计值

%

n为迭代次数,2^(n-1)是等分区间的份数

T(1,1)=(b-a)/2(subs(f,x,a)+subs(f,x,b));

T=double(T);

n=2;

h=b-a;

T(2,1)=T(1,1)/2+h/2double(subs(f,x,a+h/2));

T(2,2)=4/3T(2,1)-1/3T(1,1);

d=T(2,2)-T(1,1);

while

d>e

n=n+1;

h=h/2;

T(n,1)=T(n-1,1)/2;

for

i=1:2^(n-2)

T(n,1)=T(n,1)+h/2double(subs(f,x,a+(i-1/2)h));

end

for

i=2:n

k=4^(i-1);

T(n,i)=k/(k-1)T(n,i-1)-1/(k-1)T(n-1,i-1);

end

d=abs(T(n,n)-T(n-1,n-1));

end

I=T(n,n)

%输出计算值

望采纳!谢谢!

用截面法来求解:

∭dxdydz=

∫(0,1)dz∬dxdy

显然,∬dxdy为曲面上的截面面积

x^du2+y^2=z

则截面为半径为√z的圆,则

∬dxdy=πz

则原式=

∫(0,1) πzdz

=π/2z^2|(0,1)

=π/2

或者

作变换x=rcosu,y=rsinu,则dxdy=rdrdu,

原式=∫<0,2π>du∫<0,1>rdr∫<r^2,1>dz

=2π∫<0,1>r(1-r^2)dr

=π/2

扩展资料:

适用于被积区域Ω不含圆形的区域,且要注意积分表达式的转换和积分上下限的表示方法

⑴先一后二法投影法,先计算竖直方向上的一竖条积分,再计算底面的积分。

①区域条件:对积分区域Ω无限制;

②函数条件:对f(x,y,z)无限制。

⑵先二后一法(截面法):先计算底面积分,再计算竖直方向上的积分。

①区域条件:积分区域Ω为平面或其它曲面(不包括圆柱面、圆锥面、球面)所围成

②函数条件:f(x,y)仅为一个变量的函数。

参考资料来源:百度百科-三重积分

符号数学工具箱中,表达式的积分有函数int实现,其调用格式为:

int(S) 求符号表达式S对于默认自变量的不定积分。

int(S,v) 求符号表达式S对于自变量v的不定积分。

int(S,a,b) 求符号表达式S对于默认自变量从a到b的定积分。

r = 8; s=2;

fun = @(x) x^r  (1-x)^s;

a = integral(fun, 0, 1);

fun2 = @(x) abs(fun(x)/a - 1);

result = 1/2  integral(fun2, 0, 1);

matlab版本低的话就用quad换掉integral试试。

前几天写了这个问题的程序,因时间问题未能及时回答。现看到楼上已经回答,但代码以收费附件的方式提供,不便于交流,我谈谈自己的做法吧。

注意:以下列出几种方法的代码,是各自独立的,可以分别直接复制到命令窗口里面运行,或者保存成M文件之后运行。

方法1:符号积分

这种方法最为简单直接,很容易看懂。使用符号运算求积分,对于无法求出解析解的情况,有时候可以计算得到高精度数值解。

参考代码如下:

syms h

phi = atan(h/108);

alpha = int(sin(phi),0,h)/210;

T = linspace(0,400,20);

X = T0;

Y = X;

for i=1:length(T)

    t = T(i);

    x = int(375cos(phi+alpha),0,t);

    X(i) = double(x);

    y = int(375sin(phi+alpha),0,t);

    Y(i) = double(y);

end

plot(X,Y)

axis equal

xlabel x; ylabel y

在有些版本中会提示“无法求出显式解”(Explicit integral could not be found)的警告信息,如果不希望看到警告,可以在代码前加一句

warning off symbolic:sym:int:warnmsg1

方法2:数值积分

这种方法通用性更强,对于一些很复杂的积分,使用符号运算可能会失败,而用数值方法一般不会有问题。

参考代码如下:

quadfun = @quadgk;

phi = @(h)atan(h/108);

alpha = @(H)arrayfun(@(h)quadfun(@(x)sin(phi(x)),0,h)/210,H);

H = linspace(0,2000,50);

X = arrayfun(@(h)quadfun(@(x)375cos(phi(x)+alpha(x)),0,h),H);

Y = arrayfun(@(h)quadfun(@(x)375sin(phi(x)+alpha(x)),0,h),H);

plot(X,Y)

axis equal

xlabel x; ylabel y

说明几点:

1、这里涉及到的知识主要包括匿名函数、arrayfun和数值积分函数,如果看不明白,可以针对这几个方面查阅相关资料。

2、为了更清楚地了解x-y之间的关系,把h的取值范围适当放大了一些(0~2000)。

3、关于积分函数的选择:个人认为,使用quadgk进行积分是一个比较好的选择(该函数需2007b或更高版本)。如果使用2012a之后的版本,也可以用integral函数。如果是早期版本的MATLAB,可以用quadl之类的函数,但计算效率会低很多,而且可能产生关于最小步长的警告(可以用warning off MATLAB:quadl:MinStepSize关掉)。

关于补充问题

很明显,新里面的问题与原问题不同,其它系数是否一致姑且不论,最大的差别是,第一个式子原来是关于h的反正切函数,而现在是关于sin(h)的反正切。这个差别可能会导致方法1(使用符号运算)失效,而使用方法2(数值积分)求解的时间也远远超过原问题(就我这里测试的情况看,所需时间大约是40倍)。

有个系数R没有给出,我按照原问题对应的系数设置 R = 375r0i1 = 1125000,参考代码如下(h取值范围0~2000,可自行修改):

r3 = 15; C = 33;

r0 = 10; i1 = 03;

i2 = 2; l = 90;

m = 190;

R = 375r0i1;

quadfun = @quadgk;

phi = @(h) atan( r3sin(h/(r0i1i2)) / C );

alpha = @(H) arrayfun(@(h)quadfun(@(x)sin(phi(x)),0,h)/sqrt(l^2+m^2),H);

H = linspace(0,2000,50);

%x = quadl(@(x)375cos(phi(x)+alpha(x)),0,1);

X = arrayfun(@(h)quadfun(@(x)R/(r0i1)cos(phi(x)+alpha(x)),0,h),H);

Y = arrayfun(@(h)quadfun(@(x)R/(r0i1)sin(phi(x)+alpha(x)),0,h),H);

plot(X,Y)

把参量数值设置好,建立符号变量x:

syms

x;

然后用积分函数:

int(f,

x,

0,

lc)即可

f是被积函数,中间那一串的表达式,你可以试试~

1、双击matlab软件图标,打开matlab软件,使用syms命令,创建七个符号变量a、b、c、d、x、y、z。

2、使用符号变量b,创建一元函数A,其中A=sin(5b)。

3、使用函数 int(A,-12,63),计算一元函数A自变量b从下限-12到上限63的定积分。

4、使用符号变量z,创建一元函数B,其中 B=14z^4。

5、最后使用函数int(C,1,3),计算一元函数C自变量d从下限1到上限3的定积分,就完成了。

以上就是关于matlab编程怎么求无穷限定积分全部的内容,包括:matlab编程怎么求无穷限定积分、将区间[0 1]等分,并将每一个等分区间进行积分的matlab程序、matlab怎么求三重积分,由曲面,z=x^2+y^2,z=1,z=2所围成,看好是用matlab程序怎么编等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10631203.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存