2017-07-25 78 views
-1
l_0=1.5; 
l_1=1.6; 
Lambda_min=2*(1+1)*l_0; 
Lambda_max=2*(1+1)*l_1; 
n_0=linspace(2,2.11,10); 
n_1=linspace(2.30,2.50,10); 
for i=1:10 
for j=1:10 
    for k=1:10 
    l(i) = Lambda_min * (Lambda_max/Lambda_min)^(i/10) 

    sum=sum(l) 
    d_0(:,j)= l(i)/((n_0(i)/n_1(i)+1))     
    d_1(:,k)= (n_0(i)/n_1(i))*d_0(:,j) 
    end 
    end 
end 

首先;我想找到一个向量l(i)的值,然后取这个向量的和。第二,对于d_0(:,j)我想创建一个矩阵,以便稍后绘制它,每次从l(i),n_0,n_1取不同的值。如果我把n_0和n_1的值放到for循环中,我会得到索引错误,因为它应该是逻辑或整数。Matlab。我有一些错误

我的矩阵被覆盖,不知道如何避免它。请注意,我想在d_0和d_1 n_0和n_1中从linspace获取值。例如在第一次迭代中,n_0 = 2 n_1 = 2.30,然后第二次迭代取linspace中的下一个值。

我试着看到n_0(i)的值,并且它给了我10次迭代。它给了我更多的覆盖。

+0

您创建了使用功能和......不要将其命名功能后变量变量“和(我)”。此外,l(i)不应该在k和j循环中,因为它不会随着这些迭代而改变。 l(1)是一个值,所以l(1)的总和会给你l(1)。你有很多基本的matlab错误。 – Flynn

+0

非常感谢 – JFS

+1

请尝试使用matlab调试器来更好地理解您的代码,这可以使您自己解决问题或提出更好的问题。你的头衔(我有一些错误_)并没有说明你的问题。 – m7913d

回答

0

尝试:

l_0=1.5; 
l_1=1.6; 

Lambda_min = 4*l_0; 
Lambda_max = 4*l_1; 

n_0 = linspace(2,2.11,10) % don't add semicolon so you can check this is giving 10 values 
n_1 = linspace(2.30,2.50,10) % 

for i=1:10 
    l(i) = Lambda_min * (Lambda_max/Lambda_min)^(i/10) % should give you 10 values 
end 

d_0= l./((n_0./n_1+1)); % This will only give you a vector, not a matrix.    
d_1= (n_0./n_1).*d_0; 

Lsum = sum(l); % should give you one value 
+0

谢谢你帮助我。它确实给了我10个值n_0。我收到错误消息**在赋值A(:) = B中,A和B中的元素数量必须相同**。 a_new_attempt_to_calculate(行13)中的错误d_1(i)=(n_0(i)/ n_1(i))* d_0(:,i)。另外,我得到最后一行Lsum = sum(l)的错误。这是消息**下标索引必须是真正的正整数或逻辑。** – JFS

+0

对不起,它应该是d_0(i)而不是d_0(:,i)。我现在编辑 – Flynn

+0

好吧。谢谢 – JFS