我一直在寻找一个用c ++编写的库来解决这样一个未确定的系统
q是矢量,w,x,y,z变量和a,b,c,d常数.
argmin_q MAX(q) - MIN(q)
Run Code Online (Sandbox Code Playgroud)
ST
q[1] = a - w - y
q[2] = b - w - z
q[3] = c - x - y
q[4] = d - x - z
Run Code Online (Sandbox Code Playgroud)
找到求解器,算法等非常有用.我发现有几个库能够解决未确定的系统,但另外我需要最小化系数之间的距离.
先感谢您
altober
我第一次使用scipy的optimize.fsolve函数来找到方程的根.问题是我用作猜测/估计值的数字是我得到的答案(在大约8位小数内).当使用full_output = True时,我得到退出标志为'1',这应该意味着'解决方案收敛',这是我理解的最好意味着输出确实是方程的根.
我知道有一些有限数量的不同根(间隔开来),因为当我绘制方程时,我可以看到它们.此外,当我将起始点输入到应返回未定义值(除以零,负值的平方根)的范围内时,fsolve失败(给出错误退出标志).但除此之外,它总是将起点作为根.
我用一个非常简单的方程式测试了fsolve并且工作正常,所以我知道我正在导入我需要的所有内容,并且应该正确使用fsolve.我也试过搞乱一些输入参数,但我不太了解它们,似乎没有任何改变).
下面是相关代码(E是唯一的变量,其他一切都有非零值):
def func(E):
s = sqrt(c_sqr * (1 - E / V_0))
f = s / tan(s) + sqrt(c_sqr - s**2)
return f
guess = 3
fsolve(func, guess)
Run Code Online (Sandbox Code Playgroud)
即使最接近的解决方案应该在2.8和4.7左右,它只输出'3'并说'解决方案融合'.
有没有人知道如何解决这个问题并获得正确的答案(使用fsolve)?
假设我有一个数字X,我希望求解方程组,比如Y + Z = X,Z*Y = 1.
现在,这具有解Y = 1/Z和Z =(sqrt(X*X-4)+ X)/ 2或(X-(sqrt(X*X-4)))/ 2.
所以我可以在Prolog中写道:
solve(X,Y,Z):- Y is (sqrt(X*X-4)+X)/2, Z is 1/Y.
solve(X,Y,Z):- Y is (X-(sqrt(X*X-4)))/2,Z is 1/Y.
Run Code Online (Sandbox Code Playgroud)
这有效.
但
它需要我的许多初步工作,基本上事先解决它,只是要求Prolog评估答案.
有没有办法可以获得Z和Y,而不事先解决X?
我不能只写像
solve(X,Y,Z):- X is Y+Z, Z is 1/Y.
Run Code Online (Sandbox Code Playgroud)
因为实例化错误.
问题:A是正方形,满级,稀疏和带状.在Matlab中有太多的元素存储为单个矩阵(至少~4.6*10 18,理想情况下~10 40,两者都超过最大数组大小.编辑:A存储为稀疏,问题不是内存有限,但元素数量有限).因此,我必须将其存储为较小数组(行/对角线/列/块)的集合.
寻找:一种解决Ax = b的方法,A给定为较小数组的集合.理想情况下,在Matlab中,但不是必须的.
或者,如果不是在Matlab中:也许有一个程序可以存储和解决这么大的A?
到目前为止找到:方法如果A是三/五对角线,但我的A有N个对角线.还发现了一些关于将A分区为块的问题,但是找不到用这些块解决线性系统的方法.
ps系统是64位.
感谢大家!
我想知道R是否存在能够将线性方程组转换成矩阵形式的任何包或其他预构建解决方案(例如,通过Gauss Seidel算法求解),类似于equationsToMatrix(eqns,vars)
Matlab中的函数?
Matlab的一个例子:
[A, b] = equationsToMatrix([x - y == 0, x + 2*y == 3, [x, y])
A =
[ 1, -1]
[ 1, 2]
b =
0
3
Run Code Online (Sandbox Code Playgroud)
关于构建块的建议也非常有用.
我正试图在Julia中解决大量(50)非线性联立方程.目前我只是试图用2个方程来完成这项工作以获得正确的语法等.但是,我尝试了各种各样的软件包/工具 - NLsolve,nsolve in SymPy和NMPpt in JuMP(我忽略了目标)功能,只需输入相等的约束) - 没有太多的运气.我想我应该专注于让它在一个工作.我很感激任何关于包装选择的建议以及可能的代码.
这是我在NLsolve中尝试这样做的方法(在mcpsolve模式下使用它,所以我可以对我正在解决的变量 - x [1]和x [2] - 施加约束 - 这是失业率,因此在0和1之间有界限) :
using Distributions
using Devectorize
using Distances
using StatsBase
using NumericExtensions
using NLsolve
beta = 0.95
xmin= 0.73
xmax = xmin+1
sigma = 0.023
eta = 0.3
delta = 0.01
gamma=0.5
kappa = 1
psi=0.5
ns=50
prod=linspace(xmin,xmax,ns)
l1=0.7
l2=0.3
wbar=1
r=((1/beta)-1-1e-6 +delta)
## Test code
function f!(x, fvec)
ps1= wbar + (kappa*(1-beta*(1-sigma*((1-x[1])/x[1]))))
ps2= wbar + (kappa*(1-beta*(1-sigma*((1-x[2])/x[2]))))
prod1=prod[1]
prod2=prod[50]
y1=(1-x[1])*l1
y2=(1-x[2])*l2
M=(((prod1*y1)^((psi-1)/psi))+((prod2*y2)^((psi-1)/psi)))
K=((r/eta)^(1/(eta-1)))*M …
Run Code Online (Sandbox Code Playgroud) 如何解决SymPy中非线性方程的形式
y = P*x + Q + sqrt(S*x + T)
Run Code Online (Sandbox Code Playgroud)
在那里我知道y(0)
,y'(0)
,y(c)
,y'(c)
.我想找到P
,Q
,S
和T
.并表示y
作为的函数x
.
我对文档感到非常困惑.请帮忙.
我需要求解一个由四个方程组成的系统并求解(Alg,Blg,C,D)..其他只是变量.
dAlg = (ab*D + a1*f1*D*Alg*Blg + a2*f2*D*Alg*C)/e1 - m1*Alg;
dBlg = (f11*D*Blg)/eB - f1*Alg*Blg - mp*Blg;
dC = (f22*D*C)/eC - f2*Alg*C - mp*C;
dD = (f*R/(h + R)) - r*D - ab*D - a1*f1*D*Alg*Blg - f11*D*Blg -
a2*f2*D*Alg*C-f22*D*C;
Run Code Online (Sandbox Code Playgroud)
所以我想解决{dAlg = 0,dBlg = 0,dC = 0,dD = 0},然后找出所有可能的解决方案组合.
我不知道如何使用求解包在R上进行此操作(我发现的示例似乎更简单的方程式)...但是当我使用另一个包时,我得到以下答案.我想在R中实现同样的目标
{{Alg -> ((eC f11 - eB f22) mp)/(-eC f11 f2 + eB f1 f22),
Blg -> -((
eC f f11 f2 R - eB f f1 f22 R + …
Run Code Online (Sandbox Code Playgroud) r simultaneous solver equation-solving differential-equations
我正在尝试解决如何编写以下内容:
total = (value * 0.95 ^ 0) + (value * 0.95 ^ 1) + (value * 0.95 ^ 2) ...
Run Code Online (Sandbox Code Playgroud)
要么:
x = (y * z ^ 0) + (y * z ^ 1) + (y * z ^ 2) + (y * z ^ 3) ...
Run Code Online (Sandbox Code Playgroud)
这表示如何计算4次迭代的x,但是我如何表达它以使用可变数量的迭代?显然我可以创建一个循环并将值加在一起,但我真的想找到一个解决这个问题的方程.
我正在使用c ++,但我想这不是一个特定于语言的问题(对不起,我真的不知道在哪里可以问这个问题!).
有任何想法吗?
谢谢,克里斯.
这更像是一个一般性的数学问题(甚至可能很愚蠢)。但在高中,我们学习通过右图来确定方程的根。例如,对于方程
y = x^2 - 1
Run Code Online (Sandbox Code Playgroud)
蓝线将向我们展示根源。这是蓝线穿过 x 的时间,因此 +- 1。
现在,如果我们说方程有实部和虚部,那么它是
y = x^2 - 1 + (x^2 - 0.5)i
Run Code Online (Sandbox Code Playgroud)
正如 Mathematica 屏幕截图中给出的那样,我们有一个过零的实部和一个也过零但在不同 x 处的虚部。所以我的问题是:是否可以通过简单地查看绘图的实部和虚部来确定这样一个方程的根?
注意:我的部分困惑是,如果我在 Mathematica 中使用 FindRoot,我会得到 0.877659 - 0.142424i 或 -0.877659 + 0.142424i。因此,可能是数学中的一些基本属性我不知道,它阻止人们通过分离实部和虚部来识别复杂函数的根......
equation-solving ×10
python ×3
solver ×3
c++ ×2
matrix ×2
r ×2
sympy ×2
julia ×1
julia-jump ×1
math ×1
matlab ×1
prolog ×1
scipy ×1
simultaneous ×1