理解八度代码和赋值方程之间的联系

时间:2018-03-08 15:57:52

标签: octave

我一直在努力解决我的学习指南中的一些问题并且真的陷入困境 - 我已经向讲师寻求帮助,但他的答案实际上是#34;但它已经为你完成了#34; (指的是写的gauss_seidel代码) - 我认为他错过了这一点。我很难理解实际问题以及如何处理它。

第一个问题内容如下:

通过以下方式定义100x100方阵A和列向量b:

A(ij)=I(ij)+1/((i-j)2+1) b_(i)=1+2/i 1<=i j<=100

其中I_(ij)是100x100单位矩阵(即主对角线上的1和其他地方的0)。使用Gauss-Seidel方法和A \ b构造求解x。

我们已经编写了gauss_seidel方法的代码,我想我理解它主要做什么,但是,我不明白上述问题如何适合该方法。我以为我应该在八度窗口中执行类似下面的操作,然后调用gauss_seidel方法:

>> A=eye(100,100);  
>> b= (this is where i get slightly confused)... I've tried doing   
>> for b=1:n;  
>> b=1+(2/n);  

那是问题1。

问题2我已经给出了答案并问了他,但他没有回复。

它读取:希尔伯特矩阵是一个由n:n矩阵定义的矩阵:

H_(ij)n = 1/i+j+1

将bn定义为维数n的列向量,并使用每个元素1.构造bn,然后在n = 4的情况下求解x,Hn xn = bn。

我在这里所做的只是:

>> b=ones (4,1);  
>> x=hilb(4)\b;  

然后它给了我x值的输出。我不确定我在这里做了什么是正确的...因为它没有提到使用任何方法它只是说解决x。

我不确定如何将讲师的回答与理解问题联系起来。

如果你能帮助我,也许让我知道我失踪了什么,或者我应该怎么想这个,那真的会有所帮助。

gauss_seidel代码如下所示:

function xnew=gauss_seidel(A,b,xold)
    n=size(A)(1);
    At=A;
    xnew=xold;
    for k=1:n
        At(k,k)=0;
    end
    for k=1:n
        xnew(k)=(b(k)-At(k,:)*xnew)/A(k,k);
    end
endfunction  

自上周一以来我一直在编写伪代码,我对代码的作用只是更清楚了。

1 个答案:

答案 0 :(得分:0)

A(ij)=I(ij)+1/((i-j)2+1), b(i)=1+2/i, 1<=i, j<=100

所有这一切都是说我们必须以i&gt; = 1和j <= 100的方式创建A和b。完成后,您只需使用Gauss Seidel方法解决。

所以我们这样创建b:

b=[];

for k=1:100
  b(k) = 1+(2/k);
end

这将创建一个大小为100x1的列向量,其中所有值都满足b(i)= 1 + 2 / i,其中i(或代码中,“k”)大于或等于1。 / p>

然后创建A:

myMatrix=zeros(100,100);

for i=1:100
  for j=1:100 
    myMatrix(i,j) = 1/(((i-j)^2) + 1);
  end
end

A=eye(100) + myMatrix;

现在我们以这样的方式创建A,它等于A(ij)= I(ij)+1 /((i-j)2 + 1)其中i大于或等于1&amp; j小于或等于100。

问题的其余部分基本上是要求使用Gauss Seidel方法求解x的值。

所以它是这样的:

y=iterative_linear_solve(A,b,x0,TOL,max_it,method);

不要忘记创建x0作为初始假设,容差和最大迭代等。

就问题2而言,你完全按照我的意愿行事。我觉得你很擅长。

我不太清楚如何回答这个问题:

  

如果你能帮助我,也许让我知道我失踪了什么或我是怎么回事   应该考虑这个问题,这会有所帮助。

我真正可以说的是,你需要以看到Ax = b的方式来看问题。例如,在第一个问题中,我们从制作b开始,然后是A.然后我们只需应用A \ b构造或Gauss Seidel方法并得到我们的答案。

这基本上就是你对第二个问题的所作所为。

最后,你是一名偶然的UNISA学生吗?我是,哈哈。我一直在努力解决这个问题。学习指南似乎没有提供太多信息。