for文によるエクセルへの繰り返し記入時に発生するエラーについて
조회 수: 4 (최근 30일)
이전 댓글 표시
お世話になります。
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
채택된 답변
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
2020년 2월 13일
書き込みに成功したようでよかったです。
そうですね、おそらく該当する組み合わせが存在しなかったものと思います。トルクの釣り合い式が少しちがうのか、ほかの場所で軽微なミスがあるのかもしれません、、、
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 スプレッドシート에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!