Writing a formula is a bit like writing a sentence... it can be long and complex or short and simple, there are multiple ways to express the same thing, you can have two nearly identical expressions with two vastly different results. I don't think there is any way to algorithmically generate expressions that give a specific output, you have to build each formula on a case-by-case basis.
Find a formula with the basic shape you want. Linear, oscillating, tappered, bell curved etc... doesn't matter.
Y=f(x) as your basis function
Y'=f'(x) as your modified function
To raise or lower a constant distance Y=f(x)+c
To shift right or left a constant distance Y=f(x-c)
to stretch/shrink along the x axis Y=f(x*c)
to stretch/shrink along the y axis Y=f(x)*c
to travel the oppiste direction on the x axis Y=f(-x)
to travel the oppisite direction on the y axis Y=-f(x)
a generic formula which can apply or not apply some transformations
When Y_Reflect<0 reflect vertically, when Y_reflect>0 don't modify output, when Y_reflect=0... function falls apart... constant output of 0
When X_Reflect<0 reflect vertically, when X_reflect>0 don't modify output, when X_reflect=0... function falls apart... constant output of f(0)
Of course this only works if you already have a function in mind that you want to modify in some way