1

私はこの機能を持っています:

ここに画像の説明を入力 プロットしたいのですが、結果は周期関数だと思います...

私はこれを試しましたが、1ポイントしか得られませんでした:(

x1=-50:0.1:50;
x2=-50:0.1:50;
plot(cos(sqrt(power(x1,2)+power(x2,2)))/(power(x1,2)+power(x2,2)));

私の問題はどこにあり、正しい方法は何ですか?
どんな助けにも感謝します。

4

2 に答える 2

4

それを 3 次元曲面としてプロットする必要があります。たとえば、次を使用しますsurf

[X1, X2] = meshgrid(-5:0.25:5, -5:0.25:5);
F = cos(sqrt(X1 .^ 2 + X2 .^ 2)) ./ (X1 .^ 2 + X2 .^ 2 + 1);
surf(X1, X2, F)

次の 2 点に注意してください。

  1. 分母の「+1」を忘れました。
  2. 視覚化を向上させるために、x1 座標と x2 座標の範囲を縮小しました。

黒いエッジが煩わしく、プロットが乱雑に見える場合は、EdgeColorプロパティを無効にすることでエッジラインを削除できます (ユーザー Shai が指摘したように):

surf(X1, X2, F, 'EdgeColor', 'None')

最終結果は次のようになります。

ここに画像の説明を入力

于 2012-12-16T11:09:26.743 に答える
2
  1. x1との 2 つの入力があるため、これは 3 次元プロットx2です。したがって、plot3を使用する必要があります(または@EitanT が指摘するようにサーフィンするか、3D プロット関数を使用する必要があります)

  2. (-50;-50)ペア, (-49.9;-49.9),...,のみをプロットしてい(50;50)ます。2 つのベクトルから開始するため、おそらくすべての組み合わせをカバーする必要があります。したがって、meshgridを使用します(高次元の場合はndgridもあります):

    x1=-50:0.1:50;
    x2=-50:0.1:50;
    [X1, X2] = meshgrid(x1,x2);
    
  3. ここで行列演算を使用し、このリンクを読むと、要素ごとの演算が必要であることがわかります。 , etca.*bの代わりに、すでに要素ごとの演算 ( と同じ) であり、同等の行列はorです。a*bpower(a,b)a.^bmpower(a,b)a^b

    f = cos(sqrt(power(X1,2)+power(X2,2)))./(power(X1,2)+power(X2,2)+1);
    plot3(X1,X2,f);
    
于 2012-12-16T11:10:06.010 に答える