3

次のような 2 つの for ループがあります。

for x = 1:1:15
    for y = 1:1:15
        values(x,y) = x^2 + y
    end
end

これにより、x と y が整数の場合、x と y のすべての組み合わせに対して x^2 + y を計算できます。

しかし、小数についても x^2 + y を計算したい場合はどうすればよいでしょうか?

だから、このようなもの:

for x = 0:0.1:15
    for y = 0:0.1:15
        ????? = x^2 + y
    end
end

x と y が 10 進数の場合、x^2 + y のすべての可能性を計算できる方法を見つけるのを手伝ってくれる人はいますか?

4

4 に答える 4

5

meshgridを使用すると、matlab に組み込まれている 2 次元の長方形グリッドが使用され、ループする必要はありません。

[y x]=meshgrid(0:0.1:15)
values=x.^2+y

これを視覚化するには:

imagesc(values);
title('values=x^2+y'); axis square
xlabel('x'); ylabel('y'); colorbar;
axis xy;
set(gca,'XTick',1:10:151,'YTick',1:10:151);
set(gca,'XTickLabel',0:1:15,'YTickLabel',0:1:15);

ここに画像の説明を入力

編集: mdgridまた、注意すべき唯一のことはそれ[y x]=meshgrid...が同じ であることです[x y]=ndgird...

于 2013-05-22T04:09:18.560 に答える
3

使用する:

[x y] = ndgrid(0:0.1:15);
values = x.^2 + y;

他の回答の問題:

  1. @inigoの答えは、最初の例と比較して と の順序を変更しxますy(.meshgridndgrid
  2. @NominSimの答えは、余分な努力をしなければなりませd_xx
  3. @mecidの答えは、列と行を別々にカウントする必要があります(MATLABには++演算子もありません)。@mecid のルートをたどるとしたら、次のようにします。
x = 0:.1:15;
y = 0:.1:15;
values = zeros(numel(x),numel(y));
for xnum = 1:numel(x)
    for ynum = 1:numel(y)
        values(xnum,ynum) = x(xnum)^2 + y(ynum);
    end
end

meshgridとの違いに関するドキュメント (オンライン ドキュメントではなく MATLAB 内) から、いくつかの議論が生成されたためndgrid:

meshgridndgrid、最初の 2 つの入力引数と出力引数の順序が入れ替わる (つまり、[X,Y,Z] = meshgrid(x,y,z)と同じ結果を生成する) ことを除いて同様[Y,X,Z] = ndgrid(y,x,z)です ...meshgridも 2D または 3D に制限されます。

于 2013-05-22T04:17:23.350 に答える
2
for x =1:0.1:15
  for y=1:0.1:15
    values(x*10-10, y*10-10) =x^2+y;
  end
end
于 2013-05-22T03:58:34.690 に答える
1

1 から 151 までの整数をループしてから、使用する小数を計算してみませんか? その後、引き続きインデックス参照を使用できます。

すなわち

for x = 1:1:151
    for y = 1:1:151
        d_x = x / 10.0 - 0.1
        d_y = y / 10.0 - 0.1
        values(x,y) = d_x^2 + d_y
    end
end

(しばらく MATLAB を使用していないため、構文が少しずれている場合はご容赦ください)。

于 2013-05-22T03:58:17.087 に答える