for文による繰り返し計算の結果で、所定の条件を満たしたものをエクセルに随時記入していく方法
12 views (last 30 days)
Show older comments
お世話になります。
この質問は、下記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 Comments
Accepted Answer
Kenta
on 12 Feb 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 Comments
More Answers (0)
See Also
Categories
Find more on スプレッドシート 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!