请教一个问题
mathematica吧
全部回复
仅看楼主
level 9
最近在搞模型,需要做到一个类似于分段函数的情况,于是就需要用矩形函数,在matlab里可以直接用rect来表示矩形函数,但是mma里并没有这样的函数定义,只有rectangle这个用来画矩阵的函数,有没有大佬知道该如何来编写让程序里有矩形函数?
矩形函数的傅里叶变换是sinc函数,这个函数在mma里有,但是用这个函数得不到想要的结果。
用矩形函数想做的就是用来进行嫁接,比方说一个径向偏振光,它方向角的范围是【0,2Pi】,同时呢改变这个光束的一个参数:偏振阶数。这个偏振阶数的改变可以导致偏振态分布的变化,即下图:
m就是偏振阶数。
我想要在【0,Pi】的时候是偏振阶数是1的时候,【Pi,2Pi】时偏振阶数为2,即上半部分圆与下半部分圆的参数不同,起到嫁接的情况。
是不是可以不用到矩形函数,直接用分段函数先来定义,然后画取这个分段函数的向量图(即偏振态分布)?
2022年03月31日 11点03分 1
level 9
ph = ArcTan[x, y]
n = 1
n1 = 0.5
b = 1.5 Pi
ph0 = 0 Pi/180
M = (b/2 Pi)*
Sum[Sinc[(m*b)/2]*Exp[(-I*m*b)/2]*Exp[I*m*ph], {m, -50, 50, 0.1}]
M1 = (b/2 Pi)*
Sum[Sinc[(m*b)/2]*Exp[(I*m*b)/2]*Exp[I*m*ph], {m, -50, 50, 0.1}]
EX = M*Cos[n*ph + ph0] + M1*Cos[n1*ph + ph0]
EY = M*Sin[n*ph + ph0] + M1*Sin[n1*ph + ph0]
VectorPlot[{EX, EY}, {x, -2.8, 2.8}, {y, -2.8, 2.8},
RegionFunction -> Function[{x, y}, 0.1 < x^2 + y^2 < 9],
Frame -> None, VectorStyle -> Black, VectorScale -> 0.04]
不知道为啥不能直接复制粘贴,这个是纯文本的,我又粘贴回去,多了几个空行,需要删掉,比较麻烦。
这是我想的一个办法,用两个光阑拿来遮挡,一个遮挡上半部,一个遮挡下半部,然后拼接到一起。
但是在画光强图时,这样拼接的光强就跟单独光强不一样,会有一个缺口的形成,也就是说不能够这样单独的将这样的两部分嫁接在一起。
2022年03月31日 11点03分 2
吧务
level 10
UnitBox
具体需求我没看
2022年04月01日 11点04分 3
吧务
level 15
3楼已经给出了正确答案,但除此之外有几点我还是想提一下:
1. “在matlab里可以直接用rect来表示矩形函数”你确定MATLAB里有这函数吗?我在在线文档里咋没搜到?
2. “但是mma里并没有这样的函数定义”3楼已经说了,是UnitBox,并且,
即便你是在文档里搜rectangle,你依旧可以在文档的第2页找到它:
3. “矩形函数的傅里叶变换是sinc函数,这个函数在mma里有,但是用这个函数得不到想要的结果。”你怎么用的?
2022年04月01日 16点04分 4
不好意思,因为我不太会用matlab,昨天下午我也请教了同学,他们是用的matlab,矩形函数的话也是需要自己来定义的。 对于UniteBox,当时看Rectangle里没有看到那个,是我的疏忽,对于Sinc函数,我是这样用的,我把程序放在下面。
2022年04月02日 00点04分
谢谢你的一一回答,我再去好好看下这个函数和UnitBox
2022年04月02日 00点04分
level 9
2022年04月02日 00点04分 5
1