我似乎正在尽力尝试将头撞在砖墙上,在这里看不到我的错误。
我正在尝试在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)
答案 0 :(得分:2)
您的问题是将作为参数提供给for
循环的数组转置。 MATLAB每行读取for
个参数,因此当您向其输入一列时将仅使用第一个迭代。一般评论:
'
是复数转置,.'
是常规转置。i
是imaginary unit in MATLAB,通常的做法是不要将其用作变量名。2:1:4
与2:4
的功能相同,因为1
是默认步长。;
,以防止MATLAB将每行的结果回显到命令窗口。这使脚本更易于运行,并且如果您的矩阵具有> 1M个条目,则回显内容甚至可能使程序全部崩溃。即使在这种情况下,您也会回显720次Cyl_P
的720个条目。要检查变量的内容,只需在必要的地方断开脚本(或分部分运行),然后检查保证的内容(例如,Cyl_P(1:3)
就足以检查循环是否按预期填充了向量)。