MatLab は異なるズームレベルで異なるプロットを表示します

MatLab は異なるズームレベルで異なるプロットを表示します

このコードを MatLab で実行しました:

function main
fimplicit (@(x,y)f(x,y),[2 5])
end
function fun = f(x,y)
nc=1.45;    %cladding
nf=1.5;
ns=1.4;    %substrate
h=5;  %width of waveguide
kappa=sqrt(x^2*nf^2-y.^2);
gammas=sqrt(y^2-x^2*ns^2);
gammac=sqrt(y^2-x^2*nc^2);
z=sin(h.*kappa);
%TE mode
fun=z.*(kappa.^2-gammas.*gammac)-cos(h.*kappa).*(gammac+gammas).*kappa;
end

そして、このプロットを得ました: ここに画像の説明を入力してください

(2.5,3.5)付近にズームインすると次のようになります。

ここに画像の説明を入力してください

同じ場所でズームアウトしてからズームインする ここに画像の説明を入力してください

では、これら 3 つのうちどれが正しいのかをどうやって知ればよいのでしょうか。また、このような誤ったプロットを取り除く方法はあるのでしょうか。

同様にDesmosでも

答え1

マトラボ暗黙のは、変数に関して暗黙的に与えられた関数がどのように動作するかを知るための優れた関数です。ただし、関数が「適切」でない場合は、プロットする範囲に応じて、詳細が隠されたり表示されたりする可能性があります。Matlab のドキュメントに従って、

チップ

  • グラフを拡大すると、fimplicit によってデータが再計算され、隠れた詳細が明らかになる場合があります。

Matlab 関数は、プロットするペアを見つけるために関数を数値的に評価し(x,y)、いくつかのポイントを自動的に選択します。そのため、軸の制限が大きすぎる場合 (曲線をプロットするポイントの数が少ない場合) は、細かい詳細が消えてしまう可能性があります。MeshDensity プロパティを増やして、曲線にポイントを追加し、どれが正しいかを確認できます。

fimplicit(f,'MeshDensity',500)  % 151 is the default. Increase this number to add more evaluation points per direction

関連情報