関数findのエラーについて 【MATLAB function Simulinkブロック】

7 vues (au cours des 30 derniers jours)
s
s le 9 Déc 2019
Commenté : s le 16 Déc 2019
find関数の後にERRORが発生してしまいます
Simulinkの診断ビューワーには、以下のような表示がされていました。
MATLABのプログラム初心者なので配列の何が問題なのかよく分かりません。
インデックスが配列の次元を超えています。インデックス値 2 は配列 dd の有効範囲 [1 ~ 1] を超えています。
Error in 'test/MATLAB Function1'
dd(k,1) = Td(1,zz(1,1));
function [a,b,c,d] = fcn(u, g, ms, x2, T, d)
amx=g*ms;
xd = -50:0.5:0;
yy2 = 1:0.25:4;
ny2 =length(yy2);
for k=1:ny2
y2 = yy2(1,k);
       y1=zeros(1,length(xd));
Td=zeros(1,length(xd));
Vr=zeros(1,length(xd));
Tr=zeros(1,length(xd));
for i=1:length(xd)
yd1(1,i) = -y2*xd(1,i)/(x2-xd(1,i))-d/2;
Td(1,i) = ((yd1(1,i))/100);
Vr(1,i) = amx * ((T^2+(-4*xd(1,i))/2));
Tr(1,i) = (-xd(1,i)/Vr(1,i));
end
zz = find(Td>Tr);
dd= zeros(length(k),1);  
dr = zeros(length(k),1);
dxpd = zeros(length(k),1);
dypd = zeros(length(k),1);
dVr = zeros(length(k),1);
dy2 = zeros(length(k),1);
dd(k,1) = Td(1,zz(1,1));     %% ※ERROR が発生する箇所
dr(k,1) = Tr(1,zz(1,1));     %% ※ERROR が発生する箇所
dxpd(k,1) = xd(1,zz(1,1));    %% ※ERROR が発生する箇所
dypd(k,1) = yd1(1,zz(1,1));    %% ※ERROR が発生する箇所
dVr(k,1) = Vr(1,zz(1,1))*3; %% ※ERROR が発生する箇所
dy2(k,1) = y2-1/2;
%{
~~~~プログラム途中省略~~~~~~
%}
end
y = u;

Réponse acceptée

michio
michio le 9 Déc 2019
for ループ内の
dd= zeros(length(k),1);
では dd は 1x1 の配列で定義されてしまっているので、dd(2,1) との参照ができないのかと思います。
dd= zeros(length(k),1);  
dr = zeros(length(k),1);
dxpd = zeros(length(k),1);
dypd = zeros(length(k),1);
dVr = zeros(length(k),1);
dy2 = zeros(length(k),1);
を k のループ開始前に length(k) を ny2 に変えて定義するというのはいかがでしょう?
  11 commentaires
michio
michio le 11 Déc 2019
試しに・・
Vr = amx*(-T+(T.^2+(-4*xd)/(2*amx)).^0.5);
と ^0.5 の前に . を追加するとどうですか?
s
s le 16 Déc 2019
ありがとうございます。最初のスクリプト.mファイルと同じ数値が算出できました。

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur イベント関数 dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!