フィルターのクリア

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 Center および File Exchangeデータのインポートと解析 についてさらに検索

タグ

製品


リリース

R2019a

Community Treasure Hunt

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

Start Hunting!