Как построить функцию функции - PullRequest
0 голосов
/ 09 мая 2018

Я бы хотел получить такой сюжет

enter image description here

, который генерируется в Gnuplot, но строится из файла.

Сценарий Gnuplot, содержащий все функции, выглядит следующим образом:

set encoding iso_8859_1
set key right top font "Helvetica,17"
set ylabel "Received power, P_t (dBm)" font "Helvetica,18"
set xlabel "Separation distance, r (m)" font "Helvetica,18"
set xtics font "Helvetica,16"
set ytics font "Helvetica,16"
set size 1, 1.2
set terminal postscript color eps enhanced
set grid xtics ytics
set key spacing 1.5
set key box linestyle 1 width 3
set logscale x
set grid xtics mxtics
set output "link-up-test.eps"
h1=1.85
h2=0.5
r(x) = sqrt((h1 - h2)**2 + x**2 )
lmb = 300/865.7
H(x) = sqrt( 1- (4*h1*h2)/(x**2 + (h1 + h2)**2 ) )
theta(x) = 2*pi/lmb*( sqrt((h1 + h2)**2+x**2 ) - sqrt((h1 - h2)**2+ x**2) )
q_e(x) = H(x)**2*(sin(theta(x)))**2 + (1 - H(x)*cos(theta(x)))**2
P_x_G = 4
sigma = 1.94
invsqrt2pi = 0.398942280401433
normal(x,mu,sigma)=sigma<=0?1/0:invsqrt2pi/sigma*exp(-0.5*((x-mu)/sigma)**2)
rnd(x) = 10**(-normal(x,0,sigma)/10)
pot_t(x) = 10*log10( 1000*(P_x_G*1.622*((300/lmb)**2) *0.5*1) / (((4*pi*r(x))**2) *1.2*1)*q_e(x)*rnd(x) )
plot [1:12][] pot_t(x) t "up"  w lines ls 1

С помощью этого скрипта я получаю следующий сюжет

enter image description here

имеет схожую форму, но не имеет случайности с функцией rnd(x) и не имеет одинаковых уровней по оси Y.

Я что-то упустил, но несколько раз проверял функции. Я хотел бы знать, почему это не то же самое число.

Привет

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Я хотел бы дать свое решение этого вопроса. Я использовал метод Бокса-Мюллера для генерации гауссовых сэмплов.

h1=1.85
h2=0.5
r(x) = sqrt((h1 - h2)**2 + x**2 )
lmb = 300/865.7
H(x) = sqrt( 1- (4*h1*h2)/(x**2 + (h1 + h2)**2 ) )
theta(x) = 2*pi/lmb*( sqrt((h1 + h2)**2+x**2 ) - sqrt((h1 - h2)**2 + x**2) )
q_e(x) = H(x)**2*(sin(theta(x)))**2 + (1 - H(x)*cos(theta(x)))**2
P_G = 4

sigma = 1.94


normal(x,mu,sigma) = sqrt(-2.0 * log(rand(0))) * cos(2*pi * rand(0)) * sigma + mu
rnd(x) = 10**(-normal(x,0,sigma)/10)

pot_t(x) = 10*log10( 1000*(P_G*1.622*((lmb)**2) *0.5*1) / (((4*pi*r(x))**2) *1.2*1)*q_e(x)*rnd(x) )
set samples 1000
plot [1:12][] pot_t(x) t "up"  w lines ls 1

Что создает этот сюжет:

enter image description here Образцы генерируются с помощью функции normal(x, mu, sigma). Существует только проблема с этим решением Когда я строю график с помощью set logscale x, график точек должен быть более плотным, когда x-axis более сконцентрирован (см. Первый график выше), но кажется, что Gnuplot сначала делает логарифмический масштаб x-axis, а после этого берет эквидистантные выборки в Рисунок, представляющий логарифмическую шкалу в виде линейной шкалы. Буду признателен, если кто-нибудь сможет ответить на это или улучшить решение.

Привет

0 голосов
/ 09 мая 2018

В вашей функции rnd (x) нет ничего случайного. Просто нанесите rnd (x), и вы можете это увидеть. Почему вы не используете функцию rand () gnuplot в сочетании с вашим обычным распределением?

...