gnuplot을 사용하여 합계 함수를 그리는 방법은 무엇입니까?

gnuplot을 사용하여 합계 함수를 그리는 방법은 무엇입니까?

sum a*exp(-0.001*(x-b)**2) 아래와 같이 입력 파일의 첫 번째 열과 두 번째 열에 각각 a와 b 값이 나열되는 다음 함수를 플롯하고 싶습니다.

a1 b1
a2 b2
a3 b3

.....
an bn

이제 다음 명령을 사용하여 플롯합니다.

plot a1*exp(-0.001*(x-b1)**2) + a2*exp(-0.001*(x-b2)**2) + a1*exp(-0.001*(x-b3)**2) ...etc

나에게 필요한 것은 모든 데이터를 하나씩 쓰지 않고 모든 데이터를 플롯하는 짧은 명령입니다.

예상되는 출력은 다음과 같은 연속선이어야 합니다.

예상되는 출력은 다음과 같은 연속선이어야 합니다.

답변1

가장 간단한 방법은 아마도 awk를 사용하여 필요한 그리기 명령을 생성하는 것입니다. 예를 들어,

f(a,b,x)=a*exp(-0.001*(x-b)**2)
sum(x) = `awk <data '{v = v sprintf("f(%s,%s,x)+",$1,$2)} END{print v "0"}'`
set xrange [250:650]
plot sum(x)

이는 gnuplot 명령 파일의 백틱을 사용하여 awk를 실행합니다. awk는 데이터 파일에서 읽고 다음과 같은 문자열을 생성합니다.

f(1,2,x)+f(3,4,x)+...0

여기서 1,2 3,4는 데이터의 처음 2개 값 세트입니다. gnuplot 사용자 정의 함수는 sum()이것으로 설정되어 플롯할 수 있습니다.

여기에 이미지 설명을 입력하세요.

답변2

내가 올바르게 이해했다면 다음과 같은 것을 찾고 있습니다.

그리고gnuplot5.0:

gnuplot> set title "sum columns"
gnuplot> set size square
gnuplot> plot 'inputfile' u 1:($1*exp(-0.001*(x-$2)**2)) w linespoints

산출: 여기에 이미지 설명을 입력하세요.

관련 정보