首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Matlab图形只绘制了For循环中的一个值?

Matlab图形只绘制了For循环中的一个值?
EN

Stack Overflow用户
提问于 2014-07-10 21:44:27
回答 2查看 238关注 0票数 0

我目前正在设计一个程序,该程序将输出x轴上从4到10的值范围的图形。但是,当我绘制图形时,它只在点上绘制,而不是从For循环中绘制所需的6个点。有谁能帮我解决这个问题吗?

我附上了我的代码和图表:

代码语言:javascript
运行
复制
    ![% Inputs
R=0.4;                                          % Radius of Rotor
B=3;                                            % Number of blades
V=2;                                            % Fluid velocity
Rho=998;                                        % Fluid Density
N=9;                                            % Number of Blade Elements
Cp_estimate=0.5;                                % Estimate power coefficient
Alpha_design=4;                                 % Design alpha
Cl_design=1.04;                                 % Design lift coefficient



% Variables
TSR=4;                                          % Initial tip speed ratio
Cp=0;                                           % Initial power coefficient
i=1;                                            % Counter
alpha_new=0;                                    % Initial value for alpha new
axial_induction=0;                              % Initial axial induction factor
tolerance=0.01;                                 % Tolerance Value
Check=1;                                        % Initial check value
axial_induction_old=0;                          % Initial value for old axial induction factor




for TSR=4:10,disp(TSR),                                                                     % TSR from 4 to 10

   while abs(Check)>=tolerance

r_local=\[(R./N)*1; (R./N)*2; (R./N)*3; (R./N)*4; (R./N)*5; (R./N)*6; (R./N)*7; (R./N)*8; (R./N)*9\];
r_over_R=r_local / R;
TSR_local=r_over_R .* TSR;

Phi=(2/3)*atan(1./TSR_local);
C=((8.*pi.*r_local) ./ (B.*Cl_design)).*(1-cos(Phi));
sigma=(B*C) ./ (pi.*r_local.*2);


Cl=\[1.3; 1.1; 1; 0.9; 0.86; 0.83; 0.8; 0.75; 0.5\];                                          % Lift Coefficients
Cd=\[0.027; 0.024; 0.02; 0.019; 0.018; 0.016; 0.013; 0.012; 0.01\];                           % Drag Coefficients




axial_induction= 1 ./ (((4.*(sin(Phi).^2)) ./ (sigma.*Cl_design.*cos(Phi)))+1);
angular_induction= (1-(3*axial_induction)) ./ ((4.*axial_induction)-1);




axial_induction_old = axial_induction;        
TSR_local = TSR*(r_local./R);                                                                 % Local Tip Speed Ratio
Phi = (2/3)*atan(1./TSR_local);                                                               % Angle of Relative Fluid




relative_wind= atan((1-axial_induction) ./ ((1+axial_induction).*TSR));

F=(2/pi).*acos(exp(-(((B/2).*(1-(r_over_R))) ./ ((r_over_R).*sin(relative_wind)))));          % Tip Loss Factor

C_T=(sigma.*((1-axial_induction).^2) .* ((Cl.*cos(relative_wind))+(Cd.*sin(relative_wind)))) ./ ((sin(relative_wind)).^2);


if C_T(:,i)<0.96
    axial_induction=1 ./ (1+(4.*F.*(sin(relative_wind).^2)) ./ (sigma.*Cl.*cos(relative_wind)));  
elseif C_T(:,i)>0.96
    axial_induction=1 ./ (((4.*F.*cos(relative_wind)) ./ (sigma.*Cl))-1); 
end

D=(8./(TSR.*N)).*(F.*(sin(Phi).^2).*(cos(Phi)-((TSR_local).*(sin(Phi)))).*(sin(Phi)+((TSR_local).*(cos(Phi)))).*(1-(Cd./Cl).*atan(Phi)).*(TSR_local.^2));
Cp=sum(D);


Diff=axial_induction-axial_induction_old;
Check=max(Diff(:));



   end

store_Phi(:,TSR)=Phi;
store_TSR_local(:,TSR)=TSR_local;
store_axial_induction(:,TSR)=axial_induction;
store_angular_induction(:,TSR)=angular_induction;
store_relative_wind(:,TSR)=relative_wind;
store_Check(:,TSR)=Check;
store_Diff(:,TSR)=Diff;
store_Cp(:,TSR)=Cp;
store_TSR(:,TSR)=TSR;

end




figure(1)
plot(store_TSR,store_Cp)
hold all
title('Cp vs Tip Speed Ratio')
xlabel('TSR')
ylabel('Cp')][1]
EN

回答 2

Stack Overflow用户

发布于 2014-07-10 22:27:27

好吧,我试着在Octave中运行你的代码,在纠正了代码中的几个拼写错误后,我得到的结果是:

这不是你所期望的吗?

仅供参考,我发现的拼写错误如下:

使用带有Cd=[0.027; 0.024; 0.02; 0.019; 0.018; 0.016; 0.013; 0.012; 0.01];r_local=[(R./N)*1; (R./N)*2; (R./N)*3; (R./N)*4; (R./N)*5; (R./N)*6; (R./N)*7; (R./N)*8; (R./N)*9];

  • Replace

  • % Inputs

  • Replace Cl=\[1.3; 1.1; 1; 0.9; 0.86; 0.83; 0.8; 0.75; 0.5\];替换带有Cl=[1.3; 1.1; 1; 0.9; 0.86; 0.83; 0.8; 0.75; 0.5];

  • Replace ![% InputsCl=\[1.3; 1.1; 1; 0.9; 0.86; 0.83; 0.8; 0.75; 0.5\];
票数 0
EN

Stack Overflow用户

发布于 2014-07-10 23:53:39

来自TSR=4的变量Check在第一次迭代完成(Check=0)后被保留,因此它用于TSR=5,从而满足while语句。一种简单(虽然不是很优雅)的解决方案是在for语句之后立即定义Check

代码语言:javascript
运行
复制
for TSR=4:10,disp(TSR),                      
    Check=1;
    while abs(Check)>=tolerance
        r_local=R/N*(1:9)'; % does the same as your code
        %rest of code
    end
    %rest of code    
end`

除了am304的评论:

在代码的某些部分中不需要使用./ (按元素划分)。RN都是标量,并且在循环中不会改变,因此r_local也可以在for循环外部定义(如上面的代码所示)。尝试仅在实际必要时使用./.*

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24678183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档