问题标签 [equation-solving]
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.
string - 算法 - 在一个变量中求解线性方程
给定一个字符串形式的表达式,求解 x。表达式中 x 的最高幂等于 1。允许的运算符是 +、* 和 -。这些都是二元运算符。因此,2x 将被写为 2*x。每个运算符后面都会跟一个术语或一个常数。
例如,考虑以下等式:
2*x+5-(4*x-7+(4-2))=10*x-9
这是一个完全有效的等式。1*2*3 形式的表达式无效,但 1*(2*3) 有效。
给定这样一个方程,我们需要找到 x 的解。如果等式无效,程序应显示错误消息。
有人可以提供有关如何解决此问题的任何想法吗?我现在唯一想到的是使用上下文无关语法进行词法分析和解析。但我觉得有一个比这更简单的解决方案。有人可以解释一下吗?
matrix - 如何准确分解正半定矩阵并在线性方程组中使用下三角部分
我有 n 个任意 px 1 向量 x_i 和 pxk 矩阵 A_i 和 npxp 半正定矩阵 S_i,其中一些(通常大多数)*S_i* 是相同的(例如只有两个不同的 S 矩阵,一个正定矩阵适用到 i=1,..., n-1 和半定 S for i=n)。我想对所有 x_i 和 A_i 进行以下线性变换:
x_i* = inv(L_i)x_i 和
A_i* = inv(L_i)A_i,其中
L_i 是一个下三角矩阵,因此 L_i L'_i=S_i (或者更好的 L_i D_i L'_i=S_i 其中 D_i 是对角矩阵。)
n 的范围可以从几到几千甚至更多,p 通常小于 10,k 通常小于 100。S可以包含带零的行和列,它最初形成为 _BB' 其中 B 是下三对角矩阵具有非负对角元素。但这些 B 不可用。
我想知道在速度和准确性方面实现这一目标的最佳方法是什么,并且更加重视准确性?
目前我正在为不同的 S 使用我自己编写的 LDL 分解函数,反转 L 并计算转换,因为我一直在处理具有少量不同 S 和大 n 的情况。如果我理解正确,那么只求解线性方程组而不在精度方面显式反转矩阵会更明智,但就速度而言,它似乎是更好的选择?
我正在使用 Fortran,我宁愿使用一些 LAPACK 函数进行分解,而不是我自己的 LDL 分解,我不能保证它是稳定的等,但我不确定哪个是好方法。
matlab - 求解非线性方程
我想在 MATLAB 中求解两个非线性方程,所以我做了以下操作:
我脚本的一部分
myfunc
功能如下
我有两个未知数x(1)
和x(2)
我的问题是每次调用时如何将值(,,,c
)ii
传递jj
给?myfunc
或如何克服此错误Undefined function or method 'c' for input arguments of type 'double'.
谢谢
matlab - 如何在matlab中求解符号方程
根据 X 参数,我在 Matlab 中有一个方程。我想为 F(x) 的随机数量找到 X 的数量。我尝试了下面的代码。但它给了我两个不同的结果,而我的方程应该只有一个结果。
即使我尝试了roots(f)
,solve(f)
但它给了我一个错误:
???'sym' 类型的输入参数的未定义函数或方法 'isfinite'。
任何人都可以帮助我吗?我该怎么办 ?即使我对解决这个问题有错误的想法,请告诉我。谢谢
函数 betaDistribution_2(a,b)
matlab - MATLAB 用对数符号求解系统 -- 为什么求解器找不到解?
我试图以符号方式求解对数方程组(因此估计的系数是弹性),但 matlab 告诉我“找不到显式解决方案”。任何想法为什么?
[编辑] 根据 Ali 的输入,我尝试了以下方法:
我还尝试了不同的解决语句:
但仍然没有运气。
[编辑] 原来在一台机器上只是一个问题——原来的方法在另一台电脑上运行良好。
java - 有没有办法使用一些 lin 的矩阵求解器来获得矩阵的参数解。代数java库?
我遇到的所有矩阵求解器都要求矩阵是方阵和可逆的,但是那些不是方阵并且有多个解的矩阵呢……我将如何使用 java 找到它的参数形式?
matlab - 如何在 MATLAB 中求解具有 2 个变量的 2 个复杂方程?
我有这两个方程:
其中: y1=y2 ,我想仅使用MATLAB 找到“a”和“b”的确切值。
我应该使用任何 MATLAB 命令来求解这两个方程吗?
ps:我尝试使用solve
命令,但它没有给我任何答案:
它给了我这个:
c++ - 数值求解非线性系统的最佳库或软件是什么?
我有一个由 8 个 7 年级 8 个多项式方程组成的系统,其中 8 个变量具有约束(最小和最大可接受值)。
根据您的经验和知识,解决此类问题最有效的“包”是什么?Mathematica,Matlab,C++/Java 中的数学库,...
我尝试了一些幼稚的方法,但效果不佳....所以现在我尝试安全地玩(尽可能)
非常感谢
matlab - Matlab:优化器/求解器的准确性差
我很难在 Matlab 上的求根问题中达到足够的准确性。我有一个函数 ,Lik(k)
并且想找到k
where的值Lik(k)=L0
。基本上,问题在于各种内置的 Matlab 求解器 ( fzero
, fminbnd
, fmincon
) 并没有像我希望或期望的那样接近解决方案。
Lik()
是一个用户定义的函数,它涉及广泛的编码来计算数值拉普拉斯逆变换等,因此我不包括完整的代码。但是,我已广泛使用此功能,并且它似乎可以正常工作。 Lik()
实际上需要几个输入参数,但是对于当前步骤,所有这些都是固定的,除了k
. 所以这实际上是一个一维求根问题。
我想找到k >= 165.95
which的值Lik(k)-L0 = 0
。Lik(165.95)
小于L0
,我希望Lik(k)
从这里单调增加。事实上,我可以Lik(k)-L0
在感兴趣的范围内进行评估,并且它似乎顺利过零:例如Lik(165.95)-L0 = -0.7465, ..., Lik(170.5)-L0 = -0.1594, Lik(171)-L0 = -0.0344, Lik(171.5)-L0 = 0.1015, ... Lik(173)-L0 = 0.5730, ..., Lik(200)-L0 = 19.80
。因此,该功能似乎表现良好。
但是,我尝试用几种不同的方法“自动”找到根,但准确性不如我预期的那么好......
使用fzero(@(k) Lik(k)-L0)
:如果限制在区间内(165.95,173)
,fzero
返回k=170.96
with Lik(k)-L0=-0.045
。好吧,虽然不是很好。出于实际目的,如果没有大量的手动试验和错误,我不会知道如此精确的上限。如果我使用 interval (165.95,200)
,fzero
返回k=167.19
where Lik(k)-L0 = -0.65
,这是相当糟糕的。我一直在将Display设置为iter来运行这些测试,这样我就可以看到发生了什么,并且似乎在第 4 次迭代时fzero
命中167.19
,然后在第 5 次迭代时停留在那里,这意味着k
从一次迭代到下一次迭代的变化较小比TolX
(设置为 0.001),因此程序结束。退出标志表明它成功收敛到一个解决方案。
我还尝试最小化abs(Lik(k)-L0)
使用fminbnd
(给出上限和下限k
)和fmincon
(给出一个起点k
)并遇到类似的准确性问题。特别是,fmincon
可以同时设置TolX
和TolFun
,但是玩弄这些(低至 10^-6,比我需要的精度高得多)并没有任何区别。令人困惑的是,有时优化器甚至会在较早的迭代中找到一个比它返回的最终 k 值更接近使目标函数为零的 k 值。
因此,该算法似乎正在迭代到某个点,然后未能采取任何足够大小的进一步步骤来找到更好的解决方案。有谁知道为什么该算法不采取另一个更大的步骤?有什么我可以调整来改变的吗?(我查看了optimset下的列表,但没有提出任何有用的信息。)
非常感谢!