我无法让我的函数在矩阵中提供输出

时间:2017-02-08 21:29:08

标签: arrays matlab matrix output

我想绘制变量Dl的日志,该变量取决于z的变量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 个答案:

答案 0 :(得分:1)

首先,不需要这些行,您在循环中为z分配1:100

z = linspace(1,100,1);

您只获得一个值,因为您的循环只保存最后一个值。您应该将Dlz这样(也可能是Da)编入索引:

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