tmp update

This commit is contained in:
张壹 2024-10-09 20:22:22 +08:00
parent c2832c3104
commit c95b20255a
3 changed files with 13 additions and 19 deletions

View File

@ -86,7 +86,7 @@ int main(int argc, char const *argv[]) try
a[0] = 0; a[0] = 0;
b[0] = 1.5; b[0] = 1.5;
k.get_gradient_y_at(0, 0, a, b, d); k.get_gradient_y_at(0, a, b, d);
double t, sum = 0; double t, sum = 0;
for (size_t i = 0; i < y.size(); i++) for (size_t i = 0; i < y.size(); i++)

View File

@ -236,9 +236,8 @@ void gctl::kde2d::get_distribution(const array<double> &mx,
return; return;
} }
void gctl::kde2d::get_gradient_x_at(size_t mx_id, size_t my_id, void gctl::kde2d::get_gradient_x_at(size_t m_id, const array<double> &mx,
const array<double> &mx, const array<double> &my, const array<double> &my, array<double> &dmx, kde_kernel_e k_type)
array<double> &dmx, kde_kernel_e k_type)
{ {
if (mx.size() != my.size()) throw std::runtime_error("[gctl::kde2d] Invalid evaluating size.");; if (mx.size() != my.size()) throw std::runtime_error("[gctl::kde2d] Invalid evaluating size.");;
int ms = mx.size(); int ms = mx.size();
@ -251,16 +250,15 @@ void gctl::kde2d::get_gradient_x_at(size_t mx_id, size_t my_id,
{ {
for (size_t j = 0; j < xs_; j++) for (size_t j = 0; j < xs_; j++)
{ {
dmx[i*xs_ + j] = ((x_[j] - mx[mx_id])/hx_)*gaussian_kernel((x_[j] - mx[mx_id])/hx_, (y_[i] - my[my_id])/hy_)/(hx_*hx_*hy_*ms); dmx[i*xs_ + j] = ((x_[j] - mx[m_id])/hx_)*gaussian_kernel((x_[j] - mx[m_id])/hx_, (y_[i] - my[m_id])/hy_)/(hx_*hx_*hy_*ms);
} }
} }
} }
return; return;
} }
void gctl::kde2d::get_gradient_y_at(size_t mx_id, size_t my_id, void gctl::kde2d::get_gradient_y_at(size_t m_id, const array<double> &mx,
const array<double> &mx, const array<double> &my, const array<double> &my, array<double> &dmy, kde_kernel_e k_type)
array<double> &dmy, kde_kernel_e k_type)
{ {
if (mx.size() != my.size()) throw std::runtime_error("[gctl::kde2d] Invalid evaluating size.");; if (mx.size() != my.size()) throw std::runtime_error("[gctl::kde2d] Invalid evaluating size.");;
int ms = mx.size(); int ms = mx.size();
@ -273,7 +271,7 @@ void gctl::kde2d::get_gradient_y_at(size_t mx_id, size_t my_id,
{ {
for (size_t j = 0; j < xs_; j++) for (size_t j = 0; j < xs_; j++)
{ {
dmy[i*xs_ + j] = ((y_[i] - my[my_id])/hy_)*gaussian_kernel((x_[j] - mx[mx_id])/hx_, (y_[i] - my[my_id])/hy_)/(hy_*hy_*hx_*ms); dmy[i*xs_ + j] = ((y_[i] - my[m_id])/hy_)*gaussian_kernel((x_[j] - mx[m_id])/hx_, (y_[i] - my[m_id])/hy_)/(hy_*hy_*hx_*ms);
} }
} }
} }

View File

@ -143,30 +143,26 @@ namespace gctl
/** /**
* @brief Get the gradient at object * @brief Get the gradient at object
* *
* @param mx_id * @param m_id
* @param my_id
* @param mx * @param mx
* @param my * @param my
* @param dmx * @param dmx
* @param k_type * @param k_type
*/ */
void get_gradient_x_at(size_t mx_id, size_t my_id, void get_gradient_x_at(size_t m_id, const array<double> &mx,
const array<double> &mx, const array<double> &my, const array<double> &my, array<double> &dmx, kde_kernel_e k_type = KDE_Gaussian);
array<double> &dmx, kde_kernel_e k_type = KDE_Gaussian);
/** /**
* @brief Get the gradient y at object * @brief Get the gradient y at object
* *
* @param mx_id * @param m_id
* @param my_id
* @param mx * @param mx
* @param my * @param my
* @param dmy * @param dmy
* @param k_type * @param k_type
*/ */
void get_gradient_y_at(size_t mx_id, size_t my_id, void get_gradient_y_at(size_t m_id, const array<double> &mx,
const array<double> &mx, const array<double> &my, const array<double> &my, array<double> &dmy, kde_kernel_e k_type = KDE_Gaussian);
array<double> &dmy, kde_kernel_e k_type = KDE_Gaussian);
private: private:
size_t xs_, ys_; size_t xs_, ys_;