【问题标题】:Solve a system of N equations with N unknowns using Julia使用 Julia 求解具有 N 个未知数的 N 个方程组
【发布时间】:2023-02-03 19:17:51
【问题描述】:
我有 :
- 一组N个位置,可以是工作场所或住所
- 一个矢量观察到的工人 L_i,我在 N
- 一个矢量观察到的居民 R_n,n 在 N
- 距离矩阵观察到的在所有对住宅 n 和工作场所 i 之间
- 一个形状参数epsilon
设置 N=3,epsilon=5,并且
d = [1 1.5 3 ; 1.5 1 1.5 ; 3 1.5 1] #distance matrix
L_i = [13 69 18] #vector of workers in each workplace
R_n = [27; 63; 10]
我想找到解决这个 N 方程组的工资向量(大小 N),
与我所有的工作场所。
我是否需要对工人和工资的向量实施迭代算法?或者是否可以直接解决这个系统?
【问题讨论】:
标签:
julia
iteration
linear-algebra
equation-solving
linear-equation
【解决方案1】:
如果给定了 L 和 R(即,不依赖于 w_i),您应该设置一个非线性搜索以从该引力方程中获得(的向量)工资(当然要对 w_i 进行归一化)。
这是一个最小的例子。我希望它有所帮助。
# Call Packages
using Random, NLsolve, LinearAlgebra
# Set seeds
Random.seed!(1704)
# Variables and parameters
N = 10
R = rand(N)
L = rand(N) * 0.5
d = ones(N, N) .+ Symmetric(rand(N, N)) / 10.0
d[diagind(d)] .= 1.0
ε = -3.0
# Define objective function
function obj_fun(x, d, R, L, ε)
# Find shares
S_mat = (x ./ d).^ε
den = sum(S_mat, dims = 1)
s = S_mat ./ den
# Normalize last wage
x[end] = 1.0
# Define loss function
loss = L .- s * R
# Return
return loss
end
# Run optimization
x₀ = ones(N)
res = nlsolve(x -> obj_fun(x, d, R, L, ε), x₀, show_trace = true)
# Equilibrium vector of wages
w = res.zero