以下のコードでcqに​数値が出力されないの​で、改善方法を教えて​ください

7 ビュー (過去 30 日間)
篤朗
篤朗 2024 年 9 月 26 日
回答済み: UDAYA PEDDIRAJU 2024 年 9 月 30 日
% 座標
a = [-90, -70, -50, -30, 20, 40, 60, 80]; % X座標
b = [-90, -70, -50, -30, 20, 40, 60, 80]; % Y座標
c = sin(a) + cos(b);        % Z座標
% グリッド生成
[aq, bq] = meshgrid(linspace(-90, 80, 100), linspace(-90, 80, 100));
% スプライン補間
cq = griddata(a, b, c, aq, bq, 'cubic'); % cubicはスプライン補間
% 等高線プロット
contour(aq, bq, cq, 'ShowText', 'on');
colorbar;
title('等高線プロット(スプライン補間)');
xlabel('X座標');
ylabel('Y座標');
このコードを実行すると、aqとbqには100×100の数値が格納されますが、cqは空集合となってしまいます。エラーコードにはaqとbqとcqのデータの列数と行数が一致していませんと出るだけなので、何処が間違っているのかわかりません。
恐らく私のgriddataの理解が甘いのではないかと思っています。

回答 (1 件)

UDAYA PEDDIRAJU
UDAYA PEDDIRAJU 2024 年 9 月 30 日
There's a mismatch in the data requirement of "griddata" function, you can read about it in documentation:
I have worked on the code and modified like this:
% Define a more diverse set of coordinates to avoid collinearity
a = [-90, -70, -50, -30, 20, 40, 60, 80]; % X座標
b = [-90, -80, -60, -40, 10, 30, 50, 70]; % Y座標 (changed to avoid collinearity)
% Calculate Z座標, converting degrees to radians
c = sin(deg2rad(a)) + cos(deg2rad(b));
% Create grid for contour plot
[aq, bq] = meshgrid(linspace(-90, 80, 100), linspace(-90, 80, 100));
% Interpolate data using cubic spline
cq = griddata(a, b, c, aq, bq, 'cubic');
% Debugging outputs
disp('Size of aq:');
disp(size(aq));
disp('Size of bq:');
disp(size(bq));
disp('Size of cq:');
disp(size(cq));
% Check dimensions
if isempty(cq) || any(isnan(cq(:))) % Check if cq has valid values
warning('Interpolation resulted in NaN values or empty output. Check input data.');
cq(isnan(cq)) = 0; % Replace NaNs with 0
end
% Plot contour only if dimensions match
if size(cq, 1) == size(aq, 1) && size(cq, 2) == size(bq, 2)
contour(aq, bq, cq, 'ShowText', 'on');
colorbar;
title('等高線プロット(スプライン補間)');
xlabel('X座標');
ylabel('Y座標');
else
error('Dimensions of Z data (cq) do not match grid dimensions. Sizes: aq (%d,%d), bq (%d,%d), cq (%d,%d)', ...
size(aq, 1), size(aq, 2), size(bq, 1), size(bq, 2), size(cq, 1), size(cq, 2));
end

カテゴリ

Help Center および File Exchangeビッグ データの処理 についてさらに検索

タグ

製品


リリース

R2023b

Community Treasure Hunt

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

Start Hunting!