怎么利用matlab积分函数计算如下函数的积分

matlab(21)
一些积分函数,积分上下限含有变量,并且不容易手工将函数积分出来。这时,可以先用符号函数 int 表示积分,然后用matlabFunction 将符号函数转化为匿名函数,从而达到化简目的。
例如,有如下函数:
其中,f(z) 为标准正态分布的密度函数,这个函数是一个关于 x 的函数,但由于这个积分人工没办法积出来,用符号函数必须用两个变量表示。若要化简成单变量的函数,需要用到 matabFunction。代码如下
g = matlabFunction(int((z-x)*normpdf(z,0,1),z,x,inf));
此时,关于 x 的匿名函数就生成了。输入 g(1), 得到&0.0833。
匿名函数相对于符号函数,运算速度更快。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:17066次
排名:千里之外
原创:41篇
评论:14条
(5)(19)(8)(3)(1)(1)(1)(3)(3)(1)Matlab&中的积分函数
Matlab 之中的积分方法及相关函数总结:
有两类解的形式,一类解析解,适用于被积函数可以求出原函数的情况;
另一类为数值解,即被积函数不可求出原函数时,利用梯形法,矩阵法或辛普森法等等将积分区间分成若干块,累计求出近似解。
积分之前用syms 定义参数,
vpa用来把解析解得形式变成具体数值,vpa(f,15),保留15位小数;
subs(f,x,y)用y
来替代符号x;
simple()对函数进行简化;
解析解积分最常用函数为int,形式 int(f(x),'x',min,max),
f(x)=ax^2+b,允许带符号积分,而且可以计算不定积分。多重积分形式
int(int(int(4*x*z*exp(-x^2),x,0,2),y,0,pi),z,p,pi),亦可一层层分开积。
数值积分方法,只能求定积分,而且里面不可包含未知的符号:
需要建立函数,内建函数方法 Fun=@(x,y) ax+b
或者Fun=inline(‘x.^2’,'x')
trapz(x,y)梯形法,x1=[0:pi/30:pi]; y=sin(x1),自己可以控制步长
quad(Fun,a,b,seta) 辛普森二次样条插值法,a,b 为上下限, seta 为制定误差限,
默认为10e(-6).
quadl(Fun,a,b,seta),Lobbato算法,
调用方法和上着类似,但是精度和计算速度都优于quad.
双重积分为dblquad(Fun,xm,xM,ym,yM,seta)
工具箱NIT Numerical Integration Toolbox 可以求解范围带有参数的积分
quad2dggen,发现在新版matlab中已经自带函数quad2d了,用法 quad2d(@(x,y) x^2+y^2,
1,5,2, ymax), ymax=@(x) x^2可以带参数
参考书目 清华大学出版社的高等应用数学问题MATLAB求解
http://books.google.nl/books?id=H6q65C55beMC&pg=PA55&lpg=PA55&dq=matlab+解析解+int&source=bl&ots=XMiQvJCrSB&sig=TwGHsR9eV8XrUMzwxkcUi6qfgSI&hl=nl&sa=X&ei=BGsDUteeAcnJ0AXZ1YDYDQ&ved=0CHMQ6AEwBw#v=onepage&q=matlab
解析解 int&f=false
fsolve 可以用来解方程
求数值解的效率高于解析解
Fun1=quadl(@(phi)2.*pi.*sp_R^2.*cos(phi).*sin(phi-angle_a3),angle_sp1,angle_a3);
的效率明显优于下者
Fun1=vpa(int(2*pi*sp_R^2.*cos(phi)*sin(phi-angle_a3),'phi',angle_sp1,angle_a3));
关于quad2d
数值积分函数的后续
使用这个函数发生异常是在重装电脑之后,之前好好的程序都跑不了了,心塞,原因是突然之间quad2d积分函数不能给syms定义的符号变量积分了。
如果只是单个函数还好,问题是我的最后的被积函数是两个通过一系列计算得到的两个带符号方程的积,
最后的解决方法是使用matlab的 matlabFunction&将一个单纯的符号变量转为一个可执行的函数
顺便说一下,这样建立的两个函数是可以相乘后再被quad2d积分的哟,
&syms& phior
&fun1=matlabFunction(y_l_m.*sin(thetaor).*coslaw1);
& & fun2=matlabFunction(coslaw2);
%coslaw2是一个带参表达式
& & fun=@(phior,thetator)
fun1(phior,thetator).*(fun2(phior,thetator)&0);
f(num,i)=quad2d(fun,0,2*pi,0,pi);
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。苹果/安卓/wp
积分 3, 距离下一级还需 7 积分
道具: 彩虹炫, 涂鸦板, 雷达卡, 热点灯下一级可获得
道具: 金钱卡
购买后可立即获得
权限: 隐身
道具: 金钱卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
请问用matlab如何计算以二维正态分布函数为密度的概率分布函数?其中相关系数为0.5,两个积分限为3到负无穷!如能解答,不胜感激! [此贴子已经被作者于 9:16:37编辑过]
载入中......
&用二重积分命令: int(int('f(x,y)','x',-inf, 3),'y',-inf, 3)其中f(x,y)是密度函数 [此贴子已经被作者于 9:55:21编辑过]
int(-1/2*erf((-b+w*z2*a)/a/(2-2*w)^(1/2)/b)*pi^(1/2)*a*(2-2*w)^(1/2)*exp(-1/2*z2^2/b^2*w)*exp(-1/2*z2^2/b^2)+1/2*erf(1/(2-2*w)^(1/2)*w*z2/b)*pi^(1/2)*a*(2-2*w)^(1/2)*exp(-1/2*z2^2/b^2*w)*exp(-1/2*z2^2/b^2),z2 = 1 .. 2),这个好像是积不出来对吗?请问有没有其他数值算法可以把它积分出来,结果是具体一个近似值之类的?
应该是可以的,求出一个式子(ans) 来之后, 你用强制转换 double(ans)就可以了
谢谢啦!以后多交流
这里用符号计算好像不行,改用数值积分。
无限扩大经管职场人脉圈!每天抽选10位免费名额,现在就扫& 论坛VIP& 贵宾会员& 可免费加入
加入我们,立即就学扫码下载「就学」app& Join us!& JoinLearn&
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
京ICP证090565号
京公网安备号
论坛法律顾问:王进律师1242人阅读
MATLAB(9)
数值计算程序的通用性——函数名作为参数传递 在进行数值算法的程序设计时,往往需要实现程序的通用性,即同一个程序可以对不同的问题进行求解,如:计算函数f(x)的数值积分的程序,我们需要写一个通用的数值积分程序——Integr(),使其可以对不同的f(x)函数均可以进行积分计算,而不需要每计算一个函数的积分就重新写一个Integr()程序,仅需要另写一个f(x)的表达式程序即可。
&&&&&& 若使用Matlab实现,则显然少不了eval(),和feval()函数的使用,即把需要进行积分计算的函数f(x)写完之后保存为.m文件,然后在积分程序中只需要把f(x)的文件名作为参数传递给Integr()即可。 若是把f(x)函数名作为字符串传入,则在Integr()中只需将f(x)函数名及其参数写为一个字符串,使用eval(字符串)执行即可,如:
function result=integr(a,b,n,fun)
%定义积分函数,a为积分下限,b为积分上限,n为划分区间的个数,fun为需进行计算的函数的文件名
h=(b-a)/n; x=[a:h:b]; y=eval([fun,'(x)']);
%将函数名fun和其参数x合成一个字符串并执行字符串,即执行计算fun(x),注意不能丢了fun的括号。
result=sum(y);
定义需要积分计算的函数fun之后,直接作为integr()的参数引用即可,如任意定义函数如下:
function r=ff(x) r=sin(x).*(1+x.*x);
则,在命令窗口引用即可:将'ff'换为其他函数名字符串即可进行计算其数值积分。
integr(0,1,1000,'ff')
———————————————————————————————————————————————
使用feval()函数则更加方便,integr()函数如下定义:
function result=integr(a,b,n,fun) ;
h=(b-a)/n; x=[a:h:b]; y=fun(x);%fun为传入的函数指针,可以直接作为引用
result=sum(y);
则可以通过如下方式使用:
integr(0,1,1000,@ff)%‘@’即表示ff作为函数指针传入
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:14940次
排名:千里之外
转载:19篇
(1)(1)(1)(1)(1)(3)(7)(2)(1)(1)

我要回帖

更多关于 matlab计算积分 的文章

 

随机推荐