在MATLAB中解决多个非线性独立方程的最快方法?
matlab有两种求解非线性方程的方法: fzero :求解单个非线性方程 因此,可以使用以下方法求解n非线性独立方程的系统: 使用循环使用fzero 分别求解方程 使用循环使用fsolve 分别求解方程 使用fsolve将它们解决在一起 我的直觉是: 作为复杂性(梯度计算)为0(n^2) ,循环方法比单个系统要快. 对于小n,循环可能会慢n,因为一个循环在MATLAB中的开销高,并且可能有一些恒定的启动时间 fzero比fsolve更快,因为它是专门为单个非线性方程式制作的. 问题: n非线性独立方程系统的最快方法是什么?还有其他方法吗?应该使用哪些选项来加快流程? 示例问题:(可以用于基准不同的答案) x_i^2 = 1 i在1和n 之间 相关线程 求解多个独立的非线性非线性 解决方案 我正在将此答案添加到上面的评论中详细说明.根据我的经验,到目前为止,最快的方法是使用文件交换上可用的vectorized版
2 2023-05-24
编程技术问答社区
在某些限制内求解一对耦合的非线性方程
这个答案 to 这个问题仅适用于对耦合函数的所需解决方案不限于一定范围的情况. 但是,例如,如果我们想要一个解决方案,以便0 ?另一种思考方式是,如果x或y是,例如,小于零? brentq ),但是这些仅适用于一个变量的函数. 为什么scipy不足以提供针对特定范围内多变量函数的根求解器?如何实现这样的求解器? 解决方案 这在算法上是非平凡的.未来的Scipy版本可能具有这种例程. 今天,您可以将发现问题的发现问题置于最小二乘问题(最小化LHS的正方形之和),并使用 scipy git repo的主分支. 编辑:scipy.optimize.least_squares现在在发布的Scipy中可以使用很长时间了(在2015年问这个问题时并非如此). .
16 2023-05-12
编程技术问答社区
如果一个变量取决于优化变量,如何对程序进行优化编码?
进行优化时在MATLAB中有一个问题.假设我想在x 的向量上进行优化问题 min_x f(x,c)使得sum(x)=1.对于每个固定x,c是一个常数,例如 (x.*a+c).^(1./alpha)+(x.*b+c).^(1./alpha)=1 其中已知a,b,alpha. 该算法适用于每个固定x,因此sum(x)=1我们需要从 中找到c (x.*a+c).^(1./alpha)+(x.*b+c).^(1./alpha)=1 和计算f(x,c),然后我们更新新的x. 是否可以使用MATLAB中的Fmincon来解决问题?我想放 (x.*a+c).^(1./alpha)+(x.*b+c).^(1./alpha)=1 对于 fmincon中的非线性约束,但我想知道它是否有效,因为我们不知道如何以x的方式明确编写c. 解决方案 使用solve用x 明确地写c 定义f(x,c)是x的函数 c被其表达式取代 开始优化 请阅读以下评论
0 2023-05-12
编程技术问答社区
在R中进行任意约束的优化
我已经在Excel中完成了此操作,但需要在r. 中运行适当的模拟 我需要最小化函数F(x)(x是向量),而具有sum(x)=1的约束,x中的所有值都是[0,1]和另一个函数G(x) > G_0. 我已经尝试了optim和constrOptim.他们都没有给您这个选项. 解决方案 您所指的问题是(大概)具有非线性约束的非线性优化.这是最一般的优化问题之一. 我用于这些目的的软件包被称为nloptr:使用此列表作为优化问题的一般引用. 其他解决方案 使用 lagrange乘法器,然后使用r r r r r r r求解命令 nlm . 其他解决方案 您可以在OpenMX软件包中执行此操作(当前在下面列出的网站上进行主机.针对今年的Cran上的2.0重新介绍) 这是一个通用软件包,主要用于结构方程建模,但处理非线性约束. 为您的情况,用MXALGEBRAS()表示的代数制作MxModel()和MxConstraints() 中的约束. 当您mxru
最初使用scipy猜测.
我有以下问题用于使用 python : 我有7个参数:X,Y,Z,T,HF,M1F和M2F.用户应输入这3个,并且程序应计算其余的. 我的关系是: HF = -xyt M1F = -2xzt + 4yzt - xyt + 4tz^2 M2F = 2yzt - xyt 1 = -2xt + 2yt + 4zt 尝试解决问题: 我有7个参数,用户应输入3 =>我将留下4个参数.因此,这一切都是关于解决4个未知数的4个非线性方程的系统. 我在线阅读scipy.optimize可以用于求解非线性方程系统. 但是我需要一个最初的猜测. 回到问题的物理学,我有以下初始条件: x > 0 y > 0 z 0 M1F > 0 M2F > 0 M2F > M1F (solving this inequality from the above equations I get: -x + y + 2z M1F + d (sol
IBM Optimization Studio OPL,为什么不尊重约束条件?
这是 第一个约束:从每个组中,我们只想选择一种产品,这意味着我们不能允许同一组中的两个产品在同一篮子里(即Product11和Product12永远不应放在同一篮子里) 第二个约束:在用户篮中,我们只希望用户感兴趣的类别中的产品. '也不是"脂肪". 因此,我更改了OPL代码产品. {string} categories=...; {string} groups[categories]=...; {string} allGroups=union (c in categories) groups[c]; {string} products[allGroups]=...; {string} allProducts=union (g in allGroups) products[g]; float prices[allProducts]=...; int Uc[categories]=...; float Ug[allGroups]=...; float budget=.
0 2023-05-12
编程技术问答社区
在Gekko的回归IMODE中,多个方程式最小
我想使用两个共享自变量的方程式在两个不同尺寸的数据集中测得的y和y之间的差异.我正在使用gekko作为我的求解器. 我得到异常错误Data arrays must have the same length, and match time discretization in dynamic problems当我的两个数据集具有不同数量的行时.但是,即使我将行数设置为相等,我也会得到错误duplicate variable declarations.因此,它使我相信我的优化问题是不明确的,以求解具有共享自变量的两个方程. 变量:v1, v2 参数(DS =数据集): ds1_p1, ds1_p2 ds2_p1, ds2_p2, ds2_p3 等式: y1 = v1 * ds1_p1 + v2 * ds1_p2 y2 = v1 * v2 * ds2_p1 + v1 * ds2_p2 + v2 * ds2_p3 最小化: ((y1_pred - y1
10 2023-05-12
编程技术问答社区
在R(L-BFGS-B需要" FN"的有限值)中优化Optim()
我在r中使用optim()来解决涉及积分不可分割的可能性时遇到了一些麻烦.我遇到一个错误,上面说" optim中的错误(par = c(0.1,0.1),lll,method =" l-bfgs-b",soulth = c(0,:l-bfgs-b需要'fn的有限值'"".下面是我的代码: s1=c(1384,1,1219,1597,2106,145,87,1535,290,1752,265,588,1188,160,745,237,479,39,99,56,1503,158,916,651,1064,166,635,19,553,51,79,155,85,1196,142,108,325 ,135,28,422,1032,1018,128,787,1704,307,854,6,896,902) LLL=function (par) { integrand1
14 2023-05-12
编程技术问答社区
ipopt选项用于减少次数较少后违反约束的选项
我正在使用通过OpenMDAO实施的IPOPT,并且在理解和控制停止条件方面遇到了一些困难. 这是我具体经历的:最初,iPopt能够找到一个看起来更好的解决方案,尽管限制略有侵犯(直觉告诉我,调整一些参数可能会将其带入可行区域).来自这个讨论平等或不平等约束在求解器在最终迭代中完成融合之前,不一定会得到满足,"因此,我想知道我是否可以更换公差,以便求解器会开始更快地满足约束(我什至可以正确地理解这一点?).目前,几乎所有评估都处于不可行的状态. 我意识到这种方法会导致最佳解决方案,但是我的功能评估在计算上非常昂贵,因此我希望能够对早些时候退出但可行的结果进行某种控制.看着,如果有用的话,这是一个尚未相关的优化的输出.我的每个参数在大约-30至+30的顺序上,我的约束都具有1.0的上限. This is Ipopt version 3.11.7, running with linear solver ma27. Number of nonzeros in equalit
GAMS显示风格
如何在游戏中显示文本? 例如:在MATLAB中,我可以使用DISP('Matlab'),然后我将输出作为MATLAB. 有可能在游戏中像这样.实际上,我是GAMS环境的新手. 问候 解决方案 显示"嗨,警告消息!" ...应该工作.这将出现在您的.lst文件中,您应该熟悉用于调试目的的阅读. 其他解决方案 实际上有两种方法: $log "text to display"如果您希望它在汇编阶段出现(仅在.log文件中显示) display "text to display" ;如果您希望它在执行阶段中出现(仅在.lst文件中显示)
2 2023-05-12
编程技术问答社区
为一列坐标x和y找到最佳位置
我是编程,尤其是Python的新手,但我正在尝试学习它,到目前为止,我发现它非常有趣. 我有30个固定坐标X和Y的列表. x = np.array([[13,10,12,13,11,12,11,13,12,13,14,15,15,16,18,2,3,4,6,9,1,3,6,7,8,10,12,11,10,30]]) y = np.array([[12,11,10,9,8,7,6,6,7,8,11,12,13,15,14,18,12,11,10,13,15,16,18,17,16,15,14,13,12,3]]) 我想找到一个优化的(集中式)位置,该位置可以通过找到最小距离连接到10个固定坐标的最大值. 我累了使用优化算法,但我只能获得一个坐标列表的最佳位置(即,我不能将位置限制为10个坐标). 任何帮助将不胜感激. def objective(x): px = x[0] py = x[1] wdistance = sum(((px
在R中使用nloptr不改变初始值
我一直在为R中的优化问题而苦苦挣扎.由于幻想运动的数据示例,我终于发现了lpSolve线性问题.但是,我的原始和(仍然)当前的问题是使用r. 我要做的是最大程度地减少两股投资组合的差异,其中两只股票的回报几乎完全负相关(对于那些熟悉学术金融的人来说,最终目标是证明/证明/反驳是否存在套利机会).我想最大程度地减少差异,但要遵守两个权重的总和完全等于1,而在0和1之间.下面是我使用的确切代码,应易于重现: sd1
6 2023-05-12
编程技术问答社区
scipy.optimize.minimize('SLSQP')给定2000 DIM变量时太慢
i存在一个非基本优化问题,具有约束和上限/下限,因此,使用Scipy,我必须使用SLSQP.这个问题显然不是凸. 我得到了雅各布的目标和约束函数,可以正常工作(结果是好/快到300个输入向量).所有功能均已矢量化并调整为非常快速运行.问题在于,使用1000+输入向量需要很长时间,尽管我可以看到最小化器并未将我的功能调用很多(客观/约束/渐变),并且似乎在内部花费了大部分处理时间.我读了Slsqp的perf的某个地方是O(n^3). 是否有python的这种类型问题的SLSQP实现或其他方法?我尝试了NLOPT,并且鉴于我在Scipy中使用的功能完全相同(带有包装器以适应其方法签名),但以某种方式返回了错误的结果.我也没有将ipopt与pyipopt软件包一起使用,无法让工作ipopt二进制文件与Python包装器一起使用. 更新:如果有帮助,我的输入变量基本上是(x,y)元组的向量或代表坐标的2D表面中的点.有了1000分,我最终得到了2000个DIM输入向量.我要优化的功能
12 2023-05-12
编程技术问答社区
在R语言中,如何进行涉及解微分方程的非线性最小平方优化?
更新可再现示例以说明我的问题 我最初的问题是"在R中实施信任区域反射优化算法".但是,在制作可重复的示例的方式上(感谢@Ben的建议),我意识到我的问题是,在Matlab中,一个函数lsqnonlin是好的(意味着无需选择一个好的起始价值,很快)在大多数情况下,我在R中没有这样的函数.不同的选择算法在不同的情况下效果很好.不同的算法达到了不同的解决方案.其背后的原因可能不是R中的优化算法不如MATLAB中的信任区域反射算法,它也可能与R处理自动差异化有关.这个问题实际上来自两年前的中断工作.当时,包装 Optimx 的作者之一John C Nash教授建议MATLAB进行自动差异化已有很多工作,这可能是MATLAB的原因LSQNONLIN的性能要比R中的优化函数/算法更好.我无法凭自己的知识来弄清楚它. 下面的示例显示了我遇到的一些问题(即将到来的示例更可重复).要运行示例,请先运行install_github("KineticEval","zhenglei-gao").您需
12 2023-05-12
编程技术问答社区
找到一条与数据相匹配的曲线
我正在寻找一个非线性曲线拟合程序(可能最有可能在R或Python中找到,但我对其他语言开放),这将摄取X,Y数据并适合曲线. 我应该能够指定我想适合的表达式的类型. 示例: "A+B*x+C*x*x" "(A+B*x+C*x*x)/(D*x+E*x*x)" "sin(A+B*x)*exp(C+D*x)+E+F*x" 我从中得到的至少是常数(a,b,c等)的值,并希望对比赛的适合度进行统计. 有商业计划可以做到这一点,但是我希望能够找到像现在在语言库中适合所需表达的常见的东西.我怀疑Scipy的优化内容可能可以做到这一点,但是我看不到它可以定义一个方程式.同样,我似乎找不到我想要的东西. 是我在那里寻找的东西,还是我需要自己的滚动?如果它在那里,我不想这样做,而我只是很难找到它. 编辑:我想这样做,以比从实验室Fit获得更多的控制过程.实验室FIT UI令人恐惧.我也希望能够将范围分为多个部分,并且具有不同的曲线代表了范围的不同部分.最后,结果必须(
2 2023-05-07
编程技术问答社区
解决非线性方程numpy。
编辑: 一切都很好:) This is a code which works with small values of t=20 and TR=([[30,20,12,23..],[...]]) but when I put higher values it is shown "Expect x to be a 1-D sorted array_like.". Do you know how to solve this problem?? import matplotlib.pylab as plt from scipy.special import erfc from scipy import sqrt from scipy import exp import numpy as np from scipy.interpolate import interp1d # The function to inverse: t = 100 alfa = 1.1*10**
4 2023-05-02
编程技术问答社区
求解方程的非线性系统
我正在使用此简单代码收到错误,问题是该错误仅在我需要的一个方程式中出现(78 * x**0.3 * y**0.8 - 376). 错误:invalid value encountered in double_scalars ; F[0] = 78 * x**0.3 * y**0.8 - 376 如果我从第一个方程式擦除 * y**0.8,则代码运行完美,但显然对我不起作用. 代码: import numpy as np from scipy.optimize import fsolve def Funcion(z): x = z[0] y = z[1] F = np.empty((2)) F[0] = 78 * x**0.3 * y**0.8 - 376 F[1] = 77 * x**0.5 * y - 770 return F zGuess = np.array([1,1]) z = fsolve(Funcion,zGu
20 2023-05-02
编程技术问答社区
如何用Python解决3个非线性方程的问题
我有以下我需要解决的3个非线性方程的系统: -xyt + hf = 0 -2xzt + 4yzt -xyt + 4z^2t -m1f = 0 -2xt + 2yt + 4zt -1 = 0 其中X,HF和M1F是已知参数.因此,y,z和t是要计算的参数. attemp解决问题: def equations(p): y,z,t = p f1 = -x*y*t + HF f2 = -2*x*z*t + 4*y*z*t - x*y*t + 4*t*z**2 - M1F f3 = -2*x*t + 2*y*t + 4*z*t - 1 return (f1,f2,f3) y,z,t = fsolve(equations) print equations((y,z,t)) 但是,如果我想使用scipy.optimize.fsolve,那么我应该输入初始猜测.就我而言,我没有任何初始条件. 是否有另一种方法可以在
0 2023-05-01
编程技术问答社区
非线性方程根的问题
我具有双曲线功能,我需要找到其中的0.我尝试了各种经典方法(分配,牛顿等). 第二个衍生物是连续的,但在分析上无法访问,因此我必须排除使用它们的方法. 出于我的应用程序目的,牛顿方法是唯一提供足够速度的方法,但是如果我与实际的零不够近,那是相对不稳定的.这是一个简单的屏幕截图: 零约为0.05.而且由于该函数在0处发散,如果我对初始猜测值的最小位置比一定程度的最小位置更大,那么我显然对渐近线有问题. 在这种情况下,是否有一种更稳定的方法最终提供与牛顿相当的速度? 我还考虑过以相同的零来转换等效的更好函数,然后才能应用牛顿,但我真的不知道我可以做哪些转换. 任何帮助将不胜感激. 解决方案 对于您的情况, @Sams-Studio的答案可能会起作用,我会首先尝试.在类似的情况下 - 在多变量上下文中 - 我使用了牛顿 - 同能方法. 基本上,您限制牛顿步骤,直到y的绝对值下降为止. 实施最便宜的方法是,如果y从最后一步增加,则您是牛顿步骤的一
16 2023-04-30
编程技术问答社区