标签: nonlinear-functions

用于检查非线性函数f是否总是正的算法

是否有算法检查给定(可能是非线性)函数f是否始终为正?

我目前的想法是找到函数的根源(使用newton-raphson算法或类似的技术,参见http://en.wikipedia.org/wiki/Root-finding_algorithm)并检查衍生物或找到最小值f,但它们似乎不是这个问题的最佳解决方案,根查找算法也有很多收敛问题.

例如,在Maple中,函数验证可以做到这一点,但我需要在我自己的程序中实现它.Maple帮助验证:http://www.maplesoft.com/support/help/Maple/view.aspx? path = verify/function_shells Maple示例:assume(x,'real'); 验证(x ^ 2 + 1,0,'greater_than'); - >返回true,因为对于每个x我们都有x ^ 2 + 1> 0

[编辑]问题的一些背景:函数$ f $是电路的右手微分非线性模型.非线性电路可以通过应用修改的节点分析(MNA)建模为一组常微分方程,为简单起见,我们只考虑具有1维的系统,因此$ x'= f(x)$其中$ f $描述电路,例如$ f $可以是$ f(x)= 10x - 100x ^ 2 + 200x ^ 3 - 300x ^ 4 + 100x ^ 5 $(非线性隧道二极管的模型)或$ f = 10 - 2sin (4x)+ 3x $(约瑟夫森交界处的模型).

$ x $是有界的,$ f $仅在R $的区间$ [a,b] \中定义.$ f $是连续的.我也可以假设$ f $是Lipschitz,Lipschitz常数L> 0,但我不想,除非我必须.

algorithm nonlinear-functions maple nonlinear-optimization

6
推荐指数
1
解决办法
1306
查看次数

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

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

 y ~ theta / ( 1 + exp( -( alpha + beta * x) ) )
Run Code Online (Sandbox Code Playgroud)

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

我想用(例如)自然三次样条替换术语"alpha + beta*x".

这里有一些代码用于在逻辑内部创建一些非线性函数的示例数据:

set.seed(438572L)
x <- seq(1,10,by=.25)
y <- 8.6/(1+exp( -(-3+x/4.4+sqrt(x*1.1)*(1.-sin(1.+x/2.9))) )) + rnorm(x, s=0.2 )
Run Code Online (Sandbox Code Playgroud)

如果我在lm中不需要逻辑,我可以轻松地用样条项替换线性项; 所以线性模型是这样的:

 lm( y ~ x ) 
Run Code Online (Sandbox Code Playgroud)

然后成为

 library("splines")
 lm( y ~ ns( x, df = 5 ) )
Run Code Online (Sandbox Code Playgroud)

生成拟合值很简单,并借助于(例如)rms包得到预测值似乎很简单.

实际上,将原始数据与基于lm的样条拟合拟合并不是太糟糕,但我有理由在逻辑函数中需要它(或者更确切地说,在我的问题中等效).

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

是否有一种合理的方法来生成nls的相应公式,以便我可以用样条函数替换非线性函数内的线性项?

我能想到的唯一方法就是可以做到这一点有点尴尬和笨重,如果不编写一大堆代码就不能很好地概括.

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

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

[更具体地说,我通常希望能够尝试适合每个变量中的几个不同样条曲线 - 尝试几种可能性 - 以便看看我是否能找到一个简单的模型,但仍然适合这个目的是足够的(噪音真的非常低;合适的偏差可以达到很好的平滑效果,但只能达到一定程度).它更像是"找到一个漂亮的,可解释的,但足够的拟合函数",而不是任何接近推理和数据挖掘的东西都不是这个问题的真正问题.

或者,如果这比gnm或ASSIST或其他包装更容易,那将是有用的知识,但是关于如何继续上述玩具问题的一些指示将有所帮助.

r spline nonlinear-functions least-squares

5
推荐指数
1
解决办法
1230
查看次数

优化错误:无法在初始参数处评估功能

因此,我在R中遇到了这个奇怪的错误。我有一个简单的函数,当比较实际价格和模拟价格时会返回错误项hestondifferences()

当我尝试通过以下方式找到本地最小值时:

 res<-optim(fn=hestondifferences, par = c(vT=vT, rho=rho, k=k, sigma=sigma))
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:

optim中的误差(fn = hestondifferences,par = c(vT = vT,rho = rho,k = k,:无法在初始参数处评估函数

令我感到困惑的是,直接使用初始参数调用该函数会hestondifferences(vT, rho, k, sigma)返回正确的值。

该函数hestondifferences()以某种方式编写:只要无法对某些参数集进行仿真,它将返回NAoptim()期望相符的结果。

r nlm nonlinear-functions nonlinear-optimization

5
推荐指数
1
解决办法
1万
查看次数

ggplot2 中的非线性回归线和 R²

我有以下数据:

dput(dat)
structure(list(Band = c(1930, 1930, 1930, 1930, 1930, 1930, 1930, 
1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930
), Reflectance = c(25.296494, 21.954657, 18.981184, 15.984661, 
14.381341, 12.485372, 10.592539, 8.51772, 7.601568, 7.075429, 
6.205453, 5.36646, 4.853167, 4.21576, 3.979639, 3.504217, 3.313851, 
2.288752), Number.of.Sprays = c(0, 1, 2, 3, 5, 6, 7, 9, 10, 11, 
14, 17, 19, 21, 27, 30, 36, 49), Legend = structure(c(4L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, …
Run Code Online (Sandbox Code Playgroud)

regression r nonlinear-functions ggplot2

5
推荐指数
1
解决办法
3094
查看次数

使用Z3 QFNRA策略与数据类型:交互或内联

非线性算术和未解释的函数中,莱昂纳多德莫拉表示这种qfnra-nlsat策略尚未与Z3的其余部分完全整合.我认为情况在两年内发生了变化,但显然整合还不是很完整.

在下面的示例中,我将数据类型纯粹用于"软件工程"目的:将数据组织到记录中.即使没有未解释的功能,Z3仍然无法给我一个解决方案:

(declare-datatypes () (
    (Point (point (point-x Real) (point-y Real)))
    (Line (line (line-a Real) (line-b Real) (line-c Real)))))

(define-fun point-line-subst ((p Point) (l Line)) Real
    (+ (* (line-a l) (point-x p)) (* (line-b l) (point-y p)) (line-c l)))

(declare-const p Point)
(declare-const l Line)

(assert (> (point-y p) 20.0))
(assert (= 0.0 (point-line-subst p l)))

(check-sat-using qfnra-nlsat)
(get-model)
Run Code Online (Sandbox Code Playgroud)
> unknown
(model 
)
Run Code Online (Sandbox Code Playgroud)

但是,如果我手动内联所有函数,Z3会立即找到一个模型:

(declare-const x Real)
(declare-const y Real)
(declare-const a Real)
(declare-const b Real) …
Run Code Online (Sandbox Code Playgroud)

nonlinear-functions smt z3

5
推荐指数
1
解决办法
238
查看次数

支持非线性内核和多标签的SVM实现

我正在寻找支持非线性内核和一对多方案的SVM实现,以执行多标签分类.最好用Python编写,或者我可以用Python用包装器调用.

我正在研究sklearn,有两种实现使用SVM进行分类:

sklearn.svm.LinearSVC - 支持使用one-rest-rest方案进行多标签分类,但它基于liblinear,因此仅支持线性内核.

sklearn.svm.SVC - 基于libsvm,支持非线性内核,但多标签分类是在一对一减少的情况下完成的,它为K-way训练K(K-1)/ 2二元分类器多类问题.

更多信息,请访问:http: //scikit-learn.org/stable/modules/multiclass.html

有谁知道任何其他直接支持多标签分类和非线性内核的SVM实现?

一种可能的解决方案也可能是根据sklearn.svm.SVC调整代码,以执行One-vs-Rest,这是否已经尝试过?

machine-learning svm nonlinear-functions scikit-learn multilabel-classification

5
推荐指数
1
解决办法
922
查看次数

错误:方法错误:没有方法匹配零(::Type{Any})

我对朱莉娅很陌生。我正在尝试求解非线性方程组以找到向量 ( p_new)。下面是我的问题的简化版本。问题是我收到此消息:"ERROR: MethodError: no method matching zero(::, Type{Any})"。我不确定是否是因为初始条件没有明确定义。提前致谢!

p_1 = [ 1, 2, 2.3]
p_1b = [ 1, 2.2, 2.5]
mgc = [1, 1, 0.5]
theta = 0.8
OW1 = [0 1 0; 1 1 1; 0 0 1]
g = ones(3,1)
function pupdate!(p_1,mgc,theta,OW1)
    delt = p_1.*theta
    delt = 2.718281828459.^delt
    Sp1 = sum(delt)
    sp1 = delt./Sp1
    markup = p_1 .- mgc 
    sp1 .= markup
end
g0 = [p_1b, mgc, theta, OW1]
p_new = nlsolve(pupdate!, g0)   
Run Code Online (Sandbox Code Playgroud)

nonlinear-functions julia

5
推荐指数
1
解决办法
2846
查看次数

使用 Julia 查找非线性方程的零

在使用 Julia 中的 SymPy 进行一个过程之后,我生成了一个非线性方程组。为简单起见,我将在此处对非线性方程进行近似处理。我得到的是这样的等式:

R = (p) -> -5.0488*p + p^2.81 - 3.38/( p^(-1.0) )^2.0
Run Code Online (Sandbox Code Playgroud)

我可以绘制 R 函数

using Plots
plot(R, 0,8)
Run Code Online (Sandbox Code Playgroud)

我们可以看到 R 函数有两个零:p = 0 和 5.850< p < 8.75。我想找到正零。为此,我尝试了 nlsolve 函数,但出现错误:

using NLsolve
nlsolve(R , 5.8)

MethodError: no method matching nlsolve(::var"#1337#1338", ::Float64)
Closest candidates are:
nlsolve(::Any, ::Any, !Matched::AbstractArray; inplace, kwargs...)

Run Code Online (Sandbox Code Playgroud)

首先,我的 nlsolve 函数哪里出了问题?

如果可能,我会很感激在 Julia 中使用 SymPy 包的解决方案。

sympy nonlinear-functions julia nonlinear-equation

5
推荐指数
1
解决办法
76
查看次数

在 Mathematica 中求解非线性方程组

我正在尝试在 Mathemtica 中求解非线性方程组。我尝试了 Solve 和 NSolve,我还尝试定义 a_{ij} 和 b_{ij} 和 m33=1 数值来简化方程,但是 Mathematica 似乎工作时间太长或者我做错了什么。在 Mathematica 中我只是想找到解决方案,但我还需要一些 c/c++ lib 来在我的代码中执行此操作。

“运算符”中的主要方程:

M[A[(x,y)]]=B[M[(x,y)]]
Run Code Online (Sandbox Code Playgroud)

其中“operator”是透视变换:

u= (m13 + m11*x + m12*y)/(m33 + m31*x + m32*y); 

v= (m23 + m21*x +m22*y)/(m33 + m31*x + m32*y);
Run Code Online (Sandbox Code Playgroud)

我在 Mathematica 中的输入:

Solve[(b13 + (b11 (m13 + m11 x1 + m12 y1))/(m33 + m31 x1 + 
         m32 y1) + (b12 (m23 + m21 x1 + m22 y1))/(m33 + m31 x1 + 
         m32 y1))/(b33 + (b31 (m13 + m11 …
Run Code Online (Sandbox Code Playgroud)

math numerical wolfram-mathematica nonlinear-functions numerical-methods

4
推荐指数
1
解决办法
6031
查看次数

使用分类变量拟合 nls 模型

我想要拟合一个线性平台 (nls) 模型,将身高描述为年龄的函数,并且我想测试区域之间模型的任何参数是否存在显着差异。

\n

这是我到目前为止所拥有的:

\n
# Create data\ndf1 <- cbind.data.frame (height = c (0.5, 0.6, 0.9, 1.3, 1.5, 1.6, 1.6,\n                                     0.6, 0.6, 0.8, 1.3, 1.5, 1.6, 1.5,\n                                     0.6, 0.8, 1.0, 1.4, 1.6, 1.6, 1.6,\n                                     0.5, 0.8, 1.0, 1.3, 1.6, 1.7, 1.6),\n                         age = c (0.5, 0.9, 3.0, 7.3, 12.2, 15.5, 20.0,\n                                  0.4, 0.8, 2.3, 8.5, 11.5, 14.8, 21.3,\n                                  0.5, 1.0, 5.1, 11.1, 12.3, 16.0, 19.8,\n                                  0.5, 1.1, 5.5, 10.2, 12.2, 15.4, 20.5),\n                         region = as.factor (c (rep ("A", 7),\n …
Run Code Online (Sandbox Code Playgroud)

r function nonlinear-functions nls categorical-data

4
推荐指数
1
解决办法
1372
查看次数