matlab - 循环中的 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)
解决方案
我们无法检查您的函数是如何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);
推荐阅读
- html - 我必须设置打印布局。材料超出 A4 页
- javascript - 带 foreach 的循环插入
- kubernetes - 改变 Kubernetes 工作的形象
- amazon-s3 - 如何使用 Kafka connect s3 sink 连接器标记 S3 存储桶对象
- python - 如何选择一组行而不是单行?
- python - [错误 18] 是否有解决方法:使用 Popen 调用“pip”时跨设备链接无效?
- regex - 如何使一张纸上的列仅包含另一列中的值或所述值的组合?
- neo4j - 如何在可能不存在属性的关系列表上使用 REDUCE?
- ruby-on-rails - Rails 4中模型的未定义方法“each_with_index”
- angular - 带有自定义范围按钮的角度日期选择器