问题标签 [nonlinear-optimization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - Finding a curve to match data
I'm looking for a non-linear curve fitting routine (probably most likely to be found in R or Python, but I'm open to other languages) which would take x,y data and fit a curve to it.
I should be able to specify as a string the type of expression I want to fit.
Examples:
What I would get out of this is at least the values for the constants (A, B, C, etc.) And hopefully stats about the fitness of the match.
There are commercial programs to do this, but I expected to be able to find something as common as fitting to a desired expression in a language library nowadays. I suspect SciPy's optimization stuff might be able to do this, but I can't see that it lets me define an equation. Likewise, I can't seem to find exactly what I want in R.
Is what I'm looking for out there, or do I need to roll my own? I hate to do it if it's there and I'm just having trouble finding it.
Edit: I want to do this for a bit more control over the process than I get from LAB Fit. The LAB Fit UI is dreadful. I'd also like to be able to break the range into multiple pieces and have different curves represent the different pieces of the range. In the end, the result has to be able to (speed-wise) beat a LUT with linear interpolation or I'm not interested.
In my current set of problems, I have trig functions or exp() and I need to execute them 352,800 times per second in real time (and use only a fraction of the CPU). So I plot the curve and use the data to drive the curve fitter to get less expensive approximations. In the old days, LUTs were almost always the solution, but nowadays skipping the memory lookups and doing an approximation is sometimes faster.
r - 非线性整数规划
我想知道R中是否有处理非线性整数优化的包。
“基本上”,我想解决以下问题:
max f(x) s.t x in (0,10) and x is integer
.
我知道一些分支算法能够处理这个问题的线性版本,但这里我的函数f()
可能更复杂。(我什至不能确定它是形式的二次方f(x)=xQx
)。
我想总会有蛮力解决方案来测试所有可能性,只要它们是有界的,但我想知道是否没有更聪明的方法。
c# - 找到满足不等式约束的离散对 {x,y}
我有一些关于 的不等式{x,y}
,它们满足以下等式:
请注意,x
andy
必须是整数。
图形上可以表示如下,蓝色区域是满足上述不等式的区域:
现在的问题是,Matlab 中是否有任何函数可以找到每个可接受的对{x,y}
?如果有一种算法可以做这种事情,我也会很高兴听到它。
当然,我们总是可以使用的一种方法是蛮力方法,我们测试每种可能的组合{x,y}
以查看是否满足不等式。但这是最后的手段,因为它很耗时。我正在寻找一个聪明的算法来做到这一点,或者在最好的情况下,一个我可以立即使用的现有库。
这些x^2+y^2>=100
and x^2+y^2<=200
只是示例;实际上f
,并且g
可以是任何次数的任何多项式函数。
编辑:也欢迎 C# 代码。
java - 非线性编程示例c,java?
你知道非线性规划的一个很好的例子吗?,我在谷歌上搜索过,但是任何文本都只是制定并不能解决问题,他们提到了术语,甚至擅长解决它。
您能否发布一个示例并解释一下如果?
提前致谢
Pd 你知道这个想法是使用 C、java 来查看一些结果和数字。谢谢
matlab - 在 MATLAB 中的 fsolve 每次迭代之间运行一个函数
我正在使用fsolve
最小化 MATLAB 中的能量函数。我正在使用的算法将网格拟合到嘈杂的格子数据,并以网格到每个数据点的距离为代价。
目标函数用平方误差项来表示,以允许使用Gauss-Newton 算法。但是,该程序恢复为 Levenberg-Marquardt:
我意识到这可能是因为虽然成本有平方误差,但目标(成本)函数中有一个阶段选择离每个数据点最近的网格中心,从而使算法非平方。
我想要做的是分别执行最近网格中心的分配更新,以评估成本函数的雅可比行列式。我相信这将允许使用 Gauss-Newton,并显着提高算法的速度。
目前,我相信有这样的事情发生:
我想发生的事情是:
有没有办法在不分离整个算法的情况下将这样的函数插入到迭代中fsolve
?即使我手动编辑 fsolve,Gauss-Newton 算法的性质是否允许我添加这个额外的步骤?
谢谢
matlab - 通过更改变量来最小化目标函数 - 在 Matlab 中?
我有一个101x82
名为A
. 使用这个变量矩阵,我计算了另外两个变量,称为:
1) B
,一个1x1
标量,和
2) C
, 一个50x6
矩阵。
我将 1)
and2)
与它们的类似变量3)
and进行比较,它们4)
的值是固定的:
3) D
,一个1x1
标量,和
4) E
, 一个50x6
矩阵。
现在,我想扰动/改变A
矩阵的值,这样:
1)
~ 3)
,即B
几乎等于D
,并且
2)
~ 4)
,即C
几乎等于E
请注意,在扰动A
时B
和C
会改变,但不会D
和E
。
任何想法如何做到这一点?谢谢!
r - R / S中的非线性回归
我有一个 R / S / 非线性回归相关问题,我不是 R 程序员,所以我有点需要帮助。
我有两个数组 - tt 和 td。
我需要找到参数 a、b 和 c,因此对于非线性函数,最小二乘之和是最小的:
我不知道该怎么做。我尝试了nls()
函数,nls2()
但没有运气......
提前致谢。
编辑:
我的数据:
使用下面答案中的方法,我得到随机数据的 ok 值,但我使用的数据返回缺失值或评估模型消息时产生的无穷大。
很抱歉没有尽快提供数据。
python - python非线性最小二乘拟合
就我的问题所涉及的数学而言,我有点超出我的深度,所以对于任何不正确的命名法,我深表歉意。
我正在考虑使用 scipy 函数 leastsq,但不确定它是否是正确的函数。我有以下等式:
除了 kd (PLP,p0,l0) 之外,我有所有术语的数据(8 组)。我需要通过上述方程的非线性回归来找到 kd 的值。从我读过的例子来看,leastsq 似乎不允许输入数据来获得我需要的输出。
感谢您的帮助
matlab - 求解多个方程的多个相位角
我有几个方程,每个方程都有自己的频率和幅度。我想将方程加在一起并调整各个相位,phase1、phase2 和 phase3,以将 eq_total 的总幅度值保持在特定值(例如 0.8)以下。我知道我可以对信号进行归一化或更改垂直偏移,但出于我的目的,我需要通过更改/查找仅相位 1、相位 2 和相位 3 中的相位值来控制幅度,这将限制方程式时的最大幅度相加。
注意:我使用建设性和破坏性相位干扰来调整求和方程的最大幅度。
有没有办法通过调整/查找phase1、phase2和phase3的值来解决phase1、phase2和phase3,使eq_total中的总和信号的幅度永远不会超过0.8?
这是我测试这个想法的 geogebra 小程序的图片。
这是我用来编辑/测试想法的 geogebra ggb 文件。(我用它来看看我的想法是否可行)如果您想与小程序动态交互,则需要 Java http://dl.dropbox.com/u/6576402/questions/ggb/sin_find_phases_example.ggb
我正在使用 matlab/octave 谢谢