我一直在努力解决我的学习指南中的一些问题并且真的陷入困境 - 我已经向讲师寻求帮助,但他的答案实际上是#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
自上周一以来我一直在编写伪代码,我对代码的作用只是更清楚了。
答案 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学生吗?我是,哈哈。我一直在努力解决这个问题。学习指南似乎没有提供太多信息。