【问题标题】:Matlab. I got some errorsMATLAB。我有一些错误
【发布时间】:2017-07-25 18:04:41
【问题描述】:
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 循环中,我会得到索引错误,因为它应该是逻辑数或整数。

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

我试图查看 n_0(i) 的值,它是否给了我 10 次迭代。它给了我更多的覆盖。

【问题讨论】:

  • 您使用函数 sum 创建了变量“sum(i)”...不要在函数后命名变量。此外,l(i) 不应该在 k 和 j 循环中,因为它不会随着这些迭代而改变。 l(1) 是一个值,因此 l(1) 的总和将为您提供 l(1)。你有很多基本的 matlab 错误。
  • 请尝试使用 matlab 调试器更好地理解您的代码,这可能使您能够自己解决问题或提出更好的问题。您的标题(我遇到了一些错误)并没有说明您的问题。

标签: matlab indexing


【解决方案1】:

试试:

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

【讨论】:

  • 感谢您帮助我。它确实为 n_0 提供了我的 10 个值。我收到错误消息在赋值 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) 出现错误。这是消息下标索引必须是正整数或逻辑数。
  • 对不起,应该是 d_0(i) 而不是 d_0(:,i)。我现在会编辑它
  • 当然。如果这回答了您的问题,请接受它作为答案,以便其他人知道。否则,只需发表评论,让我知道您仍在努力解决什么问题。
  • 对不起,它不起作用。在我看来,它只取 n_0 和 n_1 中的一个值。我计算了一下,得到了相同的结果。矩阵在每次迭代时都会被覆盖。
  • 您没有矩阵。你只有向量。您是否尝试使用 n_0 和 n_1 创建矩阵?
猜你喜欢
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-17
  • 1970-01-01
  • 2016-07-09
  • 1970-01-01
相关资源
最近更新 更多