矩阵形式的代数方程

大佬们好,我想解一个矩阵形式的代数方程:


其中\eta 都是常系数,k∈(-1,1)是自变量,k’是待解量,这个方程也就是AX=0,存在解的条件为|A|=0,所以问题变成了解det(A)=0,这在matlab里面很简单:

...
syms k';
kk = double(solve(det(A)));
...

完全解决问题要解上千个这样的方程,如果要保证精度的话要花十几个小时(保守估计),所以想试试Julia,但是我不知道Julia里面和matlab里solve一样功能的函数,请问有人解过类似的问题吗?非常感谢!

你不如先把 matlab 跑起来了,再折腾 julia。

https://docs.sciml.ai/LinearSolve/stable/tutorials/linear/

你的 A 如果有更特殊的性质,换一个特定的求解器或许会快一些。
用默认的慢也正常。

matlab 没问题,就是慢。。。
所以问问Julia有没有类似功能的函数,主要是不清楚Julia里是否有类似功能的包

题外话:最好从矩阵性质出发,别想着暴力破解,抽掉公共系数 -\frac{1}{n_c} 后,结果看着和循环矩阵很像。

如果常数 \eta_k 可以写成关于 k 的表达式,可能会更好化简,比如多项式就用相邻作差逐步降到0。

Roots.jl,速度极快:

julia> using LinearAlgebra

julia> f(A, x) = begin
           B = copy(A)
           B[[CartesianIndex(i, i) for i in 1:7]] .-= [(x + 2*i) ^ 2 for i in -3:3]
           det(B)
       end

julia> using Roots

julia> A = rand(7, 7);

julia> @btime find_zero(x -> f(A, x), (-1, 1))
  123.304 μs (2347 allocations: 135.73 KiB)
-0.8062169304571464
1 个赞

谢谢您!我回头看看具体怎么操作!

牛蛙,我试试。
btw貌似遇到校友了 :rofl: :rofl: :rofl: