🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

Q&A

解決済

2回答

3280閲覧

for文を用いた繰り返し計算におけるインデックスのエラー

Homo_sapiens

総合スコア16

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

0グッド

0クリップ

投稿2019/09/19 14:30

前提・実現したいこと

所定の計算を行い、h1=0~50000の間を1000刻みで増加させながらfor文による繰り返し計算によって各h1の値におけるvexitやF1,F1intを得ることが目的です。

コードはvexit,F1,F1intを求めるための数式群です。
F1intは、F1をrで定積分したものです。

この計算を回そうとしたのですが、
「左辺のインデックスが右辺とサイズが適合しないため、代入は実行できません」
と表示され、計算が行えない状態になっており困っています。

発生している問題・エラーメッセージ

左辺のインデックスが右辺とサイズが適合しないため、代入は実行できません。 エラー: 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;

該当のソースコード

clear close all %nd=[0.0018,0.0036,0.0039] 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+(10921*10^3))*pi t_around= around1/vini tin1=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); end

試したこと

for~endの中の式全てに(h1)を入れてみましたが、駄目でした。

for h1=1:50000
around1(h1)=(h1+(1092110^3))pi
t_around(h1)= around1/vini
tin1(h1)=t_around
Vin(h1)=A
vini
tin1
nin(h1)=Vin.'nd1
m(h1)=(4/3)pi(r^3)row
mdot(h1)=nin
m
C(h1)=4
piipsr
q(h1)=faiC
FE(h1)=E
q
del_VE(h1)=sqrt((2abs(q)Ed)/m)
vexit1(h1)=del_VE
F1(h1)=vexit1
mdot;
F1int=int(F1(h1),[0.310^-3 4.9610^-3],'IgnoreAnalyticConstraints', true);
end

補足情報(FW/ツールのバージョンなど)

使用バージョンはR2019aです。

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

faiが配列になっているからです。

q=faiC <----------- qはfaiと同じサイズの配列
FE=E
q
del_VE=sqrt((2abs(q)Ed)/m) <----------- del_VEはfaiと同じサイズの配列
vexit1=del_VE <----------- vexit1はfaiと同じサイズの配列
F1(h1)=vexit1
mdot;<----------- F1(h1)はスカラー、しかし右辺はfaiと同じサイズの配列。ここでエラー。

投稿2019/09/21 00:09

WathMorks

総合スコア1582

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Homo_sapiens

2019/09/24 08:33

承知しました。ありがとうございました。
guest

0

回答じゃなくて申し訳ないけど、
エラーを英語で出力して検索かけると情報が見つかることもあるよ。

投稿2019/09/19 18:18

yokuda

総合スコア138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Homo_sapiens

2019/09/24 08:34

参考になりました。 やってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問