for文によるエクセ​ルへの繰り返し記入時​に発生するエラーにつ​いて

9 views (last 30 days)
Noruji Muto
Noruji Muto on 12 Feb 2020
Commented: Noruji Muto on 14 Feb 2020
お世話になります。
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;
演算子の定義の仕方が分からないのですが、
どなたかご存じの方はご教示いただけないでしょうか?

Accepted Answer

Kenta
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
Kenta on 13 Feb 2020
書き込みに成功したようでよかったです。
そうですね、おそらく該当する組み合わせが存在しなかったものと思います。トルクの釣り合い式が少しちがうのか、ほかの場所で軽微なミスがあるのかもしれません、、、
Noruji Muto
Noruji Muto on 14 Feb 2020
式は合っているはずです。
おかげで解決しました。ありがとうございました。

Sign in to comment.

More Answers (0)

Products


Release

R2019a

Community Treasure Hunt

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

Start Hunting!