質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.46%
MATLAB

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

Q&A

解決済

1回答

833閲覧

条件を満たした場合のみ計算を行いたいです。(MATLAB)

yuki.m.0525

総合スコア9

MATLAB

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

0グッド

0クリップ

投稿2021/12/12 06:39

#条件を満たした場合のみ計算を行いたいです。(MATLAB)
if文とforループを用いてコードを作成しているのですが、上手くいきません。

コードの概要としては、以下になります。

MATLAB

1or od = 1:ODNum 2 3 for link = 1:STLinkNum 4 if link >210 5 a = 0; 6 end 7 8 if STLink(link,2) == 11||STLink(link,2) ==12||STLink(link,2) == 13%タイプを指す(移動リンク) 9 STLinkUtility(od,link) = B; 10 11 elseif STLink(link,2) == 21||STLink(link,2) == 22%アクティビティリンク 12 13 if STLink(link,12) == ODActivityData(od,1) 14 sigma =; 15 lambda =; 16 xi =; 17 U_max =; 18 U_0 =; 19 A = 1; 20 21 22 elseif STLink(link,12) == ODActivityData(od,11) 23 sigma =; 24 lambda =; 25 xi =; 26 U_max =; 27 U_0 =; 28 A = 1; 29 30 elseif STLink(link,12) == ODActivityData(od,17) 31 sigma =; 32 lambda =; 33 xi =; 34 U_max =; 35 U_0 =; 36 A = 1; 37 38 39 else A = 0; 40 41 if A == 1 42 43 t1 =44 t2 =45 46 STLinkUtility = C 47 48 49 else 50 51 t1 =52 t2 =53 54 STLinkUtility = D 55 56 57 end 58 59 60 end 61 62 end 63 64 end 65 66end

STLinkUtilityについて行いたい作業のフローを以下に書きます。

①タイプが11、12、13である場合はSTLinkUtility=B という計算を行う。

②タイプが21、22であり、かつSTLink(link,12) == ODActivityData(od,1)、
またはSTLink(link,12) == ODActivityData(od,11)、
またはSTLink(link,12) == ODActivityData(od,17)

 の3パターンである場合は
STLinkUtility=C
という計算を行う。

③タイプが21、22であり、②の3パターンでない場合は
STLinkUtility=D
という計算を行いたい。

フロー番号②と③を差別化するために②であるときはA=1を付加しており、③であるときはA=0を付加しています。

このコードで上記の作業ができますでしょうか?
デバッカーで確かめたところ、Cの計算ができていませんでした。

MATLAB、teratail初心者のため分かりにくい表記で申し訳ございません。

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

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

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

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

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

guest

回答1

0

ベストアンサー

フロー番号②と③を差別化するために②であるときはA=1を付加しており、③であるときはA=0を付加しています。
このコードで上記の作業ができますでしょうか?
デバッカーで確かめたところ、Cの計算ができていませんでした。

意図した処理はできないと思いました。

if STLink(link,12) == ODActivityData(od,1)の中でA = 1;したからといって
else A = 0;の中に入るわけではないと思いました。

同じレベルのifelseifelseで、一度入ったブロックから別のブロックの中に入ることはないと思いますので、それを考慮した上で、処理を組み直すのが良いと思いました。

elseif ブロックおよび else ブロックはオプションです。これらのステートメントは、直前の if...end ブロックの式が false の場合にのみ実行されます。

https://jp.mathworks.com/help/matlab/ref/if.html?searchHighlight=if&s_tid=srchtitle_if_1

投稿2021/12/12 08:45

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yuki.m.0525

2021/12/13 01:47

仰る通りでした 解決できました。 ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問