Maybe you can try writing a piecewise fit function, with the break point being a parameter.
e.g. something like (completely untested…)
//define piecewise function, [0] is the breakpoint
TF1 * fboth = new TF1("fboth", " (x < [0]) * ( [1] + [2]*x) + (x > [0]) * ([3] + [4]*x + [5] * x*X)", 46, 57)
// initialize parameter from individual fits
fboth->SetParameter(0,50); // a guess from looking at your plot
fboth->SetParameter(1, f1->GetParameters()[0]);
fboth->SetParameter(2, f1->GetParameters()[1]);
fboth->SetParameter(3, f2->GetParameters()[0]);
fboth->SetParameter(4, f2->GetParameters()[1]);
fboth->SetParameter(5, f2->GetParameters()[2]);
// give it a different color :)
fboth->SetLineColor(2);
// do the fit
g.Fit(fboth,"","same", 46,57);
You can of course smoothly go between the two functions instead of suddenly by making a slightly more complex function.
In ROOT, before you try to fit your graph or histogram, you MUST set “reasonable” initial values for ALL parameters of your function (except for some “built-in” formulas, like “gaus”, for which the standard fit procedure can automatically “guess” them). Otherwise, the fitting procedure may easily misbehave.
You could try to make the macro more “robust” (it maybe helps when the initial parameters are not good) by enabling something like this: