for文で設定された通りの値が表示されない
8 views (last 30 days)
Show older comments
for文で計算を行い、所定の条件を満たす時の各値をエクセルに書き連ねていくのですが、
出力されるはずのない値が出力されるといった問題が発生しています。
この質問は、以下のURLの質問に関連しています。
コードの全体像な流れは下記URLのものと同じですが、細かいところは変更してあります。
以下にコードを示します。
clc
clear
close all
L=0.45;
m1=0;
m2=0.225;%ふりこの腕の質量(0.5[kg/m])
g=9.8;
Lcm1=0.25;
Lcm2=0;%支点からばねまでの距離
Lm1=0;%測定器の重心位置(直交座標で推進機の端をx=0とする。)
r=0.004;%[m]%推進機の半径
F=10^-9;
d=0.001;%ころがり摩擦係数(オーダー仮定)
sita_ss=deg2rad(3);%定常振れ角3度→ラジアン化
count=1;
x=0;%ばねの変位
P=0;%ばねにかかる荷重
a=0.03;%支点から推進機がついていない側への腕の長さ(仮定)
for i=0.1:0.01:5
%for j=0.1:0.01:5
for n=0.01:0.01:0.45
m1=m1+i;
% m2=m2+j;
% Lcm1=Lcm1+n;
%Lcm2=Lcm2+n;
Lm1=((m1*g)*(Lcm1+a)+(m2*g)*(L-a))/((m1+m2)*g);
%直交座標で見たときの重心の距離(支点の中心を0とし、推進機方向に距離は+に大きくなる) Lm2=(r+Lcm1)-Lm1;%重心が推進器側かカウンターウェイト側かの判定(+なら推進器側。-なら)
Lm2=abs(Lm1);%重心の支点からの距離絶対値表記。(マイナスの場合はカウンターウェイト側にある)
k1=((m1)*g*sin(sita_ss)+F*(Lcm1))/(Lcm2^2*sita_ss);%ばねに必要なばね定数
baneT=k1*sita_ss*Lcm2^2;%ばねからの復元トルク
k2=(F*Lcm1)/sita_ss;
%k2=(m2)*g*Lcm2-(m1)*g*(Lcm1);%測定器全体の復元トルク
Lcm2=sqrt(k2+m1*g*Lm1/(k1*sita_ss));
if Lcm2<L;
if k2>0;
T=d*(m1+m2)*g;
p=(((m1)*g*(Lcm1))+(F*(Lcm1)))-(baneT+T);%トルクのつり合い式
x=Lcm2*sita_ss;
P=k1*x;
if p>0
% A={'m1','m2','Lcm1','Lcm2','k'};
% A={'m1','Lcm2','k';m1 m2 Lcm1 Lcm2 k;};
A(count,1:10)=[m1,Lcm2,Lm1,Lm2,k1,baneT,k2,T,P,x];
count=count+1;
end
end
end
end
end
filename = 'kekka.xlsx';
xlswrite(filename,A);
m1は、iによって初期値0.1から始まって刻み幅0.01で、5まで増加させるはずです。
(そのつもりで)
Lcm2は、L(つまり0.45)より小さい時にエクセルに書き込まれます。
それにもかかわらず、実際に出力されたエクセルファイルを見てみると、
m1が5より大きいものが出力されていたり、
Lcm2がLよりも大きいものが普通に出力されています。
現段階で解決策は分かっていません。
どなたか良い方法をご存じの方はご教授願います。
0 Comments
Accepted Answer
Hiroki Okawa
on 19 Feb 2020
for i=0.1:0.01:5
と
m1=m1+i;
を読む限り m1 は 0.1, 0.21, 0.33, ...と増えますね(増加量が増えている)。
m1が 0.1, 0.11, 0.12, 0.13, ...としたい場合
m1 = i;
或いは
for m1 = 0.1 : 0.01 : 5
となるべきではないでしょうか。
More Answers (0)
See Also
Categories
Find more on National Instruments Frame Grabbers 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!