for循环未读取先前的值

时间:2019-01-16 18:21:23

标签: matlab for-loop

我似乎正在尽力尝试将头撞在砖墙上,在这里看不到我的错误。

我正在尝试在MATLAB中编写一个for循环,该循环使用下面的等式(绝热压缩)来计算四冲程发动机循环中曲轴旋转一度后的新压力。

P2 = P1 * (V2 / V1) ^2

我将根据曲柄滑块模型计算出的体积用作输入。我试过这是Excel,它可以按预期工作,并且可以正确给出总体最大输出。

正在讨论的for循环如下;

Cyl_P = ones(720,1)

for i = (2:1:length(Cyl_V))'

    Cyl_P(i,:) = Cyl_P(i-1,:) .* (Cyl_V(i,:) ./ Cyl_V(i-1,:)).^1.35

end

我的目标是将向量Cyl_P的第一个元素等于1,用作上式的输入,然后将其乘以Cyl_V的第二个元素除以第一个,并将体积项乘以1.35。应该计算Cyl_P的第二个元素。然后,我想将该值反馈到相同的公式中以计算第三个元素,依此类推。

我想念什么?

我已将完整代码放在下面

Theta = deg2rad(1:1:720)'

Stroke = 82 / 1000
R = Stroke / 2
L = 90.5 / 1000
Bore = 71.9 / 1000

d_h = (R+L) - (R.*cos(Theta)) - sqrt(L.^2 - (R.*sin(Theta)).^2)
Pist_h = d_h

figure
plot(Pist_h)

Bore_A = (pi*Bore^2)/4
Swept_V = (Pist_h .* Bore_A)
Clear_V = max(Swept_V) / 10
Total_V = max(Swept_V) + Clear_V

Cyl_V = (Swept_V + Clear_V)

figure
plot(Cyl_V)

for ii = (2:1:length(Cyl_V))'
    div_V(ii,:) = (Cyl_V(ii) ./ Cyl_V(ii-1,:)).^1.35
end

Cyl_P = ones(720,1)

for i = (2:1:length(Cyl_V))'

    Cyl_P(i,:) = Cyl_P(i-1,:) .* (Cyl_V(i,:) ./ Cyl_V(i-1,:)).^1.35

end

figure
plot(Cyl_P)

1 个答案:

答案 0 :(得分:2)

您的问题是将作为参数提供给for循环的数组转置。 MATLAB每行读取for个参数,因此当您向其输入一列时将仅使用第一个迭代。一般评论:

  • '是复数转置,.'是常规转置。
  • iimaginary unit in MATLAB,通常的做法是不要将其用作变量名。
  • 2:1:42:4的功能相同,因为1是默认步长。
  • 请在每行之后使用分号;,以防止MATLAB将每行的结果回显到命令窗口。这使脚本更易于运行,并且如果您的矩阵具有> 1M个条目,则回显内容甚至可能使程序全部崩溃。即使在这种情况下,您也会回显720次Cyl_P的720个条目。要检查变量的内容,只需在必要的地方断开脚本(或分部分运行),然后检查保证的内容(例如,Cyl_P(1:3)就足以检查循环是否按预期填充了向量)。