通过Julia求解非线性方程和常微分方程

方程求根

二分法

对于方程 f ( x ) = 0 f(x)=0 f(x)=0,如果 f ( a ) ⋅ f ( b ) < 0 f(a)\cdot f(b)<0 f(a)f(b)<0,则说明 a , b a,b a,b之间必有根,如果按照某个步长对其进行搜索,那么最终一定能够不断缩小根的取值范围,不断精确化。

二分法就是基于这种思想的一种算法,其实质是对区间进行快速选取。如果已知 f ( a ) ⋅ f ( b ) < 0 f(a)\cdot f(b)<0 f(a)f(b)<0,则快速选取 c = a + b 2 c=\frac{a+b}{2} c=2a+b,如果 f ( a ) ⋅ f ( c ) < 0 f(a)\cdot f(c)<0 f(a)f(c)<0,则说明根在 ( a , c ) (a,c) (a,c)之间,否则即说明根在 ( a , b ) (a,b) (a,b)之间,然后不断第迭代下去。

# equations.jl
# 二分法求根,f为函数,err为误差
# 要求f(a)*f(b)<0
function Dichotomy(f,a,b,err)
    c = (a+b)/2
    val = f(c)
    #如果f(c)和f(a)异号,则将c赋值给b,否则将c赋值给a
    val*f(a)<0 ? b=c : a=c
    #如果大于误差,则继续二分,否则输出c
    return abs(val)>err ? Dichotomy(f,a,b,err) : c
end

验证

julia> include("equations.jl");
julia> f(x) = x^5+x^4+x^2+1;
julia> x = Dichotomy(f,-2,1,0.01);
julia> f(x)
0.009531426464285175

Newton法

如果 f ( x ) f(x) f(x)=0可以写成 x = φ ( x ) x=\varphi(x) x=φ(x)的形式,则可以将这个方程的根理解为 y = φ ( x ) y=\varphi(x) y=φ(x) y = x y=x y=x的交点。现给定一个初值 x 0 x_0 x0,将其代入 φ ( x ) \varphi(x) φ(x)中,则 φ ( x 0 ) \varphi(x_0) φ(x0)对应一个新的 x x x,记为 x 1 x_1 x1

如果数列 { x n } \{x_n\} {xn}收敛,那么必有 x = lim ⁡ k → ∞ x k x=\lim_{k\to\infty}x_k x=limkxk即为方程的根。所以,问题的关键在构造合适的 φ ( x ) \varphi(x) φ(x)使得数列能够快速收敛。

其最简单的形式莫过于 x k + 1 = x k + f ( x k ) x_{k+1}=x_k+f(x_k) xk+1=xk+f(xk),不过这种迭代公式看起来十分危险,如果$f(x_k)是一个大于0的单调递增函数,那么结果就爆炸了。

所以,最好为 f ( x k ) f(x_k) f(xk)乘以一个系数,当 f ( x k ) f(x_k) f(xk)增加时使之变小,当其递减时使之变大。所以一个比较好的形式为

x k + 1 = x k − f ( x k ) f ′ ( x k ) x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)} xk+1=xkf(xk)f(xk)

此即Newton公式。

