Estoy intentando obtener un gráfico de dispersión de guía de onda de losa como este (línea discontinua): Intenté el siguiente código en Matlab:
function main
fimplicit (@(x,y)f(x,y),[0 10])
end
function fun = f(x,y)
nc=1.45; %cladding
nf=1.5;
ns=1.4; %substrate
h=5; %width of waveguide
beta=sqrt(x^2*nf^2-y.^2);
gammas=sqrt(beta.^2-x^2*ns^2);
gammac=sqrt(beta.^2-x^2*nc^2);
z=sin(h*y);
%TE mode
fun=z-cos(h*y)*(gammac+gammas)./(y-gammas.*gammac./y);
end
Usando Desmos:
Usando Matemática:
nc = 1.45;
nf = 1.5;
ns = 1.4;
h = 5;
ContourPlot[
Sin[h y]*(y^2 - (Sqrt[x^2*(nf^2 - nc^2) - y^2]*
Sqrt[x^2*(nf^2 - ns^2) - y^2])) ==
Cos[h y]*(Sqrt[x^2*(nf^2 - nc^2) - y^2] +
Sqrt[x^2*(nf^2 - ns^2) - y^2])*y, {x, 0, 10}, {y, 0.1, 10}]
Todas las parcelas están en excelente acuerdo con la forma esperada. Sin embargo, el gráfico original tiene un color diferente para cada rama, ¿cómo puedo implementar esto en MatLab, Desmos o Mathematica??
Respuesta1
Matemáticas
Actualizar
Agregue leyenda, use un color amarillo más oscuro.
colors = {Blue, Green, Red, Cyan, Magenta, RGBColor["#cdcd41"]};
labels = MapThread[
ToString[Subscript[Style["TE", Bold, 16, #2],
Style[ToString@#1, Bold, 12, #2]], StandardForm] &, {Range[0, 5], colors}];
legend = LineLegend[colors, labels, LegendLayout -> "ReversedColumn", LegendMarkerSize -> 20];
plot = ContourPlot[
Sin[h y]*(y^2 - (Sqrt[x^2*(nf^2 - nc^2) - y^2]*
Sqrt[x^2*(nf^2 - ns^2) - y^2])) ==
Cos[h y]*(Sqrt[x^2*(nf^2 - nc^2) - y^2] +
Sqrt[x^2*(nf^2 - ns^2) - y^2])*y, {x, 0, 10}, {y, 0, 4}, PlotLegends -> legend];
coloredLines = Riffle[colors, Cases[plot, _Line, Infinity]];
plot /. {a___, Repeated[_Line, {6}], c___} :> {a, Sequence @@ coloredLines, c}
Respuesta original
No pude encontrar una manera de usar ContourPlot
opciones para colorear las líneas de un gráfico de función implícita. Aquí hay una forma (truco) de hacerlo postprocesando la expresión de la trama.
plot = ContourPlot[
Sin[h y]*(y^2 - (Sqrt[x^2*(nf^2 - nc^2) - y^2]*
Sqrt[x^2*(nf^2 - ns^2) - y^2])) ==
Cos[h y]*(Sqrt[x^2*(nf^2 - nc^2) - y^2] +
Sqrt[x^2*(nf^2 - ns^2) - y^2])*y, {x, 0, 10}, {y, 0, 4}];
coloredLines = Riffle[{Blue, Green, Red, Cyan, Magenta, Yellow}, Cases[plot, _Line, Infinity]];
plot /. {a___, Repeated[_Line, {6}], c___} :> {a, Sequence @@ coloredLines, c}