同济大学数值计算答案
+1=k+h a+kh 0 888 。oo。。o。。。 e-0018.88888888888e-001 1.77777777786+0001.77777777778+000 2.6666666667e+0002.6666666666667e+000 3.555555555555555e+0003.555555555555555e+000 4,44444459+0004.444444+000 5.333333333333334号+0005.33333333333339+000 62222222222169006.2222222219+000 7.11111111111640007.11111111111116000 8.00000000+000|8.0000000000000 可以看到第二种方式比第一种来得准确。这是因为第一种方式实际上是一个累 加的过程,容易引起误差的累积。 Matlab的命令x=a:h:b或x=a+(0:n)*h都 是用第二种方式实现的。类似的可以看到两个计算方式不一样的例子还可以 有,例如(a.b,m)=(0,1,10) function ex15 format long e 0 b=8 9 h=(b-a)/n; x(1) a for j=1: n, x(j+1)=x(j)+h; y(j+1)=y(1)+j*h end [x3,y3,(a;h:b)’,a+(0:n))*h] 6.输入一个方阵A,对A作行列相同的调换,使得A的对角元按绝对值从大到小的 顺序排列。 解:我们可以用如下的方式实现, Lu, V] sort(-abs(diag(A))) A(v, v) 其中A是给定的方阵。sor函数返回·个向量的从小到大的排序及其排完序后 的分量在原向量中的位置。我们只需要这个位置就可以对A进行重新排序。 第二行的写法是 Matlab特有的,这种写法意味着我们可以随意但有规律地调 用A的行列生成新的矩阵。当然,我们也可以用简单排序法进行如下操作(虽然 并不推荐大家这么用) n = size(A, 1); for i=1: n-1 for j=i+1: n, f abs (a(i,i))< abs(A(j,j)) A(:,[i,j)=A(:,[j,i) A([i,j,:)=A([j,i],;); end end end 其中,A矩阵的行列交换仍旧是与其他计算机语言不同的:这里我们不需要临 时变量 7.一个向量x=(x1,x2,,xn)的 Euclide汽数定义为 试写一程序计算,并说明如何避免上溢和有害的卜溢。 解:我们注意到,范数可以递归调用如下 ∑ 或按照 Mat lab记号 所以只需要讨论两个分量的向量求范数的问题。对于x=(x1,x2),可以先做规 范化,即除以一个常数使按模最大分量为不妨设为我们可以求(1)的 范数再乘以xr1|。(如果该向量非零,则x1非零。)递归调用,并写成如下程序: function s =nrmv(x) x abs (x(x=0)) n length(x) if n==o elseif n==1 abs (x) Ise scale =0; 1 for j =1:n, if (scale
下载地址
用户评论