# How can I fit rational function to data?

I have a dataset written below. I need to find a rational function that best fits this data set. How can I do it using Mathematica?

The answer should be: $$f(t)=(2.196t^5+2.27t^4+2.013t^3+0.9592t^2+0.2953t+0.05070)/(768.6t^6+1249t^5+1154t^4+712.9t^3+307.6t^2+89.05t+15.29).$$

Data: Constraints for fitting: f(0)=0.0032; f(t->Infinty)=0.0029/t

  t,  f(t)
0,  0.0033157279810811526
1,  0.0018295674601849948
2,  0.001131312601917103
3,  0.0008137831218081155
4,  0.000634477850153065
5, 0.0005196386646717525
6, 0.00043989323618322913
7, 0.0003813202240932608
8, 0.0003364891929679466
9, 0.0003010778932330931
10,  0.0002724027569571278
11, 0.00024871026460566477
12, 0.00022880647172520942
13,  0.00021185043578976072
14,  0.00019723280821218295
15, 0.00018450128323486335
16,  0.00017331309019417618
17, 0.00016340374128199977
18, 0.000154565898127803
19, 0.00014663473181380346
20,  0.00013947756268911104
21,  0.0001329863885107969
22, 0.00012707240339959042
23, 0.00012166191521331618
24, 0.00011669326214520721

• It would be helpful if you could give the full answer.
– JimB
Commented Jan 25 at 15:17
• @JimB I have updated the answer. Thank you. Commented Jan 25 at 16:17
• Thank you for adding that. I'd also be curious about the reference because the question you should have is why anyone would attempt to fit 13 parameters with 24 data points. @Domen ' s answer with n=1; m=2 (5 parameters) gives an almost perfect fit (and nearly identical predictions as with n=2; m=2).
– JimB
Commented Jan 25 at 17:22
• You are correct; I only provided a few data points here. However, I have worked with a total of 300 data points, and the results do not align with @Domen's answer. I am uncertain about where I may have made a mistake. The reference for my work is arxiv.org/abs/1603.08694v1. In this paper, the data points are generated by solving equations (30) and (31), and the functions I have written correspond to equation (35). Commented Jan 25 at 18:11
• If the 300 data points provide just a "denser" set of points, then I would say that the paper should have had a statistical review (from a statistician and not a physicist). A rational function with $n=5$ and $n=6$ can result in a lot bumpier shape than what appears from a plot of the function you present. What one sees is a relatively smooth curve with no need for lots of parameters. Looking at the estimated correlation matrix (fit("CorrelationMatrix")//TableForm) shows many, many entries near 1 or -1 which implies (or actually yells out) overparameterization.
– JimB
Commented Jan 25 at 19:05

Assume the degree of the numerator is n and that of the denominator is m. Then we can make a rational fit using "NonlinearModelFit" like e.g.:

dat = Partition[{0, 0.003315727981081152, 1, 0.0018295674601849948, 2,
0.001131312601917103, 3, 0.0008137831218081155, 4,
0.000634477850153065, 5, 0.0005196386646717525, 6,
0.00043989323618322913, 7, 0.0003813202240932608, 8,
0.0003364891929679466, 9, 0.0003010778932330931, 10,
0.0002724027569571278, 11, 0.00024871026460566477, 12,
0.00022880647172520942, 13, 0.00021185043578976072, 14,
0.00019723280821218295, 15, 0.00018450128323486335, 16,
0.00017331309019417618, 17, 0.00016340374128199977, 18,
0.000154565898127803, 19, 0.00014663473181380346, 20,
0.00013947756268911104, 21, 0.0001329863885107969, 22,
0.00012707240339959042, 23, 0.00012166191521331618, 24,
0.00011669326214520721}, 2];

n = 2; m = 2;
vara = Array[a, n + 1, 0]
varb = Array[b, m + 1, 0];

fit = NonlinearModelFit[dat,
vara . Table[x^i, {i, 0, n}]/varb . Table[b[i]  x^i, {i, 0, m}],
Join[vara, varb], x]

Plot[{fit[x]}, {x, 0, 25}, Epilog -> Point[dat]]


• Thank you. The question is to find the functional form of f(t). Commented Jan 25 at 11:22
• You get this by fit // Normal Commented Jan 25 at 11:24
• Or alternatively fit[x] Commented Jan 25 at 11:32
• You have 2 parameters: n and m that may be different. Commented Jan 25 at 12:35
• I think that typically either $a_0$ or $b_0$ is set to 1 for such models. That removes an unnecessary parameter (one less parameter to estimate and the resulting parameter estimators are more stable). However, the predictions will still be the same (at least if one ignores differences in rounding errors).
– JimB
Commented Jan 26 at 5:05