필터 지우기
필터 지우기

for文で設定された通りの値が表示されない

조회 수: 12 (최근 30일)
Noruji Muto
Noruji Muto 2020년 2월 19일
댓글: Noruji Muto 2020년 6월 25일
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よりも大きいものが普通に出力されています。
現段階で解決策は分かっていません。
どなたか良い方法をご存じの方はご教授願います。

채택된 답변

Hiroki Okawa
Hiroki Okawa 2020년 2월 19일
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
となるべきではないでしょうか。
  댓글 수: 1
Noruji Muto
Noruji Muto 2020년 6월 25일
返信が遅くなり大変申し訳ありません。
お陰で解決しました。
ありがとうございます。

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 データのインポートと解析에 대해 자세히 알아보기

태그

제품


릴리스

R2019a

Community Treasure Hunt

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

Start Hunting!