簡體   English   中英

下標分配尺寸不匹配錯誤

[英]Subscripted Assignment Dimension Mismatch Error

我正在嘗試在500 x 500的盒子中模擬球及其x和y位置在特定時間內的碰撞。 每當我嘗試以不同的時間步長( h )運行腳本時,都會不斷出現錯誤:

下標分配尺寸不匹配。

global h
h_vector=[0.1 0.01 0.001];
t=0:h:500;

for j=1:length(h_vector)
h=h_vector(j);
[xout2,yout2]=walls_euler_method2e;
xout3(j,:)=xout2;
yout3(j,:)=yout2;
end
xout3;
yout3;

function [xout2,yout2]=walls_euler_method2e
global h
f1=5;%dx/dt
f2=-3;%dy/dt
x(1)=0;
y(1)=0;
t=0:h:500;
r=5;%radius of ball
hit_vertical_wall_left_first=0;
hit_horizontal_wall_down_first=0;
vertical_wall_left=250;
vertical_wall_right=-250;
horizontal_wall_up=250;
horizontal_wall_down=-250;
for i=2:length(t)
x(i)=x(i-1)+h.*f1;
y(i)=y(i-1)+h.*f2;
if x(i)==vertical_wall_left-r
    f1=-f1;
hit_vertical_wall_left_first=1;
elseif x(1)==vertical_wall_right+r&&hit_vertical_wall_left_first==1;
    f1=-f1;
else
    fl=f1;

 if y(i)==horizontal_wall_down+r
     f2=-f2;
     hit_horizontal_wall_down_first=1;

 elseif y(i)==horizontal_wall_up-r&&hit_horizontal_wall_down_first==1;
      f2=-f2;
 else
     f2=f2;
 end
end
end

xout2=x;
yout2=y;

簡單修復:使用單元格數組:

xout3{j} = xout2;
yout3{j} = yout2;

您以h為步長定義t ,並且由於h變小,所以t的長度增加,因此xout2xout2 單元格數組允許使用大小不同的矩陣,您可以使用花括號而不是圓形括號來稱呼它們。

請注意,將ij用作變量不好的做法 還要避免使用global變量,最好將變量傳遞給實際函數,請參見修改后的代碼:

function [xout2,yout2]=walls_euler_method2e(h)
f1=5;%dx/dt
f2=-3;%dy/dt
x(1)=0;
y(1)=0;
t=0:h:500;
r=5;%radius of ball
hit_vertical_wall_left_first=0;
hit_horizontal_wall_down_first=0;
vertical_wall_left=250;
vertical_wall_right=-250;
horizontal_wall_up=250;
horizontal_wall_down=-250;
for ii=2:length(t)
    x(ii)=x(ii-1)+h.*f1;
    y(ii)=y(ii-1)+h.*f2;
    if x(i)==vertical_wall_left-r
        f1=-f1;
        hit_vertical_wall_left_first=1;
    elseif x(1)==vertical_wall_right+r&&hit_vertical_wall_left_first==1;
        f1=-f1;
    else
        fl=f1;

        if y(i)==horizontal_wall_down+r
            f2=-f2;
            hit_horizontal_wall_down_first=1;

        elseif y(ii)==horizontal_wall_up-r&&hit_horizontal_wall_down_first==1;
            f2=-f2;
        else
            f2=f2;
        end
    end
end

xout2=x;
yout2=y;
end

腳本:

h_vector=[0.1 0.01 0.001];
for jj=1:length(h_vector)
    t = 0:h_vector(jj):500;
    [xout2,yout2]=walls_euler_method2e(h_vector(jj));
    xout3{jj}=xout2;
    yout3{jj}=yout2;
end

結果是:

xout3 = 
    [1x5001 double]    [1x50001 double]    [1x500001 double]
yout3 = 
    [1x5001 double]    [1x50001 double]    [1x500001 double]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM