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.

take

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

Y= (Y_Reflect/abs(Y_Reflect))*(Y_StrechCoefficent)*f((X_reflect/abs(X_reflect))*x-x_shift)+y_shift

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