関数findのエラーについて 【MATLAB function Simulinkブロック】
    6 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
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;
0 commentaires
Réponse acceptée
  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
    
 le 11 Déc 2019
				試しに・・
Vr = amx*(-T+(T.^2+(-4*xd)/(2*amx)).^0.5);
と ^0.5 の前に . を追加するとどうですか?
Plus de réponses (0)
Voir également
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!