问题标签 [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.

0 投票
1 回答
2176 浏览

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 的解。如果等式无效,程序应显示错误消息。

有人可以提供有关如何解决此问题的任何想法吗?我现在唯一想到的是使用上下文无关语法进行词法分析和解析。但我觉得有一个比这更简单的解决方案。有人可以解释一下吗?

0 投票
2 回答
103 浏览

matlab - 使用 mrdivide (B/A) 独立求解行?

当我回答这个问题时,我的回答是这样开始的:“首先,您可以通过将所有名称存储在一个单元格中来摆脱所有 if 语句。”

“初学者”位是因为我认为我可以使用矢量化解决方案添加编辑。但是当我尝试这样做时,我遇到了矢量化 mrdivide (b/a) 的使用的麻烦。

我的问题(在代码下方标记)是是否可以在b(z,:)/a(z,:)不使用循环的情况下解决。换句话说,为b/a矩阵的每一行独立求解。

0 投票
1 回答
772 浏览

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 分解,我不能保证它是稳定的等,但我不确定哪个是好方法。

0 投票
2 回答
875 浏览

matlab - 求解非线性方程

我想在 MATLAB 中求解两个非线性方程,所以我做了以下操作:

我脚本的一部分

myfunc功能如下

我有两个未知数x(1)x(2)

我的问题是每次调用时如何将值(,,,cii传递jj给?myfunc

或如何克服此错误Undefined function or method 'c' for input arguments of type 'double'.

谢谢

0 投票
1 回答
3271 浏览

matlab - 如何在matlab中求解符号方程

根据 X 参数,我在 Matlab 中有一个方程。我想为 F(x) 的随机数量找到 X 的数量。我尝试了下面的代码。但它给了我两个不同的结果,而我的方程应该只有一个结果。

即使我尝试了roots(f)solve(f)但它给了我一个错误:

???'sym' 类型的输入参数的未定义函数或方法 'isfinite'。

任何人都可以帮助我吗?我该怎么办 ?即使我对解决这个问题有错误的想法,请告诉我。谢谢

函数 betaDistribution_2(a,b)

0 投票
2 回答
722 浏览

matlab - MATLAB 用对数符号求解系统 -- 为什么求解器找不到解?

我试图以符号方式求解对数方程组(因此估计的系数是弹性​​),但 matlab 告诉我“找不到显式解决方案”。任何想法为什么?

[编辑] 根据 Ali 的输入,我尝试了以下方法:

我还尝试了不同的解决语句:

但仍然没有运气。

[编辑] 原来在一台机器上只是一个问题——原来的方法在另一台电脑上运行良好。

0 投票
1 回答
382 浏览

java - 有没有办法使用一些 lin 的矩阵求解器来获得矩阵的参数解。代数java库?

我遇到的所有矩阵求解器都要求矩阵是方阵和可逆的,但是那些不是方阵并且有多个解的矩阵呢……我将如何使用 java 找到它的参数形式?

0 投票
2 回答
6302 浏览

matlab - 如何在 MATLAB 中求解具有 2 个变量的 2 个复杂方程?

我有这两个方程:

其中: y1=y2 ,我想使用MATLAB 找到“a”和“b”的确切值。

我应该使用任何 MATLAB 命令来求解这两个方程吗?

ps:我尝试使用solve 命令,但它没有给我任何答案:

它给了我这个:

0 投票
2 回答
465 浏览

c++ - 数值求解非线性系统的最佳库或软件是什么?

我有一个由 8 个 7 年级 8 个多项式方程组成的系统,其中 8 个变量具有约束(最小和最大可接受值​​​)。

根据您的经验和知识,解决此类问题最有效的“包”是什么?Mathematica,Matlab,C++/Java 中的数学库,...

我尝试了一些幼稚的方法,但效果不佳....所以现在我尝试安全地玩(尽可能)

非常感谢

0 投票
3 回答
1390 浏览

matlab - Matlab:优化器/求解器的准确性差

我很难在 Matlab 上的求根问题中达到足够的准确性。我有一个函数 ,Lik(k)并且想找到kwhere的值Lik(k)=L0。基本上,问题在于各种内置的 Matlab 求解器 ( fzero, fminbnd, fmincon) 并没有像我希望或期望的那样接近解决方案。

Lik()是一个用户定义的函数,它涉及广泛的编码来计算数值拉普拉斯逆变换等,因此我不包括完整的代码。但是,我已广泛使用此功能,并且它似乎可以正常工作。 Lik()实际上需要几个输入参数,但是对于当前步骤,所有这些都是固定的,除了k. 所以这实际上是一个一维求根问题。

我想找到k >= 165.95which的值Lik(k)-L0 = 0Lik(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.96with Lik(k)-L0=-0.045。好吧,虽然不是很好。出于实际目的,如果没有大量的手动试验和错误,我不会知道如此精确的上限。如果我使用 interval (165.95,200)fzero返回k=167.19where 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可以同时设置TolXTolFun,但是玩弄这些(低至 10^-6,比我需要的精度高得多)并没有任何区别。令人困惑的是,有时优化器甚至会在较早的迭代中找到一个比它返回的最终 k 值更接近使目标函数为零的 k 值。

因此,该算法似乎正在迭代到某个点,然后未能采取任何足够大小的进一步步骤来找到更好的解决方案。有谁知道为什么该算法不采取另一个更大的步骤?有什么我可以调整来改变的吗?(我查看了optimset下的列表,但没有提出任何有用的信息。)

非常感谢!