问题标签 [nonlinear-functions]

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.

0 投票
2 回答
3255 浏览

c++ - 错误定位法(需要帮助)

我正在尝试编写代码来使用错误位置方法找到非线性方程的根。
我已经完成了我的代码,但我仍然有一个问题。例如,如果我知道根在 5 和 6 之间。所以我输入上限为 7,下限输入 6。我仍然得到根。即使两个初始猜测没有包含根,我也不明白错误位置方法如何收敛。

这是我的代码:

0 投票
1 回答
1228 浏览

matlab - Matlab:在函数“fminsearch(fun,x0)”中,x0 未被接受为矩阵

在函数fminsearch(fun,x0)的 Matlab 文档中,x0可以是标量、向量或矩阵。但是我试图将此函数称为:

其中,k_to_perturb_annealing_initial是 101x82 矩阵。我在k_to_perturb_annealing=fminsearch(delta_obj,k_to_perturb_annealing_initial);线上遇到了一个错误。

错误信息:

我在上面调用的函数gibbs_sampling_sisim_well_testing(k_to_perturb_annealing)是:

0 投票
1 回答
872 浏览

r - 处理 nls - R 脚本中的 0 错误

有什么方法可以让我的 nls 在进行非线性拟合时具有 0 残余误差?我的数据中有一些案例,其中拟合应该有 0 错误,但 nls 总是失败并吐出错误。

谁能给我看:

  1. 我如何测试这是否是 nls 吐出的错误?
  2. 如何允许 0 个错误情况?(完美契合)

这是我的 nls 电话:

0 投票
3 回答
604 浏览

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 谢谢

0 投票
1 回答
58 浏览

optimization - 获取尾随求解器结果

我有一个数据集,用于计算(近似)非线性函数的参数。

原始数据点及时分散,目前我的求解器能够计算出最佳参数集,这些参数对给定时间段内的数据项的函数进行建模。当我合并更大的数据集时,函数逼近的准确性会提高。然而,与此同时,我不希望数据项太旧而无法在很大程度上影响函数逼近。我现在计划及时使用处于预定义窗口内的数据项。这个预定义的窗口将随着时间的推移而移动,合并新数据项并丢弃旧数据项。然而,要包含或排除数据元素,我总是必须从修改过的数据集开始处理,这是一个耗时且不适合实时操作的过程。

我试图解决的问题是如何将额外数据项的学习融入到近似函数中,而不必遍历整个原始数据集。最初的想法是通过子集中的总数据项与所有子集中的总数据项的比率,对从每个数据子集学习到的函数参数进行加权。有人能想到更好的方法吗?对任何可能的解决方案的提示将不胜感激。

0 投票
0 回答
18028 浏览

r - 尽管指定了随机效应,但 nlme 错误“组的公式无效”

我已经对此进行了一些搜索,但是我发现的邮件列表帖子与未指定随机效果的人相关联,nlme而我已经这样做了。我还拥有 Pinheiro 和 Bates 所著的《S 和 S-Plus 中的混合效应模型》一书,但无法从书中解决我的问题。

我仍在进行营养数据分析,现在已经转向真实数据。数据来自一项人口调查,并采用重复测量设计,因为每个受访者都有两次 24 小时的营养素摄入量召回。

我已经成功地将 lme4 模型拟合到我的数据中,现在我试图找出如果我使用非线性方法会发生什么。我的数据快照如下:

关于数据的摘要信息是:

使用该lme4软件包,我已经成功地拟合了一个线性混合效应模型(随机效应来自受试者,IntakeDay是与 相关的重复测量因子BoxCoxXY,它是 的变换IntakeAmt):

我一直在尝试使用该nlme包来查看拟合非线性模型来比较两者,但我无法让我的语法正常工作。我最初的问题是我的数据似乎没有相关的 SelfStart 模型,所以我过去常常geeglm生成起始值(保存到名为 的数据框的系数Male.nlme.start)。但现在我得到了错误:

我无法弄清楚我做错了什么,nlme我使用的语法是:

无论是否包含在整体模型规范中,我都尝试过分析RespondentID,这似乎没有影响。

我试图坚持使用非线性方法的原因是 SAS 中的原始分析使用了非线性方法。虽然从 lme 分析来看,我的残差等看起来不错,但我很想知道非线性方法会产生什么影响。

如果有帮助,traceback()最后一次分析尝试的结果包括RespondentID

谁能建议我哪里出错了?我开始怀疑是否(1)有太多因素级别RespondentID无法使用,nlme或者(2)该方法只有在我为 提供开始参数时才有效RespondentID,这对于我拥有的数据来说似乎是荒谬的,因为这是我的主题标识符。

更新:回答 Ben,SASnlmixed模型是固定效应的一般对数似然函数:

