# Plot inside a "for" loop

조회 수: 7(최근 30일)
Cristian 2013년 4월 19일
댓글: INDRANIL RANJIT SALVI 2017년 11월 15일
Hello. I am trying to write a program that generates the pressure-volume diagram for a vehicle engine. I came up with this idea:
nn=length(0:10:720);
P=zeros(nn,1);
V=zeros(nn,1);
for alfa=0:10:720
cont=alfa/10+1;
cos_alfa=cosd(alfa);
x(cont)=76.8*((1-cos_alfa)/2+0.28/4-(0.28/4)*cos_alfa^2);
if alfa<=180
P(cont)=0.9;
elseif alfa>180 & alfa<=360
P(cont)=320.612/((x(cont)+8.93023)^1.32);
elseif alfa>360 & alfa<=540
P(cont)=1119.9/((x(cont)+8.93023)^1.24);
elseif alfa>540
P(cont)=1.1;
end
V(cont)= 0.0448882+x(cont)*pi*(80^2)/4*(10^(-6));
end
fprintf('\n For alfa %g [degrees], cos_alfa is %g, x is %g, P is %g [bar], V is %g [l] \n',alfa,cos_alfa,x,P,V);
figure(1)
plot(V,P,'-r'),title('Diagram P-V'),xlabel('Volume [l]'),ylabel('Pressure [bar]'),grid;
fprintf('\n')
But something in not quite right. The values that are generated by the program are incorrectly calculated. I cannot figure it out. Please help me. I also made an excel table and these are the correct values:
# α Cos(α) x P[bar] V[l]
# 0 1 0 0,9 0,044888245
# 10 0,984807753 0,74548852 0,9 0,048635479
# 20 0,939692621 2,944675899 0,9 0,0596898
# 30 0,866025404 6,488624495 0,9 0,077503629
# 40 0,766044443 11,20512708 0,9 0,101211357
# 50 0,64278761 16,87172209 0,9 0,12969477
# 60 0,5 23,232 0,9 0,161665014
# 70 0,342020143 30,01355396 0,9 0,195752822
# 80 0,173648178 36,94580374 0,9 0,23059811
# 90 6,12574E-17 43,776 0,9 0,264930421
# 100 -0,173648178 50,28198379 0,9 0,297633062
# 110 -0,342020143 56,28070097 0,9 0,327785904
# 120 -0,5 61,632 0,9 0,354684466
# 130 -0,64278761 66,23781051 0,9 0,377835795
# 140 -0,766044443 70,03734031 0,9 0,396934315
# 150 -0,866025404 72,99937551 0,9 0,411823128
# 160 -0,939692621 75,11306918 0,9 0,422447711
# 170 -0,984807753 76,37872395 0,9 0,428809586
# 180 -1 76,8 0,9 0,43092715
# 190 -0,984807753 76,37872395 0,905871259 0,428809586
# 200 -0,939692621 75,11306918 0,923921965 0,422447711
# 210 -0,866025404 72,99937551 0,955514834 0,411823128
# 220 -0,766044443 70,03734031 1,003106372 0,396934315
# 230 -0,64278761 66,23781051 1,070571086 0,377835795
# 240 -0,5 61,632 1,163761373 0,354684466
# 250 -0,342020143 56,28070097 1,291446563 0,327785904
# 260 -0,173648178 50,28198379 1,466886302 0,297633062
# 270 -1,83772E-16 43,776 1,710494123 0,264930421
# 280 0,173648178 36,94580374 2,054404795 0,23059811
# 290 0,342020143 30,01355396 2,550357131 0,195752822
# 300 0,5 23,232 3,283087245 0,161665014
# 310 0,64278761 16,87172209 4,391348961 0,12969477
# 320 0,766044443 11,20512708 6,091903227 0,101211357
# 330 0,866025404 6,488624495 8,664639763 0,077503629
# 340 0,939692621 2,944675899 12,23115402 0,0596898
# 350 0,984807753 0,74548852 16,02792799 0,048635479
# 360 1 0 17,81724439 0,044888245
# 361 0,999847695 0,007485963 74,07242254 0,044925873
# 362 0,999390827 0,029940075 73,84231701 0,04503874
# 364 0,99756405 0,119699901 72,93523792 0,045489922
# 365 0,996194698 0,186960353 72,2686271 0,04582801
# 366 0,994521895 0,269098467 71,46935741 0,046240881
# 368 0,990268069 0,477834722 69,50837079 0,047290104
# 370 0,984807753 0,74548852 67,13210745 0,048635479
# 380 0,939692621 2,944675899 52,07581649 0,0596898
# 390 0,866025404 6,488624495 37,66976556 0,077503629
# 400 0,766044443 11,20512708 27,05627337 0,101211357
# 410 0,64278761 16,87172209 19,8942875 0,12969477
# 420 0,5 23,232 15,13799475 0,161665014
# 430 0,342020143 30,01355396 11,94082367 0,195752822
# 440 0,173648178 36,94580374 9,745657003 0,23059811
# 450 3,06287E-16 43,776 8,204814666 0,264930421
# 460 -0,173648178 50,28198379 7,102113193 0,297633062
# 470 -0,342020143 56,28070097 6,301157072 0,327785904
# 480 -0,5 61,632 5,714101556 0,354684466
# 490 -0,64278761 66,23781051 5,283192082 0,377835795
# 500 -0,766044443 70,03734031 4,969825313 0,396934315
# 510 -0,866025404 72,99937551 4,748002461 0,411823128
# 520 -0,939692621 75,11306918 4,600380691 0,422447711
# 530 -0,984807753 76,37872395 4,515899646 0,428809586
# 540 -1 76,8 4,488399041 0,43092715
# 550 -0,984807753 76,37872395 1,1 0,428809586
# 560 -0,939692621 75,11306918 1,1 0,422447711
# 570 -0,866025404 72,99937551 1,1 0,411823128
# 580 -0,766044443 70,03734031 1,1 0,396934315
# 590 -0,64278761 66,23781051 1,1 0,377835795
# 600 -0,5 61,632 1,1 0,354684466
# 610 -0,342020143 56,28070097 1,1 0,327785904
# 620 -0,173648178 50,28198379 1,1 0,297633062
# 630 -4,28802E-16 43,776 1,1 0,264930421
# 640 0,173648178 36,94580374 1,1 0,23059811
# 650 0,342020143 30,01355396 1,1 0,195752822
# 660 0,5 23,232 1,1 0,161665014
# 670 0,64278761 16,87172209 1,1 0,12969477
# 680 0,766044443 11,20512708 1,1 0,101211357
# 690 0,866025404 6,488624495 1,1 0,077503629
# 700 0,939692621 2,944675899 1,1 0,0596898
# 710 0,984807753 0,74548852 1,1 0,048635479
# 720 1 0 1,1 0,044888245
##### 댓글 수: 5표시숨기기 이전 댓글 수: 4
Ahmed A. Selman 2013년 4월 20일
So interesting.
I've ran the code you posted, and got some nice figure. Then I've copied your data into a text file, imported it to Excel, re-imported it to Matlab, and draw P vs. V, and got the very same, very nice, figure. SO where is the problem.. :)
If you think there is some problem with the code, then re-check your math, and your excel data as well.. please.

