我现在似乎正用头撞在砖墙上,尽管我很努力,但我在这里看不到我的错误。
我试图在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)
发布于 2019-01-16 10:39:37
您的问题是将输入的数组转换为for
循环的参数。MATLAB读取每一行的for
参数,因此,当您给它一个列时,只会使用第一次迭代。一般性意见:
'
是复合转座子,.'
是规则转座子。i
是imaginary unit in MATLAB,通常不使用它作为变量名。2:1:4
的操作与2:4
相同,因为1
是默认的步骤大小。;
,以防止MATLAB将每一行的结果回显到命令窗口。这使得脚本更容易运行,如果有大于1M条目的矩阵,那么回显内容甚至可能使程序崩溃。即使在这种情况下,您也要回显Cyl_P
720次的720个条目。为了检查变量内容,只需在必要时中断脚本(或按部分运行脚本),并在需要的地方检查内容(例如,Cyl_P(1:3)
在这里足以检查循环是否按预期的方式填充向量)。https://stackoverflow.com/questions/54223104
复制