标签归档:Matlab

误差棒函数1.1

应读者要求,为Matlab误差棒函数增强版加入了颜色和点型控制功能,顺便加了个英文说明,上传到Mathworks 社区,点此访问,这才发现已经有了那么多类似的函数,果然工作还是要趁早啊,看论文去了……

点此下载

用Matlab做星点识别

随着工作学习的深入,和原始天文照片的接触越来越多,发现对天文专业来说数字图像处理还是一门很有用的基础课程,连CMB功率谱之类看上去高深莫测的技术,其实都写在信号处理专业的本科教材里,把这段流程完全交给现成软件或者编程人员是没办法真正理解观测数据的。开始补课了,先从找星星开始~


比如我们有上面这张照片, 图中的亮点就是实际拍摄的星空,但左中和右下两个最亮的白点都是打在CCD上的宇宙线,它们能量很集中,没有扩展的形状。那要怎么让程序找到这些天体的位置,并识别出正确的星点呢? 继续阅读

Matlab误差棒增强版

Matlab中自带的误差棒函数 errorbar 功能单一,只能在普通坐标下绘制纵向误差,而水平误差棒、对数坐标也经常会用到,就写了一个功能完整点的。帮助如下:

% 误差棒函数增强版
% ERRORBARE(SYM,X,Y,Xbar,Ybar) 能够按需要绘制误差棒,
% 可沿水平、垂直,或者两轴方向,能够根据所选坐标类型
% 调整端点线长。并可处理上下限不同的情况。
%
% SYM 参数包括 v,h,d,vlogx,hlogx,dlogx,vlogy,hlogy,
% dlogy,vlogd,hlogd,dlogd 共12种
% v 表示误差棒垂直,
% h 表示误差棒水平,
% d (dual) 显示双轴误差,
% logx 对应 semilogx,前缀 v,h,d 意义同上
% logy 对应 semilogy,前缀 v,h,d 意义同上
% logd 对应 loglog,前缀 v,h,d 意义同上
%
% 范例:
% x = 1:10;
% y = sin(x)+2;
% e = std(y)*ones(size(x));
% errorbare(x,y,e) % 直接调用errorbar函数
% errorbare(‘v’,x,y,e) % e为 y 误差限
% errorbare(‘v’,x,y,[e;2*e]) % 上下限不等
% errorbare(‘hlogx’,x,y,e) % e为 x 误差限,
% errorbare(‘d’,x,y,e,e) % 双轴误差棒

代码参考了原始函数,运行效率没有下降,就是程序有点啰嗦,也不贴出来了,点此下载,其实这次的异常处理部分还是考虑得比较仔细的:)

由度规算曲率标量

上周被某人说成是“不务正业”,这次就讲讲本行吧(忽悠新手,外行可以无视,同行尽管鄙视)。

当代宇宙学的理论基石是在Robertson-Walker度规下由Einstein场方程推导出的Fridemman方程,现在的绝大部分工作都是以此为起点,而且也得到了可靠的观测支持。从给定度规得出场方程的具体形式是广义相对论的基础内容,但是由于方法繁复,教科书中都不会给出具体的计算过程,而结果又不是一望便知的,学到这里谁都少不了课下的一番推导验证。我当年偷懒跳过,现在却发现自己怎么都算不对了……

怅惘之际在论文库里发现2000年《上海天文台年刊》第21期中有一篇《利用Mathematica软件表示真空Einstein场方程》的文章,但又不想为此学门新语言,便用Matlab仿写了一个,代码如下:

继续阅读

Matlab之errorbar

在Matlab中有个画误差棒的函数errorbar,用在对数坐标下时,则会出现误差棒端点拉长的问题,严重影响画面(如下图左半轴所示)。这个问题开始是在Matlab6.5中发现的,2006b中虽对此函数有所更新但并未解决这个问题。
幸运的是,这个函数没有嵌入内核,可以在命令窗口键入type errorbar ,直接察看其源代码。找到定义误差棒端点长度的地方

tee = (max(x(:))-min(x(:)))/100;
% make tee .02 x-distance for error bars
取误差棒端点大小为误差棒长度的2%
xl = x – tee; 计算左端点
xr = x + tee; 右端点

找对地方,改起来就很简单了,在对数坐标中,点A变成了logA,要取到同一点,将A变成10^A即可,后两行改为

xl = x/10^tee;
xr = x*10^tee;

改名保存到工作目录,直接调用,效果如下图右半轴。
如果在这里加上个判断,就可以直接去目录MATLAB\R2006b\toolbox\matlab\specgraph下替换原始文件了:)

Update:
最新版可在下载页面获取