댓글을 달려면 로그인하십시오.

### 채택된 답변

bym 2013년 4월 19일
Please see comments in code. I checked a couple of values and they agree with your excel table, but it is up to you to verify that it is indeed providing the correct calculations
clc;clear,close all
nn=length(0:10:720);
P=zeros(nn,1);
V=zeros(nn,1);
for alfa=0:10:720
cont=alfa/10+1;
cos_alfa=cosd(alfa);
x(cont)=76.8*((1-cos_alfa)/2+0.28/4-(0.28/4)*cos_alfa^2);
if (alfa<=180)
P(cont)=0.9;
elseif (alfa<=360) % you do not need the && statement, if it greater than 180 don't test for it
P(cont)=320.612/((x(cont)+8.93023)^1.32);
elseif (alfa<=540)
P(cont)=1119.9/((x(cont)+8.93023)^1.24);
else % last statement is an 'else' since other options are exhausted
P(cont)=1.1;
end
V(cont)= 0.0448882+x(cont)*pi*(80^2)/4*(10^(-6));
end
%fprintf('\n For alfa %g [degrees], cos_alfa is %g, x is %g, P is %g [bar], V is %g [l] \n',alfa,cos_alfa,x,P,V);
figure(1)
plot(V,P,'-r'),title('Diagram P-V'),xlabel('Volume [l]'),ylabel('Pressure [bar]'),grid;
fprintf('\n')
fprintf('x\t\t\tP[bar]\t\t\tV[l]\n') %table output might be clearer
fprintf('%-6.4f\t\t\t%-6.4f\t\t\t%-6.4f\n',[x' P V]')

댓글을 달려면 로그인하십시오.

### 추가 답변(1개)

Sysenso Systems 2013년 4월 20일
You program generates P and V values for the alfa=0:10:720. That has an increment of 10. But the Excel table has the expected values for alfa=[0:10:360 361 362 364 365 366 368 370:10:720].
Here are the two solutions: 1.If you compare the generated data with the Excel file by ignoring the rows for alfa = 361 362 364 365 366 368, then everything works fine!
2. Modify the code to work for alfa = 361 362 364 365 366 368. Here is the modified code.
nn=length([0:10:360 361 362 364 365 366 368 370:10:720]);
P=zeros(nn,1);
V=zeros(nn,1);
cont = 1;
for alfa=[0:10:360 361 362 364 365 366 368 370:10:720]
cos_alfa=cosd(alfa);
x(cont)=76.8*((1-cos_alfa)/2+0.28/4-(0.28/4)*cos_alfa^2);
if alfa<=180
P(cont)=0.9;
elseif alfa>180 & alfa<=360
P(cont)=320.612/((x(cont)+8.93023)^1.32);
elseif alfa>360 & alfa<=540
P(cont)=1119.9/((x(cont)+8.93023)^1.24);
elseif alfa>540
P(cont)=1.1;
end
V(cont)= 0.0448882+x(cont)*pi*(80^2)/4*(10^(-6));
cont = cont +1;
end
fprintf('\n For alfa %g [degrees], cos_alfa is %g, x is %g, P is %g [bar], V is %g [l] \n',alfa,cos_alfa,x,P,V);
figure(1)
plot(V,P,'-r'),title('Diagram P-V'),xlabel('Volume [l]'),ylabel('Pressure [bar]'),grid;
fprintf('\n')
By the way, there is no Plot inside a "for" loop in the code!!!
##### 댓글 수: 1표시숨기기 없음
INDRANIL RANJIT SALVI 2017년 11월 15일
Please give me some pointers on how to start plotting cylinder pressure vs swept volume graph for which we have the cylinder pressure and the total swept volume.How to incorporate engine load settings

댓글을 달려면 로그인하십시오.

### 범주

Find more on Customizations and Preferences in Help Center and File Exchange

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by