我有三个未知数4非线性方程X,Y和Z我想要解决.方程的形式如下:
F(m) = X^2 + a(m)Y^2 + b(m)XYcosZ + c(m)XYsinZ
Run Code Online (Sandbox Code Playgroud)
...其中a,b并且c是常数,它们取决于F四个方程中的每个值.
解决这个问题的最佳方法是什么?
我正在尝试进行一些参数估计,并希望选择参数估计值,以最大限度地减少预测方程中的平方误差超过约30个变量.如果方程是线性的,我只计算30个偏导数,将它们全部设为零,并使用线性方程求解器.但不幸的是,这个等式是非线性的,它的衍生物也是如此.
如果方程式超过单个变量,我只会使用牛顿方法(也称为Newton-Raphson).Web上有丰富的示例和代码来实现Newton的单个变量函数的方法.
鉴于我有大约30个变量,如何使用牛顿方法为这个问题编写数值解?我有闭合形式的方程,可以计算一阶和二阶导数,但我不知道如何从那里开始.我在网上发现了大量的治疗方法,但很快就会进入重基质表示法.我在维基百科上找到了一些适度的帮助,但我在将其转换为代码时遇到了麻烦.
我担心崩溃的地方是矩阵代数和矩阵求逆.我可以使用线性方程求解器反转矩阵,但我担心得到正确的行和列,避免换位错误,等等.
要非常具体:
我想使用表将变量映射到它们的值.我可以写一个这样一个表的函数,它返回给出这样一个表作为参数的平方误差.我还可以创建相对于任何给定变量返回偏导数的函数.
我对表中的值有一个合理的初始估计,所以我不担心收敛.
我不确定如何编写使用估计的循环(每个变量的值表),函数和部分导数函数表来产生新的估计.
最后一点是我要帮助的.任何直接的帮助或指向好的来源将受到热烈的赞赏.
编辑:由于我有封闭形式的第一和第二衍生物,我想利用它们并避免更简单的融合方法,如单面搜索.
让我们N成为一个数字(10<=N<=10^5).
我必须将它分成3个数字(x,y,z),以便验证以下条件.
1. x<=y<=z
2. x^2+y^2=z^2-1;
3. x+y+z<=N
Run Code Online (Sandbox Code Playgroud)
我必须找到一个方法中给定数字可以得到多少组合.
我尝试了如下,但它需要花费很多时间才能获得更高的数字并导致超时...
int N= Int32.Parse(Console.ReadLine());
List<String> res = new List<string>();
//x<=y<=z
int mxSqrt = N - 2;
int a = 0, b = 0;
for (int z = 1; z <= mxSqrt; z++)
{
a = z * z;
for (int y = 1; y <= z; y++)
{
b = y * y;
for (int x = 1; x <= y; x++)
{
int x1 …Run Code Online (Sandbox Code Playgroud) 我需要使用特定非线性函数的泰勒级数扩展对来自 1 个暗像素向量的每个像素值进行非线性扩展(e^x or log(x) or log(1+e^x) ) 的,但至少基于泰勒级数概念,我目前的实现对我来说是不正确的。背后的基本直觉是将像素阵列作为 CNN 模型的输入神经元,其中每个像素都应该通过非线性函数的泰勒级数展开进行非线性展开。
新更新1:
从泰勒级数我的理解,泰勒级数为函数写F一个变量x的函数的值而言F,它是在为变量的另一个值衍生物x0。在我的问题中,F是特征(又名,像素)的非线性变换函数,x是每个像素值,x0是 0 处的麦克劳林级数近似值。
新的更新 2
如果我们使用log(1+e^x)近似阶数为 2 的泰勒级数,则每个像素值将通过采用泰勒级数的第一和第二展开项产生两个新像素。
图解说明
这是上述公式的图形说明:
其中X是像素阵列,p是泰勒级数的近似阶数,?是泰勒展开系数。
我想用非线性函数的泰勒级数展开来非线性地展开像素向量,如上图所示。
我目前的尝试
这是我目前的尝试,但对像素阵列无法正常工作。我正在考虑如何使相同的想法适用于像素阵列。
def taylor_func(x, approx_order=2):
x_ = x[..., None]
x_ = tf.tile(x_, multiples=[1, 1, approx_order+ 1])
pows = tf.range(0, approx_order + 1, dtype=tf.float32)
x_p = tf.pow(x_, pows)
x_p_ = x_p[..., None]
return …Run Code Online (Sandbox Code Playgroud) python nonlinear-functions taylor-series conv-neural-network tensorflow
我怎样才能解决这个等式
x 3 + x - 1 = 0
使用定点迭代?
我可以在网上找到任何定点迭代代码(特别是在Python中)吗?
python equation nonlinear-functions numerical-analysis fixed-point-iteration
我正在寻找一种方法的开源实现,该方法对Java中的非线性多变量函数进行约束优化.
美好的一天,
我正在努力与R和自然对数(ln).首先,我在R中找不到ln(x)函数.我注意到log(x)与ln(x)相同(当使用带计算器的ln(x)时).
在R:
log(5) = 1.609438
Run Code Online (Sandbox Code Playgroud)
并用计算器:
ln(5) = 1.609438
log(5) = 0.69897
Run Code Online (Sandbox Code Playgroud)
我试图在R中拟合一个等式(这正是我在3篇参考文献中找到的):
y = a + b(x/305)+ c(x/305)2 + d ln(305/x)+ f ln 2(305/x)
在R中使用以下语法来使用等式是否正确?
y ~ a + b*(x/305) + c*((x/305)^2) + d*log(305/x) + f*(log(305/x))^2
Run Code Online (Sandbox Code Playgroud)
想法是在R中使用此函数和nls().提前感谢!
我有一个包含自变量和一组因变量的数据集.我想使用自举非线性最小二乘过程为每组自变量拟合一个函数.在某些情况下,自变量是"良好的质量",即合理地适合函数.在其他情况下,他们很吵.
在所有情况下,我都可以用来nls()估计参数.但是,当数据有噪声时,引导程序会抛出错误Error in nls(...) : singular gradient.我可以理解为什么nls适合噪声数据会失败,例如在太多次迭代后无法收敛,但我不明白为什么它是一个奇异的梯度误差,以及为什么我只得到质量差的重采样数据集.
码:
require(ggplot2)
require(plyr)
require(boot)
# Data are in long form: columns are 'enzyme', 'x', and 'y'
enz <- read.table("http://dl.dropbox.com/s/ts3ruh91kpr47sj/SE.txt", header=TRUE)
# Nonlinear formula to fit to data
mmFormula <- formula(y ~ (x*Vmax) / (x + Km))
Run Code Online (Sandbox Code Playgroud)
nls完全能够拟合数据(即使在某些情况下a,我怀疑模型是否适合数据.
# Use nls to fit mmFormula to the data - this works well enough
fitDf <- ddply(enz, .(enzyme), function(x) coefficients(nls(mmFormula, x, start=list(Km=100, Vmax=0.5))))
# Create points to …Run Code Online (Sandbox Code Playgroud) 有一个非线性动态系统,x_n = f(x_n,eta)其功能形式是x[n+1] = 2*x[n] mod 1.这是一个混乱的动力系统,称为锯齿图或伯努利图.我在实现Eq(4)和Eq(5)给出的逆映射的两个表示时面临困难.以下是该问题的简要说明.

其中序列(s[n+k])_k=1 to N-1是状态的符号描述x[n].该描述源于下面描述的单位间隔的划分.
设分区数M = 2,符号空间= {0,1},分配符号的规则是
s[n+1] = 1 if x[n] >= 0.5, otherwise s[n+1] = 0
Run Code Online (Sandbox Code Playgroud)
本文作者:
Linear, Random Representations of Chaos
Run Code Online (Sandbox Code Playgroud)
对于方程(5),我在反向之后没有获得相同的时间序列,在进行二进制到实数转换之后几个值不同.有人可以让我正确的程序吗?
我试图为Eqs(4)和(5)实现Bijective图,但它不起作用.
公式(5)的代码 - 我将二进制二进制化.x包含实数; s是每个真实的0/1二进制等价物; y是转换s成真实后的答案.s1是x的+ 1/-1二进制等价物; b是转换为真实后的答案.在+ 1/-1的情况下,当我从符号表示转换为实数时,我将-1切换为0然后在公式(5)中应用公式.从答案,但可以看出,y和b不一样的x做转换后.当原始的实数都是无符号的理性时,我也得到了负的实数!我怎样才能正确实施以使它们相同?
N =10;
x(1) = 0.1;
for i =1 : N
x(i+1) = mod(x(i)*2, 1);
end
y = x;
s …Run Code Online (Sandbox Code Playgroud) 我一直在测试一种已在文献中发表的算法,该算法涉及在Matlab和Python中求解一组"m"非线性方程.这组非线性方程涉及包含复数的输入变量,因此得到的解也应该是复杂的.截至目前,我已经能够通过使用以下代码行在Matlab中获得相当不错的结果:
lambdas0 = ones(1,m)*1e-5;
options = optimset('Algorithm','levenberg-marquardt',...
'MaxFunEvals',1000000,'MaxIter',10000,'TolX',1e-20,...
'TolFun',1e-20);
Eq = @(lambda)maxentfun(lambda,m,h,g);
[lambdasf] = fsolve(Eq,lambdas0,options);
Run Code Online (Sandbox Code Playgroud)
其中h和g分别是复数矩阵和向量.该解决方案非常适用于各种初始值.
我一直试图在Python中模仿这些结果,但却没有取得什么成功.数值求解器的设置似乎有很大不同,"levenburg-marquardt"算法存在于函数根之下.在python中,这个算法无法处理复杂的根,当我运行以下行时:
lambdas0 = np.ones(m)*1e-5
sol = root(maxentfun, lambdas0, args = (m,h,g), method='lm', tol = 1e-20, options = {'maxiter':10000, 'xtol':1e-20})
lambdasf = sol.x
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
minpack.error: Result from function call is not a proper array of floats.
Run Code Online (Sandbox Code Playgroud)
我已经尝试过使用其他一些算法,比如'broyden2'和'anderson',但它们远不如Matlab,只有在初始条件下玩之后才会给出好的结果.函数'fsolve'也不能处理复杂的变量.
我想知道是否有一些我正在应用的错误,如果有人知道如何正确解决Python中复杂的非线性方程式.
非常感谢你
python matlab nonlinear-functions complex-numbers numerical-methods
python ×4
matlab ×2
r ×2
algorithm ×1
binary-data ×1
c# ×1
equation ×1
java ×1
minimization ×1
numpy ×1
quantization ×1
scipy ×1
tensorflow ×1