观测数据和模型数据根据参数变化的相关性度量

49 篇文章 0 订阅
20 篇文章 0 订阅
主要是先用三次样条插值对齐两个数据坐标,然后将模型数据进行三阶多项式乘积尽量拟合观测数据,最后求拟合的数据和观测数据之间的内积。

内积最大者相关性最大。当然,也可以不通过拟合后内积,直接内积后除以两个向量的模。下面是MATLAB伪代码和源代码。

% input: 
% 	Mx, My: Model spectrum  
% 	Sx, Sy: Observed spectrum
% 	RV_range: Radial Velocity range, such as -500 Km/s ~ 500 Km/s
% 
% best_value = -1
% best_rv = -999
% for rv in RV_range:
% 	z = rv / 300000.0
% 	Sx_restframe = Sx/(1+z)
% 
% 	# compute Model flux on Sx_restframe	
% 	Mx_new, My_new = change_X_axis_of_spectrum(Sx_rest, Mx, My)
% 
% 	# least square get min(|My_new*p3 - Sy|)
% 	My_new = polyfit(My_new * P3 <-fit-> Sy)
% 	
% 	correlation_value = sum (My_new * Sy)/(|My_new|*|Sy|)  	
% 	
% 	if correlation_value > best_value:
% 		best_value = correlation_value
% 		best_rv = rv
% return best_value, best_rv

% Author:shizhixin
% Email:szhixin@gmail.com
% Blog:http://blog.csdn.net/shizhixin
% Date:2012-06-06
%function [best value best_rv] = coss_correlation(model, observed, rv)
clear, clc, close allload test_data; %load test data%the input parameterobserved = [lamda1, flux1];model = [lamda2, flux2];rv = [100, 200, 300]';%the result of function best_value = -1;best_rv = -1000;size_rv = size(rv, 1);for i = 1:size_rv z = rv(i) / 300000; observed_rest_lamda = observed(:,1)./(1+z); model_new = spline(model(:,1), model(:,2), observed_rest_lamda); % figure% plot(observed_rest_lamda, model_new, 'r');% figure% plot(observed_rest_lamda, observed(:,2), 'b'); diff_spectrum = observed(:,2) ./ model_new; N=3; P = polyfit(observed_rest_lamda, diff_spectrum, N); for j=1:size(diff_spectrum, 1) model_new(j) = model_new(j) * get_poly_value(P,N,observed_rest_lamda(j)); end figure plot(observed_rest_lamda, model_new, 'r'); hold on plot(observed_rest_lamda, observed(:,2), 'b'); titlename = strcat('rv=', num2str(rv(i))); title(titlename); correlation_value = sum (model_new .* observed(:,2)); if correlation_value > best_value best_value = correlation_value; best_rv = rv(i); endendbest_valuebest_rv%end


function Y = get_poly_value(P,N,X)
Y = 0;
for i = 1:N+1
    Y = Y + P(i)*X^(N-i+1);
end    
end



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值