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

7 vues (au cours des 30 derniers jours)
Noruji Muto
Noruji Muto le 19 Fév 2020
Commenté : Noruji Muto le 25 Juin 2020
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よりも大きいものが普通に出力されています。
現段階で解決策は分かっていません。
どなたか良い方法をご存じの方はご教授願います。

Réponse acceptée

Hiroki Okawa
Hiroki Okawa le 19 Fév 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
となるべきではないでしょうか。
  1 commentaire
Noruji Muto
Noruji Muto le 25 Juin 2020
返信が遅くなり大変申し訳ありません。
お陰で解決しました。
ありがとうございます。

Connectez-vous pour commenter.

Plus de réponses (0)

Produits


Version

R2019a

Community Treasure Hunt

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

Start Hunting!