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

32 views (last 30 days)
Noruji Muto
Noruji Muto on 19 Sep 2019
Commented: Jiro Doke on 22 Sep 2019
繰り返し計算を行い、
計算の度に得られた値を上書きされることなく保存したいのですが、
「左辺のインデックスが右辺とサイズが適合しないため代入は実行できません」
というエラーが発生しており、解決できずに困っています。
以下にエラー発生箇所までのコードと、表示されたエラーを記載します。
下記のコードは、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;

Accepted Answer

Jiro Doke
Jiro Doke on 19 Sep 2019
取り敢えず状況はこの様な感じです。
エラーはメッセージ通り、
F1(h1)=vexit1*mdot;
の行でおきていて、右辺と左辺のデータのサイズ(大きさ)が一致しないという問題です。
エラーが起きた後 vexit1mdot の大きさを確認してみてください。
whos vexit1 mdot
すると vexit1*mdot の大きさがベクトル(1行5列)であることが分かります。ベクトルを F1(h1) という一つの値(1行1列)に代入しようとしているからエラーが起きるのです。
  2 Comments
Noruji Muto
Noruji Muto on 22 Sep 2019
承知しました。
ありがとうございました。
Jiro Doke
Jiro Doke on 22 Sep 2019
補足しますと、考えられる原因として、右辺の値が間違っていて本当はスカラー(1行1列)の値にならなければならないか、もし本当に1行5列の値であるのでしたらそれに合わせて左辺もその大きさのデータを受けとるように変更する必要があります。例えば最初のループでは1から5番目の要素に代入し、2回目のループでは6から10番目の要素に代入する、という書き方にするなど。

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!