Заполните область между двумя кривыми в gnuplot

Я две функции:

f(x) = x**2
g(x) = -(x-4)*x

Мне нужно рассчитать площадь между этими двумя кривыми, для этого я хотел бы иметь визуализацию. В WolframAlpha есть именно то, что я хочу: https://www.wolframalpha.com/input/?i=area+between+the+curves+y%3Dx%5E2+and+y%3D-x%5E2%2B4x , однако мне нужно сделать графику в gnuplot. Вот мой код:

set border linewidth 1
set style line 1 linecolor rgb '#0060ad' linetype 1 linewidth 1
set style line 2 linecolor rgb '#dd181f' linetype 1 linewidth 1
set key at 6.1,1.3
set xlabel 'x'
set ylabel 'y'
set xrange [-0.5:3]
set yrange [0:5]
set xtics 2
set ytics 2
set tics scale 2
f(x) = x**2
g(x) = -(x-4)*x
set grid ytics lt 0 lw 1 lc rgb "#bbbbbb"
set grid xtics lt 0 lw 1 lc rgb "#bbbbbb"
plot f(x) title 'f(x)' with lines linestyle 1, \
     g(x) title 'g(x)' with lines linestyle 2

Он производит этот вывод:

Есть ли способ выделить область между этими двумя кривыми, как в WolframAlpha? Предполагая, что мы знаем, где они пересекаются (0 и 2), если только gnuplot не может сделать это самостоятельно.

Если это не то, на что способен vanilla gnuplot, я извиняюсь, в этом случае некоторые указатели на ресурсы, которые могут это сделать, будут оценены.

Вы проверили руководство gnuplot и help filledcurves? и это: gnuplot.sourceforge.net/demo_5.4/fillcrvs.html

theozh 14.12.2020 13:31

@theozh У меня есть, к сожалению, так как я очень новичок в gnuplot, я не смог в этом разобраться. Тем не менее, я думаю, что вы можете заполнить только область под одной кривой, а я хочу заполнить область между двумя кривыми.

b3nj4m1n 14.12.2020 13:44
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
658
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Этого можно добиться с помощью filledcurves (см. документы: http://gnuplot.sourceforge.net/docs_4.2/node245.html). Вам просто нужно использовать опцию below, чтобы заполнить только область между двумя кривыми.

В качестве примера попробуйте следующее:

plot '+' using 1:(f($1)):(g($1)) title '' with filledcurves below lc rgb 'green', \
    f(x) title 'f(x)' with lines linestyle 1, \
    g(x) title 'g(x)' with lines linestyle 2

Это основано на том, как это описано в FAQ здесь для двух кривых: http://www.gnuplot.info/faq/#x1-460005.3

Спасибо, это немного работает. Область между ними теперь заполнена зеленым цветом. Однако '+' using 1:(f($1)):(g($1)) отображается в виде строки в правом верхнем углу. Вот текущий сюжет: i.imgur.com/3kzxslX.png Это задуманное поведение, или я сделал что-то не так, и если это так, как я могу отключить этот ярлык?

b3nj4m1n 14.12.2020 14:21

Попробуйте добавить title '', обновил пример.

costaparas 14.12.2020 14:26

Другие вопросы по теме