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

조회 수: 4 (최근 30일)
s
s 2019년 12월 9일
댓글: s 2019년 12월 16일
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;

채택된 답변

michio
michio 2019년 12월 9일
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
michio
michio 2019년 12월 11일
試しに・・
Vr = amx*(-T+(T.^2+(-4*xd)/(2*amx)).^0.5);
と ^0.5 の前に . を追加するとどうですか?
s
s 2019년 12월 16일
ありがとうございます。最初のスクリプト.mファイルと同じ数値が算出できました。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 一般分野への適用에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!