【问题标题】:Issue with output of an indirect equation using Fzero使用 Fzero 输出间接方程的问题
【发布时间】:2015-07-08 15:20:04
【问题描述】:

我一直在尝试将 for 循环的输出写入向量。问题是,一旦它通过方程,它就会停止并吐出这个错误:“下标索引必须是真正的正数 整数或逻辑。”

我查看了这个错误是什么,并检查了我的代码。没有输出负整数,也没有任何零。 for-loop、function 和 fzero 命令都很好,如果我注释掉 MW4p(y4,:) = MW4 我会在命令窗口中得到所有答案。我只是不能将它们放入数组中。

for y4 = linspace(1.4,1.67,100)
x0 = 12;     %Starting Point
fun = @(MW4) (y4.*MW1.*T3)./(y1.*MW4.*T2) - ...
        (((1+((y4+1)./(y4-1)).*p5p2).*((2.*y4)./(y4-1))) ./ ((1+...
        ((y1+1)./(y1-1)).*p5p2).*((2.*y1)./(y1-1)))) .* (((2./(y1-1))...
        ./ (2./(y4-1))).^2); 
MW4 = fzero(fun,x0) 
MW4p(y4,:) = MW4
end

在哪里

y1   = 1.67;
MW1  = 39.55;
T3   = 250;        %k
T2   = 700;        %k
p5p2  = 2.307;     %Determined from T5 desired
MW4p = ones(1,100);

在较早的尝试中,我尝试过 MW4p(y4) = MW4 出现以下错误:“尝试访问 MW4p(1.4);索引必须是 正整数或逻辑。”所以我添加了一个冒号。将此命令放在 for 循环之外只是让它访问循环的最后一个值并返回相同的错误。

【问题讨论】:

  • y4 必须是整数,而不是双精度数。

标签: matlab for-loop iteration output


【解决方案1】:

错误消息准确地告诉您您需要知道的内容。 y4 不是一个整数。使用向量、矩阵、单元格或数组时,不能使用非整数进行索引。

向量、矩阵和数组是离散结构,只能用离散值索引,但显然它们可以用来存储非离散值。

除非我遗漏了什么,否则您的选择是:

  • 通过任何数据结构:将y4及其对应的MW4值存储为元组;例如,您可能有一个结构或单元格数组,其中一个元素是y4,另一个元素是从MW4 返回的数组
  • 使用类似this answer 的东西,使用哈希映射。我没有仔细研究过,但我猜你可以使用浮点数作为键。

【讨论】:

  • 好的,如果我理解正确的话:我可以为非整数迭代运行 for 循环并获得答案流,或者我可以将 y4 更改为一组整数并拥有它索引正确,即使 MW4=fzero(..) 可能有两倍作为答案。
  • 我修改了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
  • 2020-04-07
  • 2018-01-10
相关资源
最近更新 更多