首页 > 解决方案 > 循环中的 if 语句

问题描述

我希望我的代码检查我的“e”分量是否在 +,- 0.72 到 +,- 0.73 的范围内,以便将 Delta_theta 和 M 的大小存储在 Plot 的向量中。但我真的不知道最后一个 if 语句有什么问题。我只是尝试将满足此条件的 M 的数量存储在另一个矩阵“G”中,并将其与 delta theta 进行对比,但它也不起作用。亲切的问候。

我确定第二个和所有其他陈述都是正确的,我只需要最后一个的帮助,谢谢问题在这里

    if e(Idx_1,Idx_2) >=0.072 && e(Idx_1,Idx_2) < 0.077 || e(Idx_1,Idx_2) <=-0.072 && e(Idx_1,Idx_2) > -0.077;
   G=M;
   end
clear all
clc
%% Constants
B=1.2;
H=0.35;
R=2.93;
b=1;
h=0.24;
d_c=0.06;
D_s=0.03;
d_s=0.4;
r_s=0.015;
N_s=2;
E_s=200e9;
f_y=500e6;
E_c=43.6e9;
v_c=0.24;
f_c=35.5e6;
F=1.9;
A_s=pi*r_s^2;
e=0.3*h;
%% Operator
Idx_1 = 0;
for delta_theta =-40*10^-3:0.05*10^-3:40*10^-3
    alpha_e=0;
    alpha_p=0;
    beta_e=0;
    beta_p=0;
    r_b=0;
    r_s=0;
    r_e=0;
    Idx_1 = Idx_1 + 1;
    Idx_2 = 0;
    delta_thetavalue(Idx_1)=delta_theta;
    A=r_s-(f_y*d_s/(E_s*delta_theta));
   for delta_l=-10*10^-2:0.05*10^-2:10*10^-2
        Idx_2 = Idx_2 + 1;
        delta_lvalue(Idx_2)=delta_l;
        r_0=R-(delta_l/delta_theta);
        r_1=R-((1/delta_theta)*(delta_l+(F*f_c*d_c)/E_c));
        if delta_theta >=0
                r_op=R+(h/2);
                r_cl=R-(h/2);
                if r_0 >= r_op && r_1<=r_cl
                    alpha_e=1;
                    r_b=r_op;
                    r_e=r_cl;
                elseif r_0 >=r_op && r_cl<r_1 && r_1<r_op
                    alpha_e=1;
                    alpha_p=1;
                    r_b=r_op;
                    r_e=r_1;
                elseif r_0 >=r_op && r_1>=r_op
                    alpha_p=1;
                    r_b=r_op;
                    r_e=r_op;
                elseif r_s<r_0 && r_0<r_op && r_1<=r_cl
                    alpha_e=1;
                    r_b=r_0;
                    r_e=r_cl;
                elseif r_s<r_0 && r_0<r_op && r_1>r_cl
                    alpha_e=1;
                    alpha_p=1;
                    r_b=r_0;
                    r_e=r_1;
                elseif A<r_0 && r_cl<r_0 && r_0<=r_s && r_1<=r_cl
                     alpha_e=1;
                     beta_e=1;
                     r_b=r_0;
                     r_e=r_cl;
                elseif A<r_0 && r_cl<r_0 && r_0<=r_s && r_1>r_cl
                     alpha_e=1;
                     alpha_p=1;
                     beta_e=1;
                     r_b=r_0;
                     r_e=r_1;
                elseif A>=r_0 && r_0>r_cl && r_1<=r_cl
                     alpha_e=1;
                     beta_p=1;
                     r_b=r_0;
                     r_e=r_cl;
                elseif A>=r_0 && r_0>r_cl && r_1>r_cl
                     alpha_e=1;
                     alpha_p=1;
                     beta_p=1;
                     r_b=r_0;
                     r_e=r_1;
                elseif r_0 <= r_cl
                    r_b=r_cl;
                    r_e=r_cl;
                
                end
                
                 
        else
          r_op=R-(h/2);
          r_cl=R+(h/2);
                if r_0 <= r_op && r_1 >= r_cl
                    alpha_e=1;
                    r_b=r_op;
                    r_e=r_cl;
                elseif r_0 <=r_op && r_1>r_op && r_cl>r_1
                    alpha_e=1;
                    alpha_p=1;
                    r_b=r_op;
                    r_e=r_1;
                elseif r_0 <=r_op && r_1<=r_op
                    alpha_p=1;
                    r_b=r_op;
                    r_e=r_op;
                elseif r_s>r_0 && r_0>r_op && r_1>=r_cl
                    alpha_e=1;
                    r_b=r_0;
                    r_e=r_cl;
                elseif r_s>r_0 && r_0>r_op && r_1<r_cl
                    alpha_e=1;
                    alpha_p=1;
                    r_b=r_0;
                    r_e=r_1;
                elseif A>r_0 && r_cl>r_0 && r_0>=r_s && r_1>=r_cl
                     alpha_e=1;
                     beta_e=1;
                     r_b=r_0;
                     r_e=r_cl;
                elseif A>r_0 && r_cl>r_0 && r_0>=r_s && r_1<r_cl
                     alpha_e=1;
                     alpha_p=1;
                     beta_e=1;
                     r_b=r_0;
                     r_e=r_1;
                elseif A<=r_0 && r_0<r_cl && r_1>r_cl
                     alpha_e=1;
                     beta_p=1;
                     r_b=r_0;
                     r_e=r_cl;
                elseif A<=r_0 && r_0<r_cl && r_1<=r_cl
                     alpha_e=1;
                     alpha_p=1;
                     beta_p=1;
                     r_b=r_0;
                     r_e=r_1;
                elseif r_0 >= r_cl
                    r_b=r_cl;
                    r_e=r_cl;
                end
                
        end
            M(Idx_1,Idx_2)=alpha_e*(E_c*b/d_c)*((delta_l/2)*((r_b-R)^2-(r_e-R)^2)+(delta_theta/3)*((r_b-R)^3-(r_e-R)^3))+alpha_p*(-F*f_c*b*abs(r_cl-r_e)*(((r_cl+r_e)/2)-R))+beta_e*E_s*A_s*((delta_l/d_s)+(delta_theta/d_s)*(r_s-R))*(r_s-R)+beta_p*f_y*A_s*(r_s-R);
            N(Idx_1,Idx_2)=alpha_e*(E_c*b/d_c)*(delta_l*(r_e-r_b)+(delta_theta/2)*((r_e-R)^2-(r_b-R)^2))+alpha_p*(-F*f_c*b*abs(r_cl-r_e))+beta_e*E_s*A_s*((delta_l/d_s)+(delta_theta/d_s)*(r_s-R))+beta_p*f_y*A_s;
        
            e=M./N;

            
                
            


   end
   if e(Idx_1,Idx_2) >=0.072 && e(Idx_1,Idx_2) < 0.077 || e(Idx_1,Idx_2) <=-0.072 && e(Idx_1,Idx_2) > -0.077;
   G=M;
   end
    
end 

plot(delta_thetavalue,G)

标签: matlab

解决方案


我们无法检查您的函数是如何e工作的,但您是否尝试将条件括在括号中,以便它了解需要成对检查它们?

if (e(Idx_1,Idx_2) >=0.072 && e(Idx_1,Idx_2) < 0.077) || (e(Idx_1,Idx_2) <=-0.072 && e(Idx_1,Idx_2) > -0.077);

如果您评估一次,也可能更容易调试

evaluation = e(Idx_1,Idx_2); // you can print or anything to check the value before the if expression

if (evaluation >=0.072 && evaluation < 0.077) || (evaluation <=-0.072 && evaluation > -0.077);

推荐阅读