2017-02-08 1 views
0

Dl의 로그를 플롯하려면 에 대해 log(z)을 사용합니다. z = 1:100에 대해이 작업을 수행하려고 시도하지만 Dl에 대해서만 1 개의 숫자 만 반환합니다.행렬에 출력을 제공하는 기능을 얻는 데 문제가 있습니다.

% Log(Dl) versus Log(Redshift) 
m = 1; 
d = 0; 
z = linspace(1,100,1); 
Dl = zeros(1,100); 
for z = 1:100 
    [Dl,Da] = Cosmological(m,d,z); 
end 
y = log(Dl); 
x = log(1:100); 
plot(x,y) 

어리석은 또는 쓸모없는 코드 줄에 사과드립니다. 나는 프로그래밍하기가 매우 쉽습니다. 나는 다음과 같이 작성을 위해 호출되는 함수 cosmological (하지만 오류가 없는지 그렇게 필요하지 않을 수있다, 난 그냥 경우에 게시하도록하겠습니다) :

먼저
function [Dl,Da] = Cosmological(m,d,z) 
f = @(x)1./((1+x).*((m.*(1+z)-m+d.*((1+x).^(-2))-d+1).^(.5))); 
q = integral(f,0,z); % Integral part equations for Dl 
if m+d==1    % flat universe condition 
    Dl=c/H0.*(1+z)*q; 
elseif m+d<1   %positive spatial curvature universe condition 
    Dl=c/H0*(1-m-d)^(-1/2)*(1+z)*sinh((1-m-d)^.5).*q; 
else     % negative spatial curvature universe condition 
    Dl=c/H0*(1-m-d)^(-1/2)*(1+z)*sin((1-m-d)^.5).*q; 
end 
Da = Dl/(1+z)^2;  %Angular diameter distance function 
end 

답변

1

,이 라인이 필요하지 않습니다, 당신은 z를 할당 루프에서 1:100과 : 루프가 마지막 값을 저장하기 때문에

z = linspace(1,100,1); 

당신은 단지 하나의 값을 얻는다. 다음과 같이 Dlz과 같이 색인화해야합니다 (그리고 아마도 또한 Da).

for z = 1:100 
    [Dl(z),Da] = Cosmological(m,d,z); 
end 
관련 문제