MATLAB Answers

0

for文を用いた繰り返し計算におけるエラー

Noruji Muto 님이 질문을 제출함. 19 Sep 2019 6:44
최근 활동 jiro 님이 댓글을 추가함. 22 Sep 2019 12:27
繰り返し計算を行い、
計算の度に得られた値を上書きされることなく保存したいのですが、
「左辺のインデックスが右辺とサイズが適合しないため代入は実行できません」
というエラーが発生しており、解決できずに困っています。
以下にエラー発生箇所までのコードと、表示されたエラーを記載します。
下記のコードは、h1を0~50000の間で1000ずつ増加しながら計算し、
vexitとFintを得る事を目的としています。
F1intに至るまでの計算・コードは、
全てF1及びF1intを得るために必要なものとなっています。
clear
close all
A=1
nd1=0.0039
h1=0:1000:50000
vini=1530
syms r %r=0.3*10^-3~4.96*10^-3
assume(r > 0)
row=3000;
ips=8.854*10^-12
e=1.602*10^-19
k=1.38*10^-23
fai=[-100,-10,5,10,18]
Vg=5000
d=0.08
E=Vg/d
for h1=1:50000
around1(h1)=(h1+(10921*10^3))*pi
t_around(h1)= around1/vini
tin1(h1) =t_around
Vin=A*vini*tin1
nin=Vin.'*nd1
m=(4/3)*pi*(r^3)*row
mdot=nin*m
C=4*pi*ips*r
q=fai*C
FE=E*q
del_VE=sqrt((2*abs(q)*E*d)/m)
vexit1=del_VE
F1(h1)=vexit1*mdot;
F1int=int(F1(h1),[0.3*10^-3 4.96*10^-3],'IgnoreAnalyticConstraints', true);
%F1intは、F1をrで積分しているもの。
end
左辺のインデックスが右辺とサイズが適合しないため、代入は実行できません。
エラー: sym/privsubsasgn (line 1116)
L_tilde2 =
builtin('subsasgn',L_tilde,struct('type','()','subs',{varargin}),R_tilde);
エラー: sym/subsasgn (line 953)
C = privsubsasgn(L,R,inds{:});
エラー: needed_cicle_vs_needed_velocity (line 39)
F1(h1)=vexit1*mdot;

  댓글 수: 0

로그인 to comment.

답변 수: 1

jiro 님의 답변 19 Sep 2019 14:34
 채택된 답변

取り敢えず状況はこの様な感じです。
エラーはメッセージ通り、
F1(h1)=vexit1*mdot;
の行でおきていて、右辺と左辺のデータのサイズ(大きさ)が一致しないという問題です。
エラーが起きた後 vexit1mdot の大きさを確認してみてください。
whos vexit1 mdot
すると vexit1*mdot の大きさがベクトル(1行5列)であることが分かります。ベクトルを F1(h1) という一つの値(1行1列)に代入しようとしているからエラーが起きるのです。

  댓글 수: 2

承知しました。
ありがとうございました。
jiro 22 Sep 2019 12:27
補足しますと、考えられる原因として、右辺の値が間違っていて本当はスカラー(1行1列)の値にならなければならないか、もし本当に1行5列の値であるのでしたらそれに合わせて左辺もその大きさのデータを受けとるように変更する必要があります。例えば最初のループでは1から5番目の要素に代入し、2回目のループでは6から10番目の要素に代入する、という書き方にするなど。

로그인 to comment.