- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我实现了一个方法 (Normal.compute()
),用于计算两个法线函数的总和:
public class Normal {
private double mu1, mu2;
private double sigma1, sigma2;
public double compute(double x, double y) {
return normal(x,mu1,sigma1) + normal(y,mu2,sigma2);
}
public double normal(double x, double mu, double sigma) {
return Math.pow(Math.E, (-1*Math.pow((x-mu),2)) / (2* Math.pow(sigma,2))
/
sigma * Math.sqrt(2*Math.PI)
);
}
public static double distance(double ax1, double ax2, double bx1, double bx2) {
return Math.sqrt(Math.pow((bx1-ax1),2)+Math.pow((bx2-ax2),2));
}
}
现在固定了一个值z
和一个点(x1,y1)
,我将检索最近的(就距离而言)点,其值 >Normal.compute() = z
。其中最近的位置由 distance()
计算。
所以我需要的是计算反函数并最小化距离,但我不知道如何以编程方式实现。
public double[] inverseNearest(double z, double x1, double x2) {
// K = Set of (x,y) such that compute(x,y) = z
// return argmin { distance(xk, yk, x1, x2) for each (xk, yk) in K }
}
我尝试过使用 apache common math 或 colt,但它们似乎没有帮助。
这不是练习,所以如果已经完成了某些操作,我可以使用库。
最佳答案
您可以将其表述为优化嵌套在查找根中的函数。
优化问题:找到max_t normal.compute(foo(t))
,其中foo(t)
参数化一个以r
为中心半径的圆在(x1, y1)
上,即foo(t) = [x1 + r cos(t), y1 + r sin(t)]
。 (如果 normal.compute(x1, y1)
小于 z
,则使用 max
。否则使用 min
。)
寻根问题:找到r
,使得优化问题的解 = z
。
我通过查看 normal.compute(x, y)
的等高线图并思考 (x1, y1)
周围的圆圈得到了这个想法。当您绕圈行走时,normal.compute
的值会上下变化。您希望圆的最高点或最低点恰好是 z
。希望这会有所帮助。
编辑:我喜欢这个问题,所以我构建了一个解决方案。这是 Maxima [1] 计算机代数系统的脚本。请参阅代码中的注释。玩得开心。
/* solve problem stated in:
* http://stackoverflow.com/questions/22099321/calculate-inverse-of-normal-function-that-minimizes-another-function
*
* copyright 2014 by Robert Dodier
* I release this work under terms of the GNU General Public License
*
* how to:
*
* (1) assign values to m1, s1, m2, s2, x1, y1, and z0
* (2) batch("foo.mac");
*
* example:
*
* [m1, s1, m2, s2, x1, y1, z0] : [-2, 1.8, 1.3, 2.4, 1.82, -0.24, 0.3];
* batch ("foo.mac");
* => [x0, y0] = [- .4249300563696112, 0.172672148095035]
*
* after that, try:
*
* set_plot_option ([same_xy, true]);
* load (implicit_plot);
* implicit_plot ([F (x, y) = z0, (x - x1)^2 + (y - y1)^2 = r0^2], [x, -5, 5], [y, -5, 5]), numer;
*
* should show z0 contour just touching the circle of radius r0 centered on [x1, y1]
*/
load (distrib);
ratprint : false;
/* m1, s1, m2, s2 must be assigned values */
F (x, y) := pdf_normal (x, m1, s1) + pdf_normal (y, m2, s2);
/* x1, y1 must be assigned values */
G (r, x1, y1) := fmax_circular (lambda ([t], F (x1 + r * cos (t), y1 + r * sin (t))));
fmax_circular (f) := lmax (map (f, fargmax_circular (f)));
fargmax_circular (f) := block ([n : 17, u0, u2],
map (f, makelist (i * 2 * float (%pi) / n, i, 0, n)),
ev (sublist_indices (%%, lambda ([u], u = u_max)), u_max = lmax (%%)),
map (lambda ([i], [u0, u2] : [(i - 1) * 2 * float (%pi) / n, (i + 1) * 2 * float (%pi) / n], fargmax1 (f, u0, u2)), %%));
/* golden section search */
fargmax1 (f, u0, u2) := block ([tol : 1e-2, u1 : u0 + (u2 - u0) / float (%phi)],
while u2 - u0 > tol
do block ([x],
if u2 - u1 > u1 - u0
then x : u1 + (1 - 1/float (%phi)) * (u2 - u1)
else x : u1 - (1 - 1/float (%phi)) * (u1 - u0),
if f(x) > f(u1)
then /* accept interval containing x */
if u2 - u1 > u1 - u0
then [u0, u1, u2] : [u1, x, u2]
else [u0, u1, u2] : [u0, x, u1]
else /* reject interval containing x */
if u2 - u1 > u1 - u0
then [u0, u1, u2] : [u0, u1, x]
else [u0, u1, u2] : [x, u1, u2]),
u0 + (u1 - u0) / 2);
/* z0 must be assigned a value */
r0 : find_root (lambda ([r], G (r, x1, y1) - z), r, 0.001, 5), z = z0, numer;
/* fargmax_circular returns a list -- assume it's just one element
* not guaranteed to work -- [t0] : ... fails when rhs has 2 or more elements, oh well
*/
[t0] : fargmax_circular (lambda ([t], F (x1 + r0 * cos (t), y1 + r0 * sin (t))));
/* [x0, y0] is the point on z0 contour of F, nearest to [x1, y1]
* r0 is distance from [x1, y1] to [x0, y0]
*/
[x0, y0] : [x1 + r0 * cos (t0), y1 + r0 * sin (t0)];
F (x0, y0), numer; /* should be equal to z0 */
关于java - 计算最小化另一个函数的正常函数的反函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22099321/
我有一个关于 DFA 最小化的问题。所以我使用了众所周知的技术将正则表达式转换为 NFA,然后使用 goto/closure 算法从中构造 DFA。现在的问题是如何将其最小化?我在这里看过有关它的课文
这是我的代码,当鼠标光标悬停在 TPanel 上时,它会“动画化”它。我还有一个代码块来取消它的动画。 procedure Tmain.pStarting1MouseEnter(Sender: TOb
我有图像 slider ,其中图像在超时时相互替换。我使用 jQuery 函数 setInterval() 但有一个小问题,在最小化浏览器窗口后,该函数继续“工作”,并且我恢复浏览器窗口图像的位置以令
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How can I stop a double click of the window title bar
当我在我的 Windows 窗体应用程序中单击最小化按钮时,我不希望它执行经典的 Windows 最小化动画(窗口下降到任务栏)。 据我所知,没有最小化事件,我只能使用调整大小,但我不知道如何检测我是
首先 - 对不起我的英语。 我刚刚创建了 Android 应用程序。它包含几个 Activity ,并在此应用程序的背景下播放音乐。当用户以某种方式(通过单击“后退”按钮、主页按钮或其他方式)离开应用
我需要帮助编写一个程序,该程序以 (X,Y) 的形式给出指定数量的坐标点。将给出的点数是程序中的第一行;它可以通过扫描仪读取。 我需要计算覆盖线 x = a 和 y = b 的所有点的最小面积。因此,
我需要一个 Activity 返回到上一个 Activity ,但如果再次单击该按钮,它将恢复上次的 Activity 。这是所需的过程:我点击一个按钮, Activity 开始。如果我点击“后退”按
随着这个动画变得越来越复杂,我不断添加参数,以便它们在每次回调时可用。目前共有 6 个。 例如,现在我想在显示消息时禁用输入框,因此我必须添加另一个元素 - in_element; 电话: M
这是一个基于对话框的 MFC 应用程序。我并没有故意添加任何关于最小化、最大化和恢复按钮的代码。它可以首先显示那些按钮。但它在长时间运行后就会消失。或者计算机的 sleep 可能导致此问题? 我不知道
如何使用 Windows API 禁用窗口的最大化和/或最小化功能?最大化/最小化框需要变灰并禁用,双击标题栏、拖动到屏幕顶部等也需要不起作用。 最佳答案 您可以调用 SetWindowLong/Se
是否有任何已知的算法帽子可以解决以下问题:我们有一个 session ,有多个同时会谈。用户应标记感兴趣的会谈,然后我们要创建一个会谈时间表,以便我的大多数人都可以参加他们的会谈并最大限度地减少日程冲
目前我负责为一个小项目开发一个(C++)窗口类;目标是将依赖性保持在最低限度。Win32/WinAPI 的实现按预期工作,但是,当涉及到 Linux/XCB 时,我正在努力。 我知道,我可以检查“_N
windows C++编程,如何让事件窗口最大化或最小化? 对于鼠标按下事件,我们使用类似 mi.dwFlags = MOUSEEVENTF_LEFTDOWN 的东西,并使用 SendInput()
我编写了以下获取 2 个参数的构造函数,如果值(x 或 y)为负,它将被初始化为零。 public Point1 ( int x , int y ) { //if one or
我有以下代码,如果我将导航窗口最大化,它运行良好,但是当我最小化它时它停止工作。 更多细节: 当窗口最小化时,“scrollDown & scrollTop”函数停止执行。 'use strict'
我有一个包含一些宏和用户表单的 Excel 文件。 我不希望用户在没有密码的情况下访问文件本身。他们应该只能看到用户表单并通过用户表单输入数据。 这是我目前拥有的代码。 Private Sub Wor
目前,我正在尝试训练一个同时具有复值张量作为输入和输出的网络。作为损失函数,我采用输出与真实值之间逐点差异的范数。 当我尝试最小化损失函数时,tensorflow 的“最小化”函数提示意外的复数。我觉
这个函数是我想要优化的主力。任何关于如何限制其内存使用的想法都会很棒。 function F(len, rNo, n, ratio = 0.5) s = zeros(len); m = co
在 Qt 下的 Windows Mobile 和 Symbian 平台上,如何通过单击应用程序中的某个按钮来最小化我的应用程序? 最佳答案 大概QWidget::setWindowState将适合您,
我是一名优秀的程序员,十分优秀!