В общем случае все сложно и тут как с интегрированием надо подходить с воображением и изобретательностью.
Вообще, не для любых функций распределения можно получить любую корреляцию. Например, вы никак не сможете добиться полной (corr=1) корреляции равномерно распределенной величины и нормально распределенной величины.
Но, если функция для обеих величин одинаковая, то есть, например, такой способ:
1) Сгенерируйте случайную величину a согласно функции распределения.
2) C вероятностью k выдайте это же значение как и вторую переменную (b=a).
3) C вероятностью 1-k сгенерируйте случайную величину b согласно той же функции распределения.
Этот способ выдаст коэффициент корреляции k. Если нужна отрицательная корреляция, то можно выдать b=2Ea-a во втором шаге (отражение относительно матожидания). Но тогда в третьем шаге плотность распределения будет уже не такая же как у a. Если заданная функия распределения f(x), то там надо использовать g(x)=(f(x) -kf(2Ea-x))/(1-k). Суть в том, чтобы g(x)*(1-k)+k*f(2Ea-x) = f(x) - и итоговая плотность распределения будет одинаковая.
Этот способ даст заданную корреляцию, но может вам не подходить, потому что там куча исходов, где обе величины равны.
Другой вариант, сгенерировать случайную величину a ~ f(x), потом взять b = k*a+c, где c - это какая-то независимая случайная величина, распределенная как-то хитро (об этом ниже). Регулируя k можно получать разный уровень корреляции. Удобно работать уже с центрированными случайными величинами. Пусть Ea = Eb = Ec= 0.
Тогда коэффициент корреляции будет E((ka+c)a)/D(a) = (kEa^2+Eac)/D(a) = kE(a^2)/D(a) = k. Потому что a и c независимые случайные величины и Eac = Ea*Ec = 0*0. А D(a) = E(a^2)-Ea*Ea = E(a^2)-0*0.
Пусть функция распределения a и b - F(x) (плотность f(x)). Искомая функция для c - G(x) (плотность g(x)).
Надо будет решить интегральное уравнение:
Int -int..inf g(t)f((x-t)/k)/k dt = f(t)
Лучше всего это через преобразование лапласа это решать. Теоремму о свертке и свойство умножения на число примените.