Gnuplot генерирует странный граф для уравнения Френеля - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь сгенерировать графики для коэффициентов Френеля, но график неверен.

#! /usr/bin/gnuplot -p

#Gnuplot script Fresnel equation
set term postscript eps enhanced color lw 2 "Arial" 20
set title "Fresnel do ar para vidro"
#set name for file
set output "fresnel.eps"
#Define refractive index middle 1
ni = 1
#Define refractive index middle 2
nt =  3/2
#Define constant
k = ni/nt
#Define conversion
TRAD = pi/180.0
#define cos, sin conversion
sind(x) = sin(x*TRAD)
cosd(x) = cos(x*TRAD)
#Define sqrt
sq(x) = sqrt( 1 - k**2 * sind(x)*sind(x) )
sqd(x) = sq(x*TRAD)
#R perpendicular
ri(x) = (ni*cosd(x) - nt*sqd(x)) / (ni*cosd(x) + nt * sqd(x))
#R paralelo
rii(x) = - (nt*cosd(x) - ni*sqd(x)) / (ni*sqd(x) + nt*cosd(x))
#Function
p(x) = (ri(x) - rii(x)) / (ri(x) + rii(x))

set ylabel "ress"
set xlabel "Angulo de incidencia"
set yrange [-1:2.5]
set autoscale x
#ploting graph
plot p(x), ri(x) with line, rii(x) w line

Мне нужно получить график, подобный ссылке:

https://www.geogebra.org/m/wKk62nUk

1 Ответ

1 голос
/ 02 ноября 2019

Не полное решение, но несколько замечаний:

  • nt = 3/2 использует целочисленное деление и дает nt = 1. Вы хотите иметь nt = 3.0/2.0 или nt = 1.5.
  • Аргументы угла умножаются на TRAD. Это перевод из градусов в радианы. Поэтому для xrange должно быть установлено что-то вроде set xrange [0:90]
  • У вас есть sqd(x) = ...sq(x*TRAD)..., sq(x) = ...sind(x)... и sind(x) = sin(x*TRAD). Эта цепочка умножает начальный аргумент на TRAD*TRAD. Скорее всего, вы хотите изменить sq(x) = ...sind(x)... на sq(x) = ...sin(x)....

Мы приближаемся к желаемому графику, но мы еще не закончили. Я думаю, что вы должны дважды проверить исходные уравнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...