karplus equation in gnuplot

余生长醉 提交于 2019-12-24 04:31:53

问题



I want plot karplus equation

f(t)=a*cos(t+o)**2 + b*cos(t+o) + c 

with gnuplot for different value of a, b, c, o values. In particular the parameters a, b, c, o have tabular form (in file data.dat):

a b c o
1 2 3 60
4 5 6 180
-3 -5 -9 -120

and t has range from

-180 to 180

for each row in data.dat file.

Can you help me? Thanks everyone.

Lucio


回答1:


AFAIK it is not possible to have a "parameter file" with different parameters to plot in a function since the plot command can either take a function to plot or a datafile:

plot {<ranges>}
     {<iteration>}
     {<function> | {"<datafile>" {datafile-modifiers}}}
     {axes <axes>} {<title-spec>} {with <style>}
     {, {definitions{,}} <function> ...}

So either you have to create a datafile where your t and functional values are listed for gnuplot to plot. An other workaround, that might be useful if you only have a limited number of karplus functions to plot is this:

set angles degrees
set xrange [-180:180]

f(x, a, b, c, o) = a*cos(x+o)**2 + b*cos(x+o) + c
title(n) = sprintf("f_%d", n)

plot a = 1 b = 2 c = 3 o = 60 f(x, a, b, c, o) t title(1), \
     a = 4 b = 5 c = 6 o = 180 f(x, a, b, c, o) t title(2), \
     a = -3 b = -5 c = -9 o = -120 f(x, a, b, c, o) t title(3)

Now you specify the parameters directly and and plot the function accordingly.

Alternatively you could implement an iteration like so:

plot for [a = 1:10:2] b = 2 c = 3 o = 60 f(x, a, b, c, o) t title(a)

Unfortunately it is not possible to nest iterations in gnuplot, so you have to cope with just having one parameter to vary.




回答2:


If your first column was "t" (and "a" was your second column etc.), you could do:

plot "data.dat" u 1:($2*cos($1+$5)+$3*cos($1+$5)+$4)

Note the parens on the outside of what comes after the colon.




回答3:


Not possible, as far as I know. What I do in this sort of case is to write a small script to generate the plot commands I need. For example, using awk:

#! /usr/bin/env awk -f 

BEGIN {
    printf("plot ")
}

NR > 1 {
    printf(" ,\\\n     ")
}

{ 
    printf("(%s) * cos(t+(%s))**2 + (%s) * cos(t+(%s)) + (%s)", $1, $4, $2, $4, $3)  
}

END {
    printf("\n")
}

Save that as a file karplus and make it executable. Then ./karplus < data.dat creates the plot command you need. Depending on your needs, a small makefile might be in order.



来源:https://stackoverflow.com/questions/6284170/karplus-equation-in-gnuplot

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!