错误循环,高斯消除朱莉娅

时间:2016-01-15 18:08:00

标签: system linear-algebra julia gaussian

下面的代码使用Gauss方法求解线性系统。当我再次运行时,会发生错误:

LoadError: InexactError()
while loading In[176], in expression starting on line 4

 in setindex! at array.jl:313
 [inlined code] from In[176]:13
 in anonymous at no file:12

运行超过3次系统解决了。怎么了?

A = [4.1 -5 6.8;7.8 -8 -9;-17 4 1];
b = [1,2,3];
x = zeros(3);
m = 0;

al,ac = size(A)

for k= 1:(al-1)
    #println("valor de k ",k)
    for i = (k+1):al
        #println("valor de i ",i)
        m = A[i,k]/(A[k,k])
        A[i,k] = 0
        for j=(k+1):al
            #println("valor de j",j)
            A[i,j] = A[i,j] - m*A[k,j]
            b[i]= b[i] - m*b[k]
        end
    end
end
x[al] = b[al]/(A[al,al])
for k = (al-1):-1:1
    begin
        s = 0;
        for j = (k+1):al
            s = s+A[k,j]*x[j]
        end
        x[k]=(b[k]-s)/A[k,k]
    end
end
println(x)

1 个答案:

答案 0 :(得分:0)

错误的发生主要是由于变量和值之间的类型不匹配,请考虑一个简单的例子,

julia> convert(Int64, 0.1)
ERROR: InexactError()

抛出InexactError()因为无法将0.1表示为整数。

julia>convert(Int64, 1.0)
1

正如您所看到的,值1.0没有转换为Int64的问题。因此,在您的情况下,因为数组b的类型是Array{Int64,1},并且它肯定不能在正当的过程中保存浮点变量,因此错误。

考虑到@jeff的输入,在函数中包含代码可能更好,

julia>function f(A::Array{Float64,2}, b::Vector{Float64})
          x = zeros(3);
          m = 0.0;
          al,ac = size(A)
          for k= 1:(al-1)
              #println("valor de k ",k)
              for i = (k+1):al
                  #println("valor de i ",i)
                  m = A[i,k]/(A[k,k])
                  A[i,k] = 0
                  for j=(k+1):al
                      #println("valor de j",j)
                      A[i,j] = A[i,j] - m*A[k,j]
                      b[i]= b[i] - m*b[k]
                  end
              end
          end
          x[al] = b[al]/(A[al,al])
          for k = (al-1):-1:1
              begin
              s = 0;
              for j = (k+1):al
                  s = s+A[k,j]*x[j]
              end
              x[k]=(b[k]-s)/A[k,k]
          end
      end
      return x, A, b
  end
f (generic function with 1 method)

julia> A = [4.1 -5 6.8;7.8 -8 -9;-17 4 1];
julia> b = [1,2,3.0];

这应该导致矩阵A的以下变换为上三角形,

julia> A
3×3 Array{Float64,2}:
4.1  -5.0        6.8
0.0   1.5122   -21.9366
0.0   0.0     -213.523