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

조회 수: 4 (최근 30일)
Noruji Muto
Noruji Muto 2020년 2월 12일
댓글: Noruji Muto 2020년 2월 14일
お世話になります。
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;
演算子の定義の仕方が分からないのですが、
どなたかご存じの方はご教示いただけないでしょうか?

채택된 답변

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

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

제품


릴리스

R2019a

Community Treasure Hunt

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

Start Hunting!