for文によるエクセルへの繰り返し記入時に発生するエラーについて
3 views (last 30 days)
Show older comments
お世話になります。
for文を用いて計算を行い、所定の条件を満たすものをエクセルに記入したいのですが、
エラーによってできずにいます。
この質問は以下のURLの質問に関連したものです。
for文内でやっている事や、そもそもコーディングによってやりたい事等は以下のURLを参照してください。
現状のコードは以下の通りです。
clc
clear
close all
L=0.26;
m1=0;
m2=0;
m3=0.13;
g=9.8;
Lcm1=0;
F=10^-9;
d=0.0001;%ころがり摩擦係数(オーダー仮定)
for i=0.1:0.01: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>-20
T=d*((m1)+(m2)+m3)*g;
p=(((m1)*g*(Lcm1))+(F*(Lcm1)))-(((m2)*g*Lcm2)+T);%トルクのつり合い式
if p>-20;
A={'m1','m2','Lcm1','Lcm2','k'};
for o=1:1:50;
A={'m1','m2','Lcm1','Lcm2','k';m1 m2 Lcm1 Lcm2 k;};
A(o,1:5)=[m1,m2,Lcm1,Lcm2,k]; %%%エラー発生箇所1
filename = 'kekka.xlsx';
xlswrite(filename,A);
end
end
end
end
end
end
上のコードを稼働させたとき、以下のようなエラーが発生しました。
double から cell に変換できません。
エラー: hantei (line 32)
A(o,1:5)=[m1,m2,Lcm1,Lcm2,k];
hanteiは、私が現在コーディングしている.mファイル名です。
doubleからcellに変換する必要があるようなので、
以下のようにnum2cell()によってcell化を試みました。
(↑のコードの26行目~34行目を抜粋・修正したものです。)
A={'m1','m2','Lcm1','Lcm2','k';m1 m2 Lcm1 Lcm2 k;};
m1=num2cell(m1);
m2=num2cell(m2);
Lcm1=num2cell(Lcm1);
Lcm2=num2cell(Lcm2);
k=num2cell(k);
A(o,1:5)=[m1,m2,Lcm1,Lcm2,k];
filename = 'kekka.xlsx';
xlswrite(filename,A);
結果、以下のようなエラーが発生しました。
'cell' 型の入力引数の演算子 '+' が未定義です。
エラー: hantei (line 15)
m1=m1+i;
演算子の定義の仕方が分からないのですが、
どなたかご存じの方はご教示いただけないでしょうか?
0 Comments
Accepted Answer
Kenta
on 12 Feb 2020
簡単な書き方だと以下のようにすればいかがでしょうか。pが-20より大きければ、Aという変数にどんどん格納していきます。ちょうどエクセルでいうと、1,2,3,4,5のようにセルに値を記入して、どんどん下方向に伸ばしていく感じです。
countという変数で、次に記入する下方向の番地を更新しながら、forが終わるまで繰り返します。
そして最終的に、ループを脱出したらエクセルに保存をします。
clc
clear
close all
L=0.26;
m1=0;
m2=0;
m3=0.13;
g=9.8;
Lcm1=0;
F=10^-9;
d=0.0001;%ころがり摩擦係数(オーダー仮定)
count=1;
for i=0.1:0.01: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>-20
T=d*((m1)+(m2)+m3)*g;
p=(((m1)*g*(Lcm1))+(F*(Lcm1)))-(((m2)*g*Lcm2)+T);%トルクのつり合い式
if p>-20
% A={'m1','m2','Lcm1','Lcm2','k'};
% A={'m1','m2','Lcm1','Lcm2','k';m1 m2 Lcm1 Lcm2 k;};
A(count,1:5)=[m1,m2,Lcm1,Lcm2,k]; %%%エラー発生箇所1
count=count+1;
end
end
end
end
end
filename = 'kekka.xlsx';
xlswrite(filename,A);
3 Comments
Kenta
on 13 Feb 2020
書き込みに成功したようでよかったです。
そうですね、おそらく該当する組み合わせが存在しなかったものと思います。トルクの釣り合い式が少しちがうのか、ほかの場所で軽微なミスがあるのかもしれません、、、
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!