<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def rytov(radius=5e-6, sphere_index=1.339, medium_index=1.333, wavelength=550e-9, pixel_size=.5e-6, grid_size=(80, 80), center=(39.5, 39.5), focus=0, radius_sampling=42):
 """Field behind a dielectric sphere in the Rytov approximation Parameters radius: float Radius of the sphere [m] sphere_index: float Refractive index of the sphere medium_index: float Refractive index of the surrounding medium wavelength: float Vacuum wavelength of the imaging light [m] pixel_size: float Pixel size [m] grid_size: tuple of floats Resulting image size in x and y [px] center: tuple of floats Center position in image coordinates [px] focus: float .. versionadded:: 0.5.0 Axial focus position [m] measured from the center of the sphere in the direction of light propagation. radius_sampling: int Number of pixels used to sample the sphere radius when computing the Rytov field. The default value of 42 pixels is a reasonable number for single-cell analysis. Returns ------- qpi: qpimage.QPImage Quantitative phase data set """

    # sample the sphere radius with approximately 42px
    # (rounded to next integer pixel size)
    samp_mult = radius_sampling * pixel_size / radius
    sizex = grid_size[0] * samp_mult
    sizey = grid_size[1] * samp_mult
    grid_size_sim = [np.int(np.round(sizex)),
                     np.int(np.round(sizey))]
    size_factor = grid_size_sim[0] / grid_size[0]
    pixel_size_sim = pixel_size / size_factor

    field = sphere_prop_fslice_bessel(radius=radius,
                                      sphere_index=sphere_index,
                                      medium_index=medium_index,
                                      wavelength=wavelength,
                                      pixel_size=pixel_size_sim,
                                      grid_size=grid_size_sim,
                                      lD=focus,
                                      approx="rytov",
                                      zeropad=5,
                                      oversample=1
                                      )

    # interpolate field back to original image coordinates
    # simulation coordinates
    x_sim = (np.arange(grid_size_sim[0]) + .5) * pixel_size_sim
    y_sim = (np.arange(grid_size_sim[1]) + .5) * pixel_size_sim
    # output coordinates
    x = (np.arange(grid_size[0]) + grid_size[0] / 2 - center[0]) * pixel_size
    y = (np.arange(grid_size[1]) + grid_size[1] / 2 - center[1]) * pixel_size

    # Interpolate resulting field with original extent
    field = interpolate_grid(cin=(y_sim, x_sim),
                             cout=(y, x),
                             data=field)

    meta_data = {"pixel size": pixel_size,
                 "wavelength": wavelength,
                 "medium index": medium_index,
                 "sim center": center,
                 "sim radius": radius,
                 "sim index": sphere_index,
                 "sim model": "rytov",
                 }
    qpi = qpimage.QPImage(data=field, which_data="field",
                          meta_data=meta_data)
    return qpi