不知道该发那个版, 版主对不起了, 借女生版的地一用。
感谢各位同学帮忙, 问题已解决。
还是把CODE COPY 上来吧, 主要是想写个求aperture的code, 先是计算从中心往外每增加一点半径,flux的变化。 这步做到了(以下的aper.m 和 main.m)。
然后第二部是计算signal to noise ration (SNR), 这里卡住了, 因为我的公式里需要object 和 background的 flux, 这2个数都在aper.m里定义的, 现在我想再用在求SNR里, 它就说我没定义这两个数了。
—aper.m------
function apt_pix = aper(im,x0,y0,r_ap,is,os)
image = fitsread (im);
delta = 50;
x = x0-delta: x0+ delta;
y = y0-delta: y0+ delta;
sec_star = image (y,x);
figure(2);
imshow (sec_star, [0, 2000]);
[X, Y] = meshgrid (x, y);
dist = sqrt ((x0-X).^2 + (y0-Y).^2);
star = sec_star(dist < r_ap);
ring = dist > is & dist <os;
background = sec_star (ring);
background_median = median(background);
star_real = star - background_median;
apt_pix = sum (star_real (: ));
end
—main.m----
im= ‘mh170110.fit’;
x0 = 889;
y0 = 594;
is = 25;
os = 30;
r_ap =[5:1:30];
n_ap = length(r_ap);
res = zeros(n_ap);
for i = 1:n_ap;
res(i) = aper(im,x0,y0,r_ap(i),is,os);
mag(i)=25 -2.5*log10(res(i));
end
—需要加入的SNR 公式—
g=0.73;
ron=3.3;
n_pix = length(star_real);
N_OBJ = res(i); %N_OBJ 就是object的number count
N_SKY = background_median; %N_SKY 就是背景的number count
SN=(gN_OBJ)/sqrt(gN_OBJ + n_pixgN_SKY + n_pix*ron^2);
然后我现在就是不知道怎么把sn 加进去。 加入到main.m里, 它说我的background 没有定义。 下面有同学提醒了, 因为background只在aper方程里面设置了所以方程以外不能用。 不知道我是不是应该在aper.m里定义一个 sub-function, 叫它snr 什么的, 然后再在main.m里面call snr?
我知道这些都是很基础, 因为我之前用别的编程, 现在刚学matlab, 经常脑子转不过来。
我matlab初学,菜鸟一个,想请问一下懂matlab的学霸们, 如果我建立了一个 test.m 的function文件, 比方说(以下符号都是打个例子而已):
function y = test (a)
b = 2a;
c=3+a;
d=b+c;
y = c+d^2;
end
然后如果我给出a的值, 根据设立的function就可以求出y的值。 我现在想在另一个file 里面(比方说, 新开一个叫main.m的文件), 求, 比如说,P=y+1的值, 只需要在程序里面给出a值,call for function ‘test’ 就可以了。 这一步做到了。 但是我想在同一个main.m的文件里再求另一个叫Q的, Q=y+b, 现在程序一直说 'Undefined function or variable ‘b’.
我怎么才能在main.m 里用b 值啊?因为我的main.m里只是call 了test方程, 怎么把整个test的变数都拉过来用啊?
![]()