在哪里:

Scalegeeglm= 来自和的色散值

Lambda.Value= 与先前用于通过公式boxcox()转换IntakeAmt为的最大对数似然输出相关联的 lambda 值BoxCoxXYMale.Data$BoxCoxXY <- (Male.Data$IntakeAmt^Lambda.Value-1)/Lambda.Value

SAS代码中的random语句是:

所以模型中有两个误差项,它们都适合作为随机效应。第二个方括号表示按行顺序列出的随机效应方差矩阵的下三角形,并使用 SAS 语法中的 SAS 宏变量指定。

我得到的模型摘要是正常的单行概述,显示协变量矩阵 (BX) 加上一个误差分量,所以这里没有太多帮助。

第二次更新:我意识到我没有删除与女性受试者相关的 RespondentID 级别,因为我在将 RespondentID 分解为整个数据框之前按性别拆分为单独的数据框以进行分析。nlme在删除 RespondentID 的未使用因子水平后,我重复了分析,我得到了同样的错误。结果lmer是一样的——很高兴知道。:)

0 投票
2 回答
1408 浏览

r - R中非线性最小二乘内的样条

考虑 R 中的非线性最小二乘模型,例如以下形式):

(我真正的问题有几个变量,外部函数不是逻辑的,而是涉及更多;这个更简单,但我认为如果我能做到这一点,我的案例应该几乎立即跟进)

我想用(比如说)自然三次样条代替术语“alpha + beta * x”。

这是一些代码,用于在逻辑中创建一些具有非线性函数的示例数据:

不需要围绕它的逻辑,如果我在 lm 中,我可以很容易地用样条项替换线性项;所以一个线性模型是这样的:

然后变成

生成拟合值很简单,借助 rms 包(例如)获取预测值似乎很简单。

确实,用基于 lm 的样条拟合来拟合原始数据并不算太糟糕,但我在逻辑函数中需要它是有原因的(或者更确切地说,是我的问题中的等价物)。

nls 的问题是我需要为所有参数提供名称(我很高兴将它们称为 (b1, ..., b5) 用于一个样条拟合(并且说 c1, ... , c6 用于另一个变量- 我需要能够制作几个)。

是否有一种相当简洁的方法可以为 nls 生成相应的公式,以便我可以用样条曲线替换非线性函数中的线性项?

我能想到的唯一方法是有点笨拙和笨拙,并且如果不编写一大堆代码就不能很好地概括。

编辑澄清)对于这个小问题,我当然可以手工完成 - 为ns生成的矩阵中每个变量的内积写一个表达式, 乘以参数向量。但是然后我必须为每个其他变量中的每个样条再次逐项编写整个内容,并且每次我更改任何样条中的 df 时,如果我想使用 cs 而不是 ns,则再次编写。然后当我想尝试做一些预测(/插值)时,我们会遇到一系列全新的问题需要处理。我需要一遍又一遍地继续这样做,并且可能需要大量的结和多个变量,以便在分析后进行分析 - 我想知道是否有比写出每个单独的术语更简洁、更简单的方法,无需编写大量代码。我可以看到一种相当牛逼的方法来做到这一点,这需要相当多的代码才能正确,但是作为 R,我怀疑有一种更简洁的方法(或者更可能是 3 或 4 种更简洁的方法) ' 只是在躲避我。因此问题。

我以为我过去曾看到有人以相当不错的方式做这样的事情,但是对于我的生活,我现在找不到它;我已经尝试了很多次才能找到它。

[更具体地说,我通常希望能够尝试拟合每个变量中的几个不同样条曲线中的任何一个 - 尝试几种可能性 - 以查看我是否可以找到一个简单的模型,但仍然是一个适合的模型足以达到目的(噪音真的很低;拟合中的一些偏差可以达到很好的平滑结果,但只能达到一定程度)。它比任何接近推理的方法都更“找到一个好的、可解释的但足够的拟合函数”,而数据挖掘对于这个问题来说并不是一个真正的问题。]

或者,如果这在 gnm 或 ASSIST 或其他软件包之一中会更容易,那将是有用的知识,但是关于如何使用它们处理上述玩具问题的一些指示会有所帮助。

0 投票
1 回答
989 浏览

r - 当输入数据集之间的变量数量不同时,如何自动指定正确的回归模型?

我有一个工作R程序,我的内部客户将使用它来分析他们的营养摄入数据。对于他们拥有的每个数据集,他们将重新运行R程序。

数据集的一个关键部分是非线性混合方法分析,使用nlmerlme4中的包含年龄的虚拟变量。根据他们是分析儿童还是成人,公式中的年龄段假人的数量会有所不同,尽管参考年龄段的假人总是最年轻的。我认为可能的年龄段的数量从 4 到 6 不等,所以范围不是很大。如果我需要以此为基础,计算年龄段假人的数量是一件小事。

