【问题标题】:Dimensions issus尺寸问题
【发布时间】:2013-10-17 16:20:09
【问题描述】:

找到波高和波长的最大值

dwcL01 虽然dwcL10 是<3001x2 double> 的数组,输出来自数值波模型。

我的部分脚本:

%% Plotting results from SWASH
% Examination of phase velocity on deep water with different number of layers
% Wave height 3 meters, wave peroid 8 sec on a depth of 30 meters
clear all; close all; clc;
T=8;
L0=1.56*T^2;

%% Loading results tabels.
load dwcL01.tbl; load dwcL02.tbl; load dwcL03.tbl; load dwcL04.tbl;
load dwcL05.tbl; load dwcL06.tbl; load dwcL07.tbl; load dwcL08.tbl;
load dwcL09.tbl; load dwcL10.tbl;
M(:,:,1) = dwcL01; M(:,:,2) = dwcL02; M(:,:,3) = dwcL03; M(:,:,4) = dwcL04;
M(:,:,5) = dwcL05; M(:,:,6) = dwcL06; M(:,:,7) = dwcL07; M(:,:,8) = dwcL08;
M(:,:,9) = dwcL09; M(:,:,10) = dwcL10;

%% Finding position of wave crest using diff and sign.
for ii=1:10
    Tp(:,1,ii) = diff(sign(diff([M(1,2,ii);M(:,2,ii)]))) < 0;
    Wc(:,:,ii) = M(Tp,1,ii);
    L(:,ii) = diff(Wc(:,1,ii))
end

循环

for ii=1:10
    Tp(:,1,ii) = diff(sign(diff([M(1,2,ii);M(:,2,ii)]))) < 0;
    Wc(:,:,ii) = M(Tp,1,ii);
    L(:,ii) = diff(Wc(:,1,ii))
end

适用于 ii = 1 得到以下错误 ii = 2

Index exceeds matrix dimensions.

Error in mkPlot (line 19)
   Wc(:,:,i) = M(Tp,:,i);

对于不同的设置不要有相同数量的波峰,M(Tp,1,ii) 自然会有不同的尺寸。我该如何解决这个问题?可以在for循环中完成吗?请随时给我发电子邮件或以其他方式询问更多信息。

【问题讨论】:

  • 您可以尝试将Wc 转换为单元格:Wc{i} = M(Tp,:,i)。那么您不必担心for-loop 的每个实例中M(Tp,:,i) 的大小不同。
  • 另外:每次迭代时Tp 的大小是多少?也许分配M(Tp,:,i) 会产生问题。

标签: matlab multidimensional-array


【解决方案1】:

问题在于Tp 是一个三维数组。我需要调用与当前场景对应的Tp(:,:,ii)。连同此并将Wc 定义为单元格,我解决了我的问题。

for ii = 1:10
    Tp(:,1,ii) = diff(sign(diff([M(1,2,ii);M(:,2,ii)]))) < 0;
    Wc{:,:,ii} = M(Tp(:,:,ii),1,ii);
    L{:,ii} = diff(cell2mat(Wc(ii)));
end

【讨论】:

    猜你喜欢
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 2012-11-05
    • 2016-08-21
    • 2023-03-26
    • 2019-01-25
    相关资源
    最近更新 更多