最近学习了matlab中arrayfun函数的使用,可以进行“任意资料型别上的向量化运算”,对关于这方面的资料比较少,最早的中文资料见于一台湾论坛上对的翻译,后来在simwe、振动论坛上见到有过讨论。于是想把以前用循环才能完成的积分试着用arrayfun来完成。
模型为:
[X,Y]=meshgrid(xx,yy);
M=exp(-u*arfa^2)*exp(i*u*pi*a^2/x*1e-14*7)*besselj(0,u^0.5*2*a*pi*sin(y)/x*6);
对表达式中的u进行积分,其中的x、y要用网格数据X、Y来替代,以前只能用循环来完成,现在做适当变换处理,即可用arrayfun来完成。
[适量化矩阵表达式积分运算程序,by: ncforest.blog.163.com]
clear all;
syms x y u;
arfa=1.07;
a=200000000;
xx=linspace(800,1500,2); %只取2长度测试,实际的矩阵应该更大
yy=linspace(-6,6,2)*1e-6;
[X,Y]=meshgrid(xx,yy);
M=exp(-u*arfa^2)*exp(i*u*pi*a^2/x*1e-14*7)*besselj(0,u^0.5*2*a*pi*sin(y)/x*6);
fstr=char(vectorize(inline(M)));
%不能直接将quadl进行符号运算,将其转换为字符表达式,注意其中的inline(%s)是必需的,否则无法对fstr进行函数运算,产生错误
fstr=