对我来说,包装基于模型的代码(lmer提供起始参数值、模型的函数以及模型本身nlmer的规范nlmer)的最有效方法是什么,以便根据数量应用正确的函数和模型模型中的年龄段假人?模型中的其他变量在数据集中是恒定的。

我已经将程序设置为自动生成相关的虚拟对象并删除当前分析中未使用的虚拟对象。模型之后的程序也很好地设置为自动化。我只是坚持如何自动化lme4基于两个的分析和功能。这些只会为每个数据集运行一次。

我一直想知道是否需要编写一个函数来包含所有lme4相关代码,或者是否有更简单的方法。我将不胜感激有关如何执行此操作的一些指示。我花了一天的时间来弄清楚如何让nlmer模型所需的功能正常工作,所以我仍然处于功能的初学者水平。

我在R网站上搜索了其他相关的自动化问题,但没有找到与我想做的类似的事情。

提前致谢。

更新以响应有关使用字符串的评论中的建议。这听起来对我来说是一个简单的方法,除了我不知道如何在函数中应用字符串内容,因为每个虚拟变量级别(不包括参考类别)都在函数中使用nlmer。如何拆分字符串并仅使用函数中的虚拟变量?例如,一个分析可能有 AgeBand2、AgeBand3、AgeBand4,而另一个分析可能有 AgeBand5 以及这 3 个?如果是这样VBA,我只会根据年龄虚拟变量的数量创建子函数。我不知道如何在R.

我可以在、 函数和部件while周围环绕一个循环,所以我有一系列循环吗?lmernlmerwhile

这是我希望自动化的代码部分,AgeBand 虚拟变量的数量取决于将要分析的数据集(儿童与成人)。这是使用我一直在测试的数据集SAS进行R翻译,但真实的数据集将非常相似。有必要有一个非线性模型,因为这是我正在研究的经过同行评审的已发布方法的基础。

这些将是数据集之间所需的更改:

  1. 我需要分配的固定效应系数的数量lmer将会改变。
  2. 在函数中,表达式、name.vec 和 function.arg 部分将发生变化
  3. nlmer模型语句和启动参数列表将发生变化。

我可以更改lmer模型语句,以便将 AgeBand 作为水平因子,但之后我仍然需要提取系数的值。

str(Male.AddSugar)给出:

AgeBand 数据错误地显示为有序因子Subgroup。因为我没有使用它,所以我没有回去将其纠正为一个简单的因素。

0 投票
1 回答
1340 浏览

c# - 同时优化一组非线性方程中的参数

我有大量方程(n)和大量未知数(m),其中 m 大于 n。我正在尝试使用 n 个方程和大量观察值来找到 m 的值。

我已经查看了 C# 中 Levenberg-Marquardt 的一些实现,但我找不到任何可以解决超过 1 个方程的方法。例如,我查看了http://kniaz.net/software/LMA.aspx,这似乎是我想要的,除了它只需要一个方程作为参数,我想在同时。同样,这个包:http ://www.alglib.net/包含一个很好的 LM 实现,但仅适用于单个方程。

我想知道 C# 中是否有任何好的实现,或者我可以与我的 C# 代码一起使用可以做到这一点?尝试计算我的方程的一阶微分也将是昂贵的,所以我希望能够使用小的有限差分来近似它们。

此外,是否有任何关于 LM 如何工作以及如何实现它的好且易于理解的解释?我曾尝试阅读一些数学教科书以自己实现它,但我对数学一无所知,所以大部分解释都在我身上丢失了。

编辑:

我的问题的更多细节:

1)方程是动态形成的,可以随着我的问题的每次运行而变化

2)我对起始参数没有很好的猜测。我计划使用随机启动参数多次运行它,以找到全局最小值。

编辑2:

还有一个问题,我正在阅读这篇论文:http ://ananth.in/docs/lmtut.pdf ,我在第 2 部分看到了以下内容:

x = (x1; x2 ... xn) 是一个向量,每个 rj 是一个从 ℜn 到 ℜ 的函数。rj 称为残差,假设 m >= n。

这是否意味着如果我的参数多于函数,则 LM 不起作用?例如,如果我想为函数求解 A 和 B:

Y = AX + B

由于我的参数向量的大小为 2(A 和 B)并且我的函数计数为 1,因此这是不可能的?

0 投票
2 回答
2448 浏览

r - 在 R 中使用非线性函数的分段非线性回归

我希望使用具有多个断点的非线性函数分段执行回归。我已经完成了分段线性回归,但是在指定任何类型的非线性函数时,我们如何在 R 中进行设置?

具体来说,我对使用两个断点的线性、指数和指数 3 个函数感兴趣。请指教

卡提克