gnuplot: Постройте и установите 2d функцию с двумя переменными

Возможно ли в gnuplot построить график и подогнать функцию с двумя переменными? Например, физическая функция, которая зависит от высоты h и температуры T, где зависимость T должна быть только рассчитана, но не построена (для f, h и T существуют экспериментальные данные):

f(h,T) = a * h * (1 + alpha * T) + f0

где a и f0 должны определяться подгонкой, alpha известно. В конце концов, мне нужен график с f по оси y и h по оси x. Вся T зависимость должна быть учтена при подгонке, но мне не нужно, чтобы она отображалась с splot.

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

set term png;
set output 'test.png';
set dummy h;
set dummy T;
f(h,T) = a * h * (1 + alpha * T) + f0;
fit f(h,T) 'data.txt' using 2:4:1 via a, f0;
plot f(h,T);

дает undefined variable: h. Любые идеи?


person Foo Bar    schedule 06.02.2013    source источник
comment
вы пробовали удалить set dummy материал и просто сделать fit f(x,y) 'data.txt' using 2:4:1:(1) via a,f0?   -  person mgilson    schedule 06.02.2013


Ответы (1)


Из примеров в документации:

Examples:
       f(x) = a*x**2 + b*x + c
       g(x,y) = a*x**2 + b*y**2 + c*x*y
       FIT_LIMIT = 1e-6
       fit f(x) 'measured.dat' via 'start.par'
       fit f(x) 'measured.dat' using 3:($7-5) via 'start.par'
       fit f(x) './data/trash.dat' using 1:2:3 via a, b, c
       fit g(x,y) 'surface.dat' using 1:2:3:(1) via a, b, c

Я бы ожидал, что ваш скрипт заработает, если вы просто выполните:

set term png
set output 'test.png'
f(h,T) = a * h * (1 + alpha * T) + f0
fit f(x,y) 'data.txt' using 2:4:1:(1) via a, f0

set view 90,0  #possibly `set view 0,90` or `set view map`?
splot f(x,y)
person mgilson    schedule 06.02.2013
comment
Что означает: (1) при использовании? - person Foo Bar; 06.02.2013
comment
Это вес, который должен быть присвоен каждой точке (например, за ошибку). см. help fit в gnuplot. Это дает одинаковый вес каждой точке. - person mgilson; 06.02.2013
comment
Ах хорошо. НО ТЕМ НЕМЕНЕЕ. Если я переключу все на x и y и удалю пустышку, получится ошибка line 5: undefined variable: y (строка 5 - plot). Должен ли я сначала включить где-нибудь графики с несколькими переменными? Подгонка, кажется, работает нормально (я получаю разумные значения), но построение графика - нет. - person Foo Bar; 06.02.2013
comment
@FooBar - Извини, я не подумал. Вы строите график функции двух переменных, поэтому вам понадобится splot вместо plot. Затем вместо x и y переменные становятся u и v. Я обновился, так что, надеюсь, теперь все заработает. - person mgilson; 06.02.2013
comment
Но splot строит график поверхности (3D), но я хочу подобрать f(h,T), но рисую только проекцию на f(h) (2D). Итак, проекция из трехмерного вектора (h, T, f(h,T)) на (h, 0, f(h,T)) -> (h, f(h,T)). Так что если бы я смотрел на трехмерный f(h,T) график под определенным углом, который показывает только f(h) часть. - person Foo Bar; 06.02.2013
comment
@FooBar - Вы имеете в виду plot f(x,0)? - person mgilson; 06.02.2013
comment
Мне нужен график проекции 3D сюжета на плоскость f-h. - person Foo Bar; 06.02.2013
comment
@FooBar - я не уверен, как спроецировать трехмерную поверхность на двухмерную плоскость. Вы можете построить полную трехмерную поверхность, настроив вид соответствующим образом ... - person mgilson; 06.02.2013
comment
@FooBar - я отредактировал, добавив пару set view ... параметров, которые могут быть тем, что вы хотите ... - person mgilson; 06.02.2013