除了迭代形式,Newton公式也可以作为二分法的一个升级版本, x k − f ( x k ) f ′ ( x k ) x_k-\frac{f(x_k)}{f'(x_k)} xkf(xk)f(xk)可以表示过 ( x k , f ( x k ) ) (x_k,f(x_k)) (xk,f(xk))做切线与 x x x轴的交点,通过切线选取新的 x x x值取代了二分法的盲动性。

其Julia实现为

# Newton法
# f为函数,x为初始值,err为误差
function Newton(f,x,err)
    fx = f(x)
    df = (fx-f(x-err))/err      #近似斜率
    xNew = x-fx/df

    # 如果满足精度要求则返回,否则继续迭代
    return abs(xNew-x) > err ? Newton(f,xNew,err) : xNew
end

验证

julia> include("equations.jl");
julia> f(x) = x^5+x^4+x^2+1;
julia> x = Newton(f,1,0.01);
julia> f(x)
-0.0028617855019934524

常微分方程

Euler方法

一阶常微分方程的一般形式为

{ d y d x = f ( x , y ) → d y = f ( x , y ) d x y ( x 0 ) = y 0 \left\{\begin{aligned} \frac{\text{d}y}{\text{d}x}=& f(x,y) \to \text{d}y=f(x,y)\text{d}x\\ y(x_0)=&y_0 \end{aligned}\right. dxdy=y(x0)=f(x,y)dy=f(x,y)dxy0

如果将 x x x划分为一系列子区间,其端点序列为 x 0 , x 1 , … , x n x_0,x_1,\ldots,x_n x0,x1,,xn,则上式可写为

d y n = f ( x n , y n ) d x n → y n + 1 = y n + f ( x n , y n ) d x n \begin{aligned} \text{d}y_n=&f(x_n,y_n)\text{d}x_n\\ \to y_{n+1}=&y_n+f(x_n,y_n)\text{d}x_n \end{aligned} dyn=yn+1=f(xn,yn)dxnyn+f(xn,yn)dxn

此即 Euler公式 \textbf{Euler公式} Euler公式,记 f n = f ( x n , y n ) , h = d x n f_n=f(x_n,y_n),h=dx_n fn=f(xn,yn),h=dxn,则可更加简洁地写为

y n + 1 = y n + f n h y_{n+1}=y_n+f_nh yn+1=yn+fnh

在已知初值的情况下,可以递推地计算出此后的函数值。

# Euler法
# f为dy/dx=f(x,y), x为输入区间,n为步长
function Euler(f,x,y0,n)
    h = (x[2]-x[1])/n
    x = [x[1]+i*h for i in 1:n]
    y = zeros(n)
    y[1] = y0
    for i in 2:n
        y[i] = y[i-1]+h*f(x[i],y[i-1])
    end
    return y
end

验证

julia> include("equations.jl")        
julia> f(x,y) = y-2*x/y     #导函数
julia> Y(x) = sqrt(1+2*x)   #原函数
julia> x = [0,1]            #区间
julia> y0 = 1
julia> yEuler = Euler(f,x,y0,100);
julia> X = [i for i in 0.01:0.01:1]
julia> yReal = Y.(X)
julia> using Plots
julia> plot(X,[yEuler,yReal],st=[:line :scatter])
julia> savefig("naiveEuler.png")

在这里插入图片描述

如果对于[0,1]区间,我们给的初值为 y ( 1 ) = y 1 y(1)=y_1 y(1)=y1,那么其求解过程将变成从后向前的运算,公式 y n + 1 = y n + f ( x n , y n ) d x n y_{n+1}=y_n+f(x_n,y_n)\text{d}x_n yn+1=yn+f(xn,yn)dxn也将从显式变成隐式,因为此时的 y n y_n yn将是一个未知量。

这种隐式的Euler公式即为Euler公式的后退格式,如果想要将其改为从前向后的计算风格,即可写为

y n + 1 = y n + f ( x n + 1 , y n + 1 ) d x n y_{n+1}=y_n+f(x_{n+1},y_{n+1})\text{d}x_n yn+1=yn+f(xn+1,yn+1)dxn

如果同时考虑前向格式和后向格式,那么可以将二者综合为

y n + 1 = y n + ( f n + f n + 1 ) h 2 y_{n+1}=y_n+(f_n+f_{n+1})\frac{h}{2} yn+1=yn+(fn+fn+1)2h

此即Euler公式的梯形格式,这仍然是一个隐式,所以需要对其进行迭代求值,在给定初值的情况下,有

{ y n + 1 ( 0 ) = y n + h f ( x n , y n ) y n + 1 ( k + 1 ) = y n + h 2 [ f ( x n , y n ) + f ( x n + 1 , y n + 1 ( k ) ) ] \left\{\begin{aligned} y_{n+1}^{(0)}=&y_n+hf(x_n,y_n)\\ y_{n+1}^{(k+1)}=&y_n+\frac{h}{2}[f(x_n,y_n)+f(x_{n+1},y_{n+1}^{(k)})] \end{aligned}\right. yn+1(0)=yn+1(k+1)=yn+hf(xn,yn)yn+2h[f(xn,yn)+f(xn+1,yn+1(k))]

这个算法在处理每个点时,都需要进行大量的迭代,开销很大,但实现过程并不复杂,只需对原始的Euler公式稍加改进即可

# Euler法
# f为dy/dx=f(x,y), x为输入区间,n为步长
# nIter 为梯形格式的迭代次数
function Euler(f,x,y0,n,nIter)
    h = (x[2]-x[1])/n
    x = [x[1]+i*h for i in 1:n]
    y = zeros(n)
    y[1] = y0
    for i in 2:n
        y[i] = y[i-1]+h*f(x[i],y[i-1])
        for j in 1:nIter
            y[i] = y[i-1]+h*f(x[i],y[i])
        end
    end
    return y
end

当迭代次数为1时,被特别称为改进的Euler法。

{ y t e s t = y n + h f ( x n , y n ) y n + 1 = y n + h 2 [ f ( x n , y n ) + f ( x n + 1 , y t e s t ) ] \left\{\begin{aligned} y_{test}=&y_n+hf(x_n,y_n)\\ y_{n+1}=&y_n+\frac{h}{2}[f(x_n,y_n)+f(x_{n+1},y_{test})] \end{aligned}\right. ytest=yn+1=yn+hf(xn,yn)yn+2h[f(xn,yn)+f(xn+1,ytest)]

Runge-kutta法

Runge-Kutta法是一种高精度的单步法,其根源是 T y l o r Tylor Tylor公式:

y ( x n + 1 ) = y ( x n ) + h y ′ ( x n ) + h 2 2 ! y ′ ′ ( x n ) + h 3 3 ! y ′ ′ ( x n ) + … y(x_{n+1})=y(x_n)+hy'(x_n)+\frac{h^2}{2!}y''(x_n)+\frac{h^3}{3!}y''(x_n)+\ldots y(xn+1)=y(xn)+hy(xn)+2!h2y(xn)+3!h3y(xn)+

其中导数之间存在递推关系

{ y ′ = f , y ′ ′ = ∂ f ∂ x + f ∂ f ∂ y y ′ ′ ′ = ∂ 2 f ∂ x 2 + 2 f ∂ 2 f ∂ x ∂ y + f 2 ∂ 2 f ∂ y 2 + ∂ f ∂ y ( ∂ f ∂ x + ∂ f ∂ y ) ⋮ \left\{\begin{aligned} y'=&f,\\ y''=&\frac{\partial f}{\partial x}+f\frac{\partial f}{\partial y}\\ y'''=&\frac{\partial^2f}{\partial x^2}+2f\frac{\partial^2f}{\partial x\partial y}+f^2\frac{\partial^2f}{\partial y^2}+\frac{\partial f}{\partial y}(\frac{\partial f}{\partial x}+\frac{\partial f}{\partial y})\\ \vdots \end{aligned}\right. y=y=y=f,xf+fyfx22f+2fxy2f+f2y22f+yf(xf+yf)

Euler法截取了一阶Taylor公式作为拟合方程,如果提高Taylor格式的阶数,将有助于计算结果精度的提高。

现假设有一点 p ∈ ( x n , x n + 1 ) p\in(x_n,x_{n+1}) p(xn,xn+1),且 x p = x n + p h , p ⩽ 1 , h = x n + 1 − x n x_p=x_n+ph,\quad p\leqslant1,h=x_{n+1}-x_n xp=xn+ph,p1,h=xn+1xn。设 x n , x n + 1 x_n,x_{n+1} xn,xn+1点的斜率分别为 K 1 , K 2 K_1,K_2 K1,K2,则 y n + 1 − y n h \frac{y_{n+1}-y_n}{h} hyn+1yn可以表示为 K 1 , K 2 K_1,K_2 K1,K2的线性组合,即

y n + 1 = y n + h ( λ 1 K 1 + λ 2 K 2 ) y_{n+1}=y_n+h(\lambda_1K_1+\lambda_2K_2) yn+1=yn+h(λ1K1+λ2K2)

由于 x n x_n xn点是暴露给我们的,我们可以设 K 1 = f ( x n , y n ) K_1=f(x_n,y_n) K1=f(xn,yn),并且通过 K 1 K_1 K1来估测 x p x_p xp处的值,即 x p x_p xp处的函数值为 F ( x p ) = y n + K 1 p h F(x_p)=y_n+K_1ph F(xp)=yn+K1ph,从而可以得到 K 2 = f ( x p , y n + K 1 p h ) K_2=f(x_p,y_n+K_1ph) K2=f(xp,yn+K1ph)

K 2 K_2 K2进行展开可以得到

K 2 = f ( x n + p h , y n + p h K 1 ) = f ( x n , y n ) + ∂ f ∂ x d x + ∂ f ∂ y d y = f ( x n , y n ) + f x ( x n , y n ) p h + f y ( x n , y n ) p h K 1 ⇒ K 1 = f ( x n , y n ) f ( x n , y n ) + p h ( f x ( x n , y n ) + f y ( x n , y n ) f ( x n , y n ) \begin{aligned} K_2 =& f(x_n+ph,y_n+phK_1)=f(x_n,y_n)+\frac{\partial f}{\partial x}\text{d}x+\frac{\partial f}{\partial y}\text{d}y\\ =&f(x_n,y_n)+f_x(x_n,y_n)ph+f_y(x_n,y_n)phK_1\\ \xRightarrow{K_1 = f(x_n,y_n)}&f(x_n,y_n)+ph(f_x(x_n,y_n)+f_y(x_n,y_n)f(x_n,y_n) \end{aligned} K2==K1=f(xn,yn) f(xn+ph,yn+phK1)=f(xn,yn)+xfdx+yfdyf(xn,yn)+fx(xn,yn)ph+fy(xn,yn)phK1f(xn,yn)+ph(fx(xn,yn)+fy(xn,yn)f(xn,yn)

这正与Taylor展开式有相同的形式,将 K 1 , K 2 K_1,K_2 K1,K2代入 y n + 1 = y n + h ( λ 1 K 1 + λ 2 K 2 ) y_{n+1}=y_n+h(\lambda_1K_1+\lambda_2K_2) yn+1=yn+h(λ1K1+λ2K2),则可得到

{ λ 1 + λ 2 = 1 λ 2 p = 1 2 \left\{\begin{aligned} \lambda_1+\lambda_2=1\\ \lambda_2p=\frac{1}{2} \end{aligned}\right. λ1+λ2=1λ2p=21

在此条件下,可整理得出二阶Runge-Kutta的表达形式

{ y n + 1 = y n + h ( λ 1 K 1 + λ 2 K 2 ) K 1 = f ( x n , y n ) K 2 = f ( x p , y n + p h K 1 ) \left\{\begin{aligned} y_{n+1}=&y_n+h(\lambda_1K_1+\lambda_2K_2)\\ K_1=&f(x_n,y_n)\\ K_2=&f(x_p,y_n+phK_1)\\ \end{aligned}\right. yn+1=K1=K2=yn+h(λ1K1+λ2K2)f(xn,yn)f(xp,yn+phK1)

通过Julia写为

# Runge-Kutta法,p取1/2
# f为dy/dx=f(x,y), x为输入区间[x1,x2],n为步长
function RungeKutta(f,x,y0,n)
    h=(x[2]-x[1])/n
    x = [x[1]+i*h for i in 1:n]
    y = zeros(n)
    y[1] = y0
    for i in 2:n
        K1 = f(x[i-1],y[i-1])
        K2 = f(x[i-1]+h/2,y[i-1]+h*K1/2)
        y[i] = y[i-1]+h*K2
    end
    return y
end

验证其验证过程与Euler法完全相同,甚至连保存的图片都几乎一致,只需把Euler函数换为RungeKutta即可。

结合Taylor公式可知,二阶Runge-Kutta法绝非优化的极限,我们可以通过进一步增加参数,来拟合Taylor公式中的高阶项,于是有了更高阶的Runge-Kutta法。

y ′ ′ ′ = ∂ 2 f ∂ x 2 + 2 f ∂ 2 f ∂ x ∂ y + f 2 ∂ 2 f ∂ y 2 + ∂ f ∂ y ( ∂ f ∂ x + ∂ f ∂ y ) y'''=\frac{\partial^2f}{\partial x^2}+2f\frac{\partial^2f}{\partial x\partial y}+f^2\frac{\partial^2f}{\partial y^2}+\frac{\partial f}{\partial y}(\frac{\partial f}{\partial x}+\frac{\partial f}{\partial y}) y=x22f+2fxy2f+f2y22f+yf(xf+yf)

若三阶Runge-Kutta项的形式为

y n + 1 = y n + h ( λ 1 K 1 + λ 2 K 2 + λ 3 K 3 ) K 1 = f ( x n , y n ) K 2 = f ( x p , y n + p h K 1 ) K 3 = f ( x n + q h , y n + q h ( r K 1 + s K 2 ) ) \begin{aligned} y_{n+1}=&y_n+h(\lambda_1K_1+\lambda_2K_2+\lambda_3K_3)\\ K_1=&f(x_n,y_n)\\ K_2=&f(x_p,y_n+phK_1)\\ K_3=&f(x_n+qh,y_n+qh(rK_1+sK_2)) \end{aligned} yn+1=K1=K2=K3=yn+h(λ1K1+λ2K2+λ3K3)f(xn,yn)f(xp,yn+phK1)f(xn+qh,yn+qh(rK1+sK2))

则可推导出各参数所需要满足的条件

{ λ 2 p + λ 3 p = 1 2 λ 2 p 2 + λ 3 q 2 = 1 3 λ 3 p q s = 1 6 \left\{\begin{aligned} \lambda_2p+\lambda_3p=\frac{1}{2}\\ \lambda_2p^2+\lambda_3q^2=\frac{1}{3}\\ \lambda_3pqs=\frac{1}{6} \end{aligned}\right. λ2p+λ3p=21λ2p2+λ3q2=31λ3pqs=61

故可选取
y n + 1 = y n + h 6 ( K 1 + 4 K 2 + K 3 ) K 1 = f ( x n , y n ) K 2 = f ( x n + h 2 , y n + h 2 K 1 ) K 3 = f ( x n + h , y n − h K 1 + 2 h K 2 ) \begin{aligned} y_{n+1}=&y_n+\frac{h}{6}(K_1+4K_2+K_3)\\ K_1=&f(x_n,y_n)\\ K_2=&f(x_n+\frac{h}{2},y_n+\frac{h}{2}K_1)\\ K_3=&f(x_n+h,y_n-hK_1+2hK_2) \end{aligned} yn+1=K1=K2=K3=yn+6h(K1+4K2+K3)f(xn,yn)f(xn+2h,yn+2hK1)f(xn+h,ynhK1+2hK2)

四阶Runge-Kutta亦然,其比较常用的形式为

y n + 1 = y n + h 6 ( K 1 + 2 K 2 + 2 K 3 + K 4 ) K 1 = f ( x n , y n ) K 2 = f ( x n + h 2 , y n + h 2 K 1 ) K 3 = f ( x n + h 2 , y n + h 2 K 2 ) K 3 = f ( x n + h , y n + h K 2 ) \begin{aligned} y_{n+1}=&y_n+\frac{h}{6}(K_1+2K_2+2K_3+K_4)\\ K_1=&f(x_n,y_n)\\ K_2=&f(x_n+\frac{h}{2},y_n+\frac{h}{2}K_1)\\ K_3=&f(x_n+\frac{h}{2},y_n+\frac{h}{2}K_2)\\ K_3=&f(x_n+h,y_n+hK_2) \end{aligned} yn+1=K1=K2=K3=K3=yn+6h(K1+2K2+2K3+K4)f(xn,yn)f(xn+2h,yn+2hK1)f(xn+2h,yn+2hK2)f(xn+h,yn+hK2)

# Runge-Kutta法
# f为dy/dx=f(x,y), x为输入区间[x1,x2],n为步长
# deg为阶数,支持234阶
# 二阶需要输入参数p,lmd1,lmd2;三阶需要额外输入q,r,s,lmd3
# 四阶需要另输入a,b,c,d,lmd4
function RungeKutta(f,x,y0,n;deg=2;kwargs...)
    h=(x[2]-x[1])/n
    x = [x[1]+i*h for i in 1:n]
    y = zeros(n)
    y[1] = y0

    
    # 初始化参数
    if deg == 2
        p,lmd1,lmd2 = isempty(kwargs) ? [1/2,1/2,1/2] : [
            kwargs[:p],kwargs[:lmd1],kwargs[:lmd2]]
    elseif deg == 3
        p,q,r,s,lmd1,lmd2,lmd3 = isempty(kwargs) ? [
            1/2,1,-1,2,1/6,2/3,1/6] : [kwargs[:p],
            kwargs[:q],kwargs[:r],kwargs[:s],
            kwargs[:lmd1],kwargs[:lmd2],kwargs[:lmd3]]
    elseif deg == 4
        p,q,r,s,a,b,c,d,lmd1,lmd2,lmd3 = isempty(kwargs) ? [
            1/2,1/2,0,0,1,0,1,0,1/6,1/3,1/3,1/6] : [
            kwargs[:p],kwargs[:q],kwargs[:r],kwargs[:s],
            kwargs[:a],kwargs[:b],kwargs[:c],kwargs[:d],
            kwargs[:lmd1],kwargs[:lmd2],kwargs[:lmd3],kwargs[:lmd4]]
    end

    for i in 2:n
        K1 = f(x[i-1],y[i-1])
        K = K1
        if deg>1
            K2 = f(x[i-1]+p*h,y[i-1]+p*h*K1)        #参数p
            K = lmd1*K1+lmd2*K2
        end
        if  deg>2
            K3 = f(x[i-1]+q*h,y[i-1]+q*h*(r*K1+s*K2))#参数q,r,s
            K += lmd3                   #参数lmd3
        end
        if deg>3
            K4 = f(x[i-1]+a*h,y[i-1]+a*h*(b*K1+c*K2+d*K3))
            K += lmd4
        end
        y[i] = y[i-1]+h*K
    end
    return y
end
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在 Julia 中,可以使用 `\` 符号来解线性方程组。假设我们有一个线性方程组 `Ax = b`,其中 `A` 是一个 `n x n` 的矩阵,`x` 是一个 `n x 1` 的向量,`b` 是一个 `n x 1` 的向量。 我们可以使用 `\` 符号来求解 `x`: ```julia x = A \ b ``` 这将返回一个解向量 `x`。 如果你想使用 LU 分解来解决线性方程组,你可以使用 `lufact()` 函数来进行分解,然后使用 `\(L, U, p)` 进行求解,其中 `L` 和 `U` 是 LU 分解的下三角矩阵和上三角矩阵,`p` 是排列向量。 ```julia # 进行 LU 分解 lu = lufact(A) # 解方程组 x = lu \ b ``` 这也将返回一个解向量 `x`。 ### 回答2: Julia是一种高性能编程语言,可以用来解决各种数学问题,包括解线性方程组。 要在Julia中解线性方程组,我们首先需要定义方程组中的系数矩阵和数向量。接下来,我们可以使用Julia中的线性代数库来求解方程组。 在Julia中,可以使用'\ '运算符来求解线性方程组。即,通过使用'\'运算符,我们可以将方程组表示为"系数矩阵 \ 数向量"的形式。 例如,考虑以下线性方程组: 2x + 3y = 8 4x - 5y = -3 我们可以将其表示为矩阵形式: [2 3; 4 -5] * [x; y] = [8; -3] 在Julia中,我们可以使用以下代码来解决这个方程组: ```julia # 定义系数矩阵和数向量 A = [2 3; 4 -5] b = [8; -3] # 求解线性方程组 x = A \ b # 输出解 println("解为:x = ", x[1], ", y = ", x[2]) ``` 上述代码将通过矩阵'\'运算符来求解线性方程组,并将解存储在变量'x'中。最后,我们使用"println"函数将解输出。 因此,Julia可以有效地解线性方程组,并提供了简洁和高效的解决方案。 ### 回答3: Julia是一种高性能的编程语言,它提供了强大的线性代数计算库,可以用来解线性方程组。在Julia中,我们可以使用线性代数包中的函数来高效地求解线性方程组。 首先,我们需要定义线性方程组的系数矩阵A和数列b。在Julia中,可以使用Matrix类型来表示矩阵,使用Vector类型来表示列向量。假设我们有如下线性方程组: A * x = b 接下来,我们可以使用线性代数包中的函数来求解这个线性方程组。Julia提供了多种求解方法,如LU分解、QR分解、CHOLESKY分解等。这些函数的命名一般以“\”开头,表示求解线性方程组的意思。 以LU分解为例,我们可以使用“\”函数来求解线性方程组。具体代码如下: x = A \ b 这行代码会返回线性方程组的解x。如果方程组有唯一解,那么x将会是一个列向量;如果方程组有无穷解,那么x将会是一个矩阵,每一列代表一个解。 需要注意的是,Julia的\运算符会根据线性方程组的性质选择适合的求解方法,以保证计算的效率和精度。因此,我们只需要简单地使用\运算符即可求解线性方程组。 总而言之,Julia是一种强大的编程语言,能够高效地解线性方程组。使用Julia,我们可以轻松地定义线性方程组,并使用\运算符来求解该方程组,得到其解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微小冷

请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值