使用 Fzero 的间接方程的输出问题

Issue with output of an indirect equation using Fzero

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

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

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 循环之外只是让它访问循环的最后一个值和 return 相同的错误。

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

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

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

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