Effacer les filtres
Effacer les filtres

for文による繰り返​し計算の結果で、所定​の条件を満たしたもの​をエクセルに随時記入​していく方法

29 vues (au cours des 30 derniers jours)
Noruji Muto
Noruji Muto le 11 Fév 2020
Commenté : Noruji Muto le 12 Fév 2020
お世話になります。
この質問は、下記URLの質問に関連した内容になっています。
プログラムの背景等を知りたい方はこちらを参照してください。
for文で作ったいくつかの数式において所定の条件を満たす数値の組み合わせを、
エクセルファイルに書き込んで行きたいのですが、やり方がわかりません。
エクセルファイルへの書き込みのイメージとしては下図のような感じで、
for文内で指定している条件を満たす時の数値をそれぞれ記入していく感じです。
(表上側のm1等の文字類は、後でコード内で使用するものです。)
表の縦方向のセル数(行数)は、
条件式に当てはまる数値の組み合わせがあるだけ生成されるようにしたいのですが、
そのやり方がわかりません。
以下に現状のコードを示します。
clc
clear
close all
L=0.260
m3=0.13
g=9.8
Lcm2=L-Lcm1
F=10^-9
d=0.01%ころがり摩擦係数(オーダー仮定)
for i =0.1:0.1:5
for j=0.1:0.01:5
for n=0.01:0.01:0.26
m1=i
m2=j
Lcm1=n
k=(m2)*g*Lcm2-(m1)*g*(Lcm1)
if k>0
T=d*((m1)+(m2)+m3)*g
p=(((m1)*g*(Lcm1))+(F*(Lcm1)))-(((m2)*g*Lcm2)+T)
if p>0
A=A(1:5,:)%この辺以降がわかりません
A={'m1','m2','Lcm1','Lcm2','k';m1 m2 Lcm1 Lcm2 k}
A(:,1:5)
filename = 'data114514.xlsx';
writetable(A,filename,'Sheet',1,'Range','B1::')
end
end
end
end
end
for文内でやりたい事は以下の通りです。
①m1,m2を0.1を初期値として0.1の刻み幅で5まで増加させる
②Lcm1は0.01を初期値として0.01の刻み幅で0.26まで増加する。
③Lcm2は、=L-Lcm1と定義。Lは0.26で固定
④k>0の時、Tとpの算出に進む。
⑤p>0の時(つまりk>0も満たしているとき),
⑥その時の'm1','m2','Lcm1','Lcm2','k'の値を随時エクセルに書き込んで表を作成
また、
エクセルファイルを作る場所を指定する方法をご存じの方は是非教えていただけないでしょうか?
作ったはずのファイルを検索にかけても見つからない問題が発生しています。
よろしくお願いいたします。
  2 commentaires
stozaki
stozaki le 11 Fév 2020
7行目のLcm1が未定義となっていますので、定義して頂けますか?
Noruji Muto
Noruji Muto le 12 Fév 2020
stozaki様
以下のように修正してみました。
・9行目にLcm1=0を追加
・15~17行目のm1,m2,Lcm1の定義を、元の値+i or j or k といった感じに変えました。
エクセルファイルが生成された、
または既存の同名のエクセルファイルにデータが書き込まれた様子は未だありません。
clc
clear
close all
L=0.260
m1=0
m2=0
m3=0.13
g=9.8
Lcm1=0
F=10^-9
d=0.01%ころがり摩擦係数(オーダー仮定)
for i =0.1:0.1:5
for j=0.1:0.01:5
for n=0.01:0.01:0.26
m1=m1+i
m2=m2+j
Lcm1=Lcm1+n
Lcm2=L-Lcm1
k=(m2)*g*Lcm2-(m1)*g*(Lcm1)
if k>0
T=d*((m1)+(m2)+m3)*g
p=(((m1)*g*(Lcm1))+(F*(Lcm1)))-(((m2)*g*Lcm2)+T)%トルクのつり合い式
if p>0
A=A(1:5,:)
A={'m1','m2','Lcm1','Lcm2','k';m1 m2 Lcm1 Lcm2 k}
A(:,1:5)
filename = 'data114514.xlsx';
writetable(A,filename,'Sheet',1,'Range','B1::')
end
end
end
end
end

Connectez-vous pour commenter.

Réponse acceptée

Kenta
Kenta le 12 Fév 2020
こんにちは、こちらにあるように、「;」を各行の最後に打って、コマンドウィンドウにその都度結果が出力されないようにしたほうが良いと思います。https://jp.mathworks.com/matlabcentral/answers/501053-
保存のほうですが、さらっと見た限りでは、セル配列でAが出力されるようなので、以下のようにwritecellで対応すればよろしいかと思います。エクセルにも保存されました。
今回の係数では、pの値が正になることはなく、ループ内のコードが実行されなかったため、保存のコードも実行されず、エクセルファイルが出力されなかったのではないでしょうか。
ひとまず、望んだ値がこのコードで出力されているかはわかりませんが、Aで定義された変数はdata114514.xlsxという名前で保存できていると思います。
clc
clear
close all
L=0.260;
m1=0;
m2=0;
m3=0.13;
g=9.8;
Lcm1=0;
F=10^-9;
d=0.01;%ころがり摩擦係数(オーダー仮定)
for i =0.1:0.1:5
for j=0.1:0.01:5
for n=0.01:0.01:0.26
m1=m1+i;
m2=m2+j;
Lcm1=Lcm1+n;
Lcm2=L-Lcm1;
k=(m2)*g*Lcm2-(m1)*g*(Lcm1);
if k>0
T=d*((m1)+(m2)+m3)*g;
p=(((m1)*g*(Lcm1))+(F*(Lcm1)))-(((m2)*g*Lcm2)+T);%トルクのつり合い式
if p>0
A=A(1:5,:);
A={'m1','m2','Lcm1','Lcm2','k';m1 m2 Lcm1 Lcm2 k};
filename = 'data114514.xlsx';
writecell(A,filename)
end
end
end
end
end
  9 commentaires
Kenta
Kenta le 12 Fév 2020
承知いたしました。またご不明な点がございましたらご連絡ください。よろしくお願いいたします。
Noruji Muto
Noruji Muto le 12 Fév 2020
お世話になっています。
不明点が出てきましたので新しく質問スレッドを立ち上げました。

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

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

Start Hunting!