《数值分析》上机作业。
第一二三章)
学院:电气工程学院
班级: 电气13级硕士2班
教师: 石佩虎老师
姓名: 高蕾。
学号: 132046
第一章。实验1 舍入误差与有效数。
设,其精确值为。
1) 编制按从大到小的顺序,计算的通用程序;
2) 编制按从小到大的顺序,计算的通用程序;
3) 按两种顺序分别计算、、,并指出有效位数(编制程序时用单精度);
4) 通过本上机题你明白了什么?
解答如下:1). 按从大到小的顺序计算的通用程序如下所示:
n=input('please input an n (n>1):'
y=0accurate=1/2*(3/2-1/n-1/(n+1));精确值
for i=2:1:n从大到小的顺序。
x=1/(i^2-1);
x=single(x
y=y+xend
error= accurate-y;
format long;
dispdisp('the value of sn from large to small is:')
disp(y);
disp('the value of error is:')
disp(error);
2) 编制按从小到大的顺序计算的通用程序如下所示:
n=input('please input an n (n>1):'
y=0accurate=1/2*(3/2-1/n-1/(n+1));
for i=n:-1:2
x=1/(i^2-1);
x=single(x
y=y+xend
error= accurate-y;
format long;
dispdisp('the value of sn from large to small is:')
disp(y);
disp('the value of error is:')
disp(error);
3) 计算结果:
按从大到小的顺序计算得:
按从小到大的顺序计算得:
总结:当我们采用不同的计算顺序,对于同一个计算式,会得出不同的结果。本例中,分别采用从大到小和从小到大两种顺序,结果有较大差异,有效位数最少的情况只有3位。
当按从大到小的顺序进行时,当越大,就越小,与已计算出的和值相比数量及特别小,很可能被舍去为0,使得计算结果变小,有效位数减少,结果不精确。这种现象随着越大,结果的差异就越大,误差就越大。而从小加到大时,越往后小数之间数量级相差不大,前面的和值与大数的数量级相差不大,之前的情况不会出现,误差都是符合要求的,有效数字也有7位。
所以在进行数值计算时,若忽略运算次序,可能会造成大数吃小数的问题,影响到结果的准确性。所以我们要根据计算式的性质,设计合理有效的算法,进行计算。
第二章。实验2 newton迭代法。
1)给定初值及容许误差,编制newton法解方程根的通用程序。
2)给定方程,易知其有三个根。
由newton方法的局部收敛性可知存在,当时newton迭代序列收敛于根,试确定尽可能大的;
试取若干初始值,观察当时newton序列是否收敛以及收敛于哪一个根。
3)通过本上机题,你明白了什么。
解答如下:1). newton法的程序如下:
function x=newton(x0,explise);%newton法,输入值为迭代初值和误差极限。
y1=f(x0);
y2=df(x0);
for i=1:1e6
if y2==0
x=0;break;
endx=x0-y1/y2; %newton迭代公式。
error=abs(x-x0);
x0=x;disp(i); 显示具体的迭代过程,若不需要则可以定义掉。
disp(x0);
y=f(x0);
y1=f(x0);
y2=df(x0);
if error break;
endend
if error>explise
disp('迭代次数超限,可能不收敛');
endk0=i;
y0=y;error0=error;end
编程函数的程序:
function y=f(x0) %输入函数f(x)
y=(x0^3)/3-x0;
end函数的导函数程序:
function y=df(x0) %f(x)导数f'(x)
y=x0^2-1;
end求最大收敛数的函数程序:
function delta = newton1(e)
找出最大的delta
for delta=0:e:1 %e为搜索步长。
x1 = newton(delta,e);
if abs(x1)>e
breakend
end运行求最大delta的函数,取,得到最后的结果为。
当时。结果显示收敛为根。
当时,且:结果显示收敛为根或是。
当时,且:结果显示收敛为根。
当时,且:结果显示收敛为根或是。
当时。结果显示收敛为根。
3). 区间收敛于,区间局部收敛于,局部收敛于,区间收敛于0,区间类似于区间,收敛于。
总结:通过该实验我明白了对于newton法解方程而言,其初始值非常重要,不同的初始值会带来不同的收敛结果。另外,从实验结果的k值可以看出其对于单根的迭代速度比较快。
newton法解方程时,每一步都要进行函数值以及函数导数的计算,本程序采用的是,输入导数的方式,若采用机器自动算导数时,可能带来时间上的延时,不利于快速性(可用newton法变形代替)。在编写程序时,判定其误差的方法可以采取两种形式,一种是比较的绝对值与误差限的大小,另一种可以直接比较f(x)与误差限的大小,本程序采用了前一种,这种方式比较直观的反映了根的误差问题。本次实验帮助我提高了对newton法的认识,同时提高了运用matlab编程的能力。
第三章。实验3-1 列主元gauss消去法。
对于某电路的分析,归结为求解线性方程组ri=v,其中。
1)编制解n阶线性方程组ax=b的列主元gauss消去法的通用程序;
2)用所编程序解线性方程组ri=v,并打印出解向量,保留5位有效数字;
3)本题编程之中,你提高了哪些编程能力?
解答如下:1). 解n阶线性方程组ax=b的列主元gauss消去法的通用程序如下:
function x=gausslzy(a,b) %列主元gauss消去法。
n=length(b);
a=[a,b增广矩阵。
for k=1:(n-1)
[ap,p]=max(abs(a(k:n,k)))
p=p+k-1;
if p>k,t=a(k,:)a(k,:)a(p,:)a(p,:)t;
enda((k+1):n,(k+1):(n+1))=a((k+1):n,(k+1):(n+1)).
-a((k+1):n,k)/a(k,k)*a(k,(k+1):(n+1));
a((k+1):n,k)=zeros(n-k,1);
endx=zeros(n,1);
x(n)=a(n,n+1)/a(n,n);
for k=n-1:-1:1
x(k,:)a(k,n+1)-a(k,(k+1):n)*x((k+1):n))/a(k,k); 回代。
end2). 解线性方程组ri=v,在主程序中输入。
r=[31 -13 0 0 0 -10 0 0 0;
数值分析上机作业
一。上机作业任务一 用五点差分格式求解poisson方程边值问题,p 任选一题 二。上机作业任务二 用simpson求积法计算定积分。下面两种方法任选一。1 变步长复化simpson求积法2 自适应simpson求积法。三。上机作业任务三 用matlab语言编写连续函数最佳平方逼近的算法程序 函数式...
数值分析上机作业
今天的上机作业。1.lagrange 插值。给出的数值表。用lagrange 插值计算的近似值。2 newton插值。用newton插值计算x 0.41的近似值。3.插值法的全部内容。把chap 2试验。doc的全部内容作一边,粘在这个文件里 包括图形 答 插值。function f lagrang...
数值分析上机作业
第二次上机作业。一。任务 用matlab语言编写连续函数最佳平方逼近的算法程序 函数式m文件 并用此程序进行数值试验,写出计算实习报告。二。程序功能要求 在后面的附一的基础上进行修改,使其更加完善。要求算法程序可以适应不同的具体函数,具有一定的通用性。所编程序具有以下功能 1.用lengendre多...