高等数值分析上机作业
数值分析大作业
数值分析上机作业(一)一、算法的设计方案1、幂法求解λ1、λ501幂法主要用于计算矩阵的按模最大的特征值和相应的特征向量,即对于|λ1|≥|λ2|≥.....≥|λn|可以采用幂法直接求出λ1,但在本题中λ1≤λ2≤……≤λ501,我们无法判断按模最大的特征值。
但是由矩阵A的特征值条件可知|λ1|和|λ501|之间必然有一个是最大的,通过对矩阵A使用幂法迭代一定次数后得到满足精度ε=10−12的特征值λ0,然后在对矩阵A做如下的平移:B=A-λ0I由线性代数(A-PI)x=(λ-p)x可得矩阵B的特征值为:λ1-λ0、λ2-λ0…….λ501-λ0。
对B矩阵采用幂法求出B矩阵按模最大的特征值为λ∗=λ501-λ0,所以λ501=λ∗+λ0,比较λ0与λ501的大小,若λ0>λ501则λ1=λ501,λ501=λ0;若λ0<λ501,则令t=λ501,λ1=λ0,λ501=t。
求矩阵M按模最大的特征值λ的具体算法如下:任取非零向量u0∈R nηk−1=u T(k−1)∗u k−1y k−1=u k−1ηk−1u k=Ay k−1βk=y Tk−1u k(k=1,2,3……)当|βk−βk−1||βk|≤ε=10−12时,迭终终止,并且令λ1=βk2、反幂法计算λs和λik由已知条件可知λs是矩阵A 按模最小的特征值,可以应用反幂法直接求解出λs。
使用带偏移量的反幂法求解λik,其中偏移量为μk=λ1+kλ501−λ140(k=1,2,3…39),构造矩阵C=A-μk I,矩阵C的特征值为λik−μk,对矩阵C使用反幂法求得按模最小特征值λ0,则有λik=1λ0+μk。
求解矩阵M按模最小特征值的具体算法如下:任取非零向量u 0∈R n ηk−1= u T (k−1)∗u k−1y k−1=u k−1ηk−1 Au k =y k−1βk =y T k−1u k (k=1,2,3……)在反幂法中每一次迭代都要求解线性方程组Au k =y k−1,当K 足够大时,取λn =1βk 。
东南大学数值分析上机题答案
东南⼤学数值分析上机题答案数值分析上机题第⼀章17.(上机题)舍⼊误差与有效数设∑=-=Nj N j S 2211,其精确值为)111-23(21+-N N 。
(1)编制按从⼤到⼩的顺序1-1···1-311-21222N S N +++=,计算N S 的通⽤程序;(2)编制按从⼩到⼤的顺序121···1)1(111222-++--+-=N N S N ,计算NS 的通⽤程序;(3)按两种顺序分别计算210S ,410S ,610S ,并指出有效位数(编制程序时⽤单精度);(4)通过本上机题,你明⽩了什么?解:程序:(1)从⼤到⼩的顺序计算1-1···1-311-21222N S N +++=:function sn1=fromlarge(n) %从⼤到⼩计算sn1format long ; sn1=single(0); for m=2:1:nsn1=sn1+1/(m^2-1); end end(2)从⼩到⼤计算121···1)1(111222-++--+-=N N S N function sn2=fromsmall(n) %从⼩到⼤计算sn2format long ; sn2=single(0); for m=n:-1:2sn2=sn2+1/(m^2-1); end end(3)总的编程程序为: function p203()clear allformat long;n=input('please enter a number as the n:') sn=1/2*(3/2-1/n-1/(n+1));%精确值为sn fprintf('精确值为%f\n',sn);sn1=fromlarge(n);fprintf('从⼤到⼩计算的值为%f\n',sn1);sn2=fromsmall(n);fprintf('从⼩到⼤计算的值为%f\n',sn2);function sn1=fromlarge(n) %从⼤到⼩计算sn1 format long;sn1=single(0);for m=2:1:nsn1=sn1+1/(m^2-1);endendfunction sn2=fromsmall(n) %从⼩到⼤计算sn2 format long;sn2=single(0);for m=n:-1:2sn2=sn2+1/(m^2-1);endendend运⾏结果:从⽽可以得到N值真值顺序值有效位数2 100.740050 从⼤到⼩0.740049 5从⼩到⼤0.740050 64 100.749900 从⼤到⼩0.749852 3从⼩到⼤0.749900 66 100.749999 从⼤到⼩0.749852 3从⼩到⼤0.749999 6(4)感想:通过本上机题,我明⽩了,从⼩到⼤计算数值的精确位数⽐较⾼⽽且与真值较为接近,⽽从⼤到⼩计算数值的精确位数⽐较低。
数值分析上机作业
第一章第二题(1) 截断误差为104-时:k=1;n=0;m=0;x=0;e=1e-4;while k==1x1=x+(-1)^n/(2*n+1);if abs(x-x1)<ey=4*x1;m=n+1;break;endx=x1;k=1;n=n+1;endformat longy,my =3.141792613595791m =5001(2)截断误差为108-时:k=1;n=0;m=0;x=0;e=1e-8;while k==1x1=x+(-1)^n/(2*n+1);if abs(x-x1)<ey=4*x1;m=n+1;break;endx=x1;k=1;n=n+1;endformat longy,my =3.141592673590250m =50000001由以上计算可知,截断误差小于104-时,应取5001项求和,π=3.141792613595791;截断误差小于108-时,应取50000001项求和,π=3.141592673590250。
第二章第二题a=[0 -2 -2 -2 -2 -2 -2 -2];b=[2 5 5 5 5 5 5 5];c=[-2 -2 -2 -2 -2 -2 -2 0];v=220;r=27;d=[v/r 0 0 0 0 0 0 0];n=8;for i=2:na(i)=a(i)/b(i-1);b(i)=b(i)-c(n-1)*a(i);d(i)=d(i)-a(i)*d(i-1);end;d(n)=d(n)/b(n);for i=n-1:-1:1d(i)=(d(i)-c(i)*d(i+1));end;I=d'I =1.0e+002 *1.490717294184090.704617906351300.311568212434910.128623612390290.049496991380330.017168822994210.004772412363470.00047741598598第三章第一题(1)Jacobi迭代法:b=[12;-27;14;-17;12]x = [0;0;0;0;0;]k = 0;r = 1;e=0.000001A=[10,1,2,3,4;1,9,-1,2,-3;2,-1,7,3,-5;3,2,3,12,-1;4,-3,-5,-1,15;] D = diag(diag(A));B = inv(D)*(D-A);f = inv(D)*b;p = max(abs(eig(B)));if p >= 1'迭代法不收敛'returnendwhile r >ex0 = x;x = B*x0 + f;k = k + 1;r = norm (x-x0,inf);endxk计算结果:x =1.0000-2.00003.0000-2.00001.0000k =65(2) 高斯赛德尔迭代:A=[10,1,2,3,4;1,9,-1,2,-3;2,-1,7,3,-5;3,2,3,12,-1;4,-3,-5,-1,15;]x=[0;0;0;0;0];b=[12;-27;14;-17;12]c=0.000001L=-tril(A,-1)U=-triu(A,1)D=(diag(diag(A)))X=inv(D-L)*U*x+inv(D-L)*b;k=1;while norm(X-x,inf)>= cx=X;X=inv(D-L)*U*x+inv(D-L)*b;k=k+1;endXk计算结果:X =1.0000-2.00003.0000-2.00001.0000k =37(3) SOR:A=[10,1,2,3,4;1,9,-1,2,-3;2,-1,7,3,-5;3,2,3,12,-1;4,-3,-5,-1,15] x=[0;0;0;0;0];b=[12;-27;14;-17;12]e=0.000001w=1.44;L=-tril(A,-1)U=-triu(A,1)D=(diag(diag(A)))X=inv(D-w*L)*((1-w)*D+w*U)*x+w*inv(D-w*L)*bn=1;while norm(X-x,inf)>=ex=X;X=inv(D-w*L)*((1-w)*D+w*U)*x+w*inv(D-w*L)*b;n=n+1;endXn计算结果:X =1.0000-2.00003.0000-2.00001.0000n =22由以上可知,共轭梯度法收敛速度明显快于Jacobi法和G-S法。
东南大学出版社第二版《数值分析》上机作业答案(前三章)
for (i=k+1;i<N;i++) // { lik=a[i][k]/a[k][k]; //实施消去过程,得到上三角系数增广矩阵 for (j=k;j<M;j++) // { a[i][j]=a[i][j]‐lik*a[k][j]; // } } } cout<<"经列主元高斯消去法得到的数组为:"<<endl; // for (b=0;b<N;b++) // { cout<<endl; //输出经过列主元消去法处理过的系数增广矩阵 for (c=0;c<M;c++) { cout<<setw(7)<<a[b][c]; // } } cout<<endl; double x[N]; // double s; int f,g; x[N‐1]=a[N‐1][M‐1]/a[N‐1][N‐1]; // for (f=N‐2;f>=0;f‐‐) // { s=0; for (g=f+1;g<N;g++) //由上三角形的系数增广矩阵求出方程组的解 { s=s+a[f][g]*x[g]; // } x[f]=(a[f][N]‐s)/a[f][f]; // } cout<<"方程组的解为:"<<endl; for (b=0;b<N;b++) //输出方程组的解 {
1
当 n=10000 时,s3=0.7499 Press any key to continue (分析 S1 的 6 位数字中,有效位数为 4 位; S2 的所有数字都是有效数字。 ) 当 n=1000000 时,s1=‐14.2546 当 n=1000000 时,s2=‐14.2551 当 n=1000000 时,s3=0.749999 Press any key to continue (分析: S1 的 6 位数字中,没有有效数字; S2 的 6 位数字中,没有有效数字。 ) 由运行结果可知,当精度比较低时,按从大数开始累加到小数的计算结果的精度低于按从小数 累加到大数的计算结果的精度。 至于当 n=1000000 时,S1 和 S2 得出了负数结果,可能是由于循环次数过多,导致数据溢出, 从而得出错误结果。 习题 2 20.程序如下: //给定误差限为:0.5e‐6 //经过试算得当 delta 最大取道 0.7745966 时,迭代得到的根都收敛于 0 #include <iostream.h> #include <math.h> void main () { double x,u; int count=0; u=10.0; cout<<"请输入 x 的初值"<<endl; cin>>x; for (count=0;abs(u)>5;count++) { x=x‐(x*x*x‐3*x)/(3*(x*x‐1)); u=10000000*x; if(count>5000) { cout<<"迭代结果不收敛于 0!"<<endl; break; } } cout<<"x="<<x<<endl<<endl;
贾忠孝高等数值分析第一次上机作业
【运行结果】 当 m=300 时,下图表示实验结果,其中 k 为停机循环次数
当 m=995 时,停机循环次果表明当 m 越小时,收敛速度越快,在有限精度下,停机循环次数越小。这 与 Lanczos 方法最多 m 步找到准确解这一结论相吻合。
4. 取初始近似解为零向量, 右端项 b 仅由 A 的 m 个不同个特征向量的线性组 合表示时, Lanczos 方法的收敛性如何? 数值计算中方法的收敛性和m 的大小关 系如何? 【程序】 clc clear clf n=1000; rs=10^(-10); %停机准则 m=10; disp('Lanczos 算法') %定义对称正定阵与 b
1 1000, 2 59.8858, 999 10.0961, 1000 0.01,
经过 k=100,基本收敛达到精度要求。
【结论】 后者的收敛速度要大于前者。说明当 A 的最大特征值远大于第二个最大特征 值, 最小特征值远小于第二个最小特征值时,收敛速度只与 2. 对于同样的例子, 比较 CG 和 Lanczos 的计算结果. 【程序】
高等数值分析实验作业一
机械系 光辉 2014310205
1. 构造例子说明 CG 的数值性态 . 当步数 = 阶数时 CG 的解如何 ? 当 A 的最 大特征值远大于第二个最大特征值, 最小特征值远小于第二个最小特征值时 方 法的收敛性如何? 问题 1 【程序】 clc clear n=1000; %定义对称正定阵与 b lans=sort(rand(n,1),'descend'); D=diag(lans); Q=orth(rand(1000,1000)); A=Q*D*Q'; b=rand(n,1); %初始情况 x0=eye(n,1); r0=b-A*x0; p(:,1)=r0; %执行第一步 af(1)=dot(r0,r0)/dot(p(:,1),A*p(:,1)); x(:,1)=x0+af(1)*p(:,1); r(:,1)=b-A*x(:,1); bat(2)=dot(r(:,1),r(:,1))/dot(r0,r0); p(:,2)=r(:,1)+bat(2)*p(:,1); %执行 k 步 K=n; for k=2:1:K k af(k)=dot(r(:,k-1),r(:,k-1))/dot(A*p(:,k),p(:,k)); x(:,k)=x(:,k-1)+af(k)*p(:,k); r(:,k)=b-A*x(:,k);
数值分析上机作业(二)
数值分析上机作业(二)曲线逼近一、题目要求设()ln ,[1,3]f x x x x =∈,试求出权函数()1x ρ=的最佳平方逼近二次多项式。
另外请用Chebyshev 截断级数的办法和插值余项极小化方法分别给出近似最佳一致逼近二次多项式。
并画出所有曲线图。
二、方案设计2.1勒让德最佳平方逼近二次多项式2.1.1生成勒让德多项式序列此处利用递推公式12()(21)()(1)()n n n np x n xp x n p x −−=−−−12()1,()p x p x x==递推得到(),1,2,,1n p x n n =⋅⋅⋅+。
此段程序存储为legendre_poly.m 。
2.1.2求特定函数的勒让德多项式勒让德多项式逼近可以表述为0011()()()()n n P x c P x c P x c P x =++⋅⋅⋅+其中系数,0,1,,i c i n =⋅⋅⋅可以通过下式求得11((),())21()()((),())2i i i i i f x P x i c f x P x dx P x P x −+==∫这里需要注意的是,勒让德多项式均定义在(1,1)−上。
当给定函数区间为任意区间(,)a b 时,需要进行区间变换,令(2)()x a b t b a −−=−则(1,1)t ∈−。
由于给定函数区间不为(1,1)−,这里需要进行区间变换。
利用(2)/()t x a b b a =−−−,代入所得的勒让德多项式序列中,对其进行变换。
这样在积分时,即可在区间(,)a b 上进行。
此段程序存储为legendre.m 。
2.1.3给定函数2.1.4主程序将此段程序保存为main.m 。
运行主程序,可以得到勒让德多项式,并在区间(,)a b 上作图。
2.1.5实验数据及结果运行主程序,可得到勒让德多项式为同时可以得到逼近图像图像中散点为原函数对应的数据点。
2.2切比雪夫多项式逼近2.2.1给定函数2.2.2求出切比雪夫多项式序列这里利用递推关系12()2()()n n n T x xT x T x −−=−12()1,()T x T x x==递推得到(),1,2,,1n T x n n =⋅⋅⋅+。
高等数值分析上机作业
画图分析
4
第 10 章 常微分方程的初边值问题解法
上机作业 2:
1. 分别用 Euler 方法(h=0.025)、改进的 Euler 方法(h=0.05)、经
典的 R-K 方法(h=0.1),求初值问题的数值计算 0.1,0.2,0.3,0.4,0.5
处解的近似值。
y y x2 1 y(0) 0.5
主程序: >> fun=inline('y-x.^2+1'); >> [x,y]=Euler1(fun,0.5,0.1)
运行结果:
x=
0.1000 0.2000 0.3000 0.4000 0.5000
y=
0.5000 0.6540 0.8200 0.9970 1.1841
用经典的R-K方法()求解一阶微分方程组的初值问题,并分别画出
3
h=0.01;x=-1:h:1; B(1,1)=quad('asin(x)./(sqrt(1-x.^2))',-1,1); B(2,1)=quad('asin(x).*x./sqrt(1-x.^2)',-1,1); B(3,1)=quad('asin(x).*(2*x.^2-1)./(sqrt(1-x.^2))',-1,1); B(4,1)=quad('asin(x).*(4*x.^3-3*x)./(sqrt(1-x.^2))',-1,1); B A=diag([pi,pi/2,pi/2,pi/2]); c=inv(A)*B y=asin(x); plot(x,y,'r') hold on z=0.9204*x+0.4296*x.^3; plot(x,z,'k') hold on s=1.2733*x+0.1415*(4*x.^3-3*x); plot(x,s,'c') legend('y=arcsin(x)','y=0.9204x+0.4296x^3','s=1.2733x+0.141 5(4x^3-3*)') 最后可以得到切比雪夫拟合多项式为 y 1.2733x 0.1415(4x3 3x) ,
北理工数值分析大作业
数值分析上机作业第 1 章1.1计算积分,n=9。
(要求计算结果具有6位有效数字)程序:n=1:19;I=zeros(1,19);I(19)=1/2*((exp(-1)/20)+(1/20));I(18)=1/2*((exp(-1)/19)+(1/19));for i=2:10I(19-i)=1/(20-i)*(1-I(20-i));endformat longdisp(I(1:19))结果截图及分析:在MATLAB中运行以上代码,得到结果如下图所示:当计算到数列的第10项时,所得的结果即为n=9时的准确积分值。
取6位有效数字可得.1.2分别将区间[-10.10]分为100,200,400等份,利用mesh或surf命令画出二元函数z=的三维图形。
程序:>> x = -10:0.1:10;y = -10:0.1:10;[X,Y] = meshgrid(x,y);Z = exp(-abs(X))+cos(X+Y)+1./(X.^2+Y.^2+1);subplot(2,2,1);mesh(X,Y,Z);title('步长0.1')>> x = -10:0.2:10;y = -10:0.2:10;[X,Y] = meshgrid(x,y);Z = exp(-abs(X))+cos(X+Y)+1./(X.^2+Y.^2+1);subplot(2,2,1);mesh(X,Y,Z);title('步长 0.2')>>x = -10:0.05:10;y = -10:0.05:10;[X,Y] = meshgrid(x,y);Z = exp(-abs(X))+cos(X+Y)+1./(X.^2+Y.^2+1);subplot(2,2,1);mesh(X,Y,Z);title('步长0.05')结果截图及分析:由图可知,步长越小时,绘得的图形越精确。
(完整word版)数值分析上机作业1-1解析
考虑一个高次的代数多项式
(E1-1)
显然该多项式的全部根为l,2,…,20,共计20个,且每个根都是单重的(也称为简单的)。现考虑该多项式方程的一个扰动
(E1-2)
其中 是一个非常小的数。这相当于是对(E1-1)中 的系数作一个小的扰动。我们希望比较(E1-1)和(E1-2)根的差别,从而分析方程(E1-1)的解对扰动的敏感性。
ve=zeros(1,21);
ve(21-Numb)=ess;
root=roots(poly(1:20)+ve);
x0=real(root); y0=imag(root);
plot(x0',y0','*');
disp(['对扰动项 ',num2str(Numb),'加扰动',num2str(ess),'得到的全部根为:']);
ess分别为1e-6,1e-8.1e-10,1e-12的图像如下:
从实验的图形中可以看出,当ess充分小时,方程E.1.1和方程E.1.2的解相差很小,当ess逐渐增大时,方程的解就出现了病态解,这些解都呈现复共轭性质。
(2)将扰动项加到x18上后,ess=1e-009时方程的解都比较准确,没有出现复共轭现象。ess=1e-008时误差与x19(ess=1e-009)时相当,即扰动加到x18上比加到x19小一个数量级。对x8的扰动ess=1000时没有出现复共轭,误差很小;对x的扰动ess=10e10时没有出现复共轭,误差很小。因此,扰动作用到xn上时,n越小,扰动引起的误差越小。
if((Numb>20)|(Numb<0))errordlg('请输入正确的扰动项:[0 20]之间的整数!');return;end
数值分析上机作业
数值分析上机实验报告选题:曲线拟合的最小二乘法指导老师:专业:学号:姓名:课题八 曲线拟合的最小二乘法一、问题提出从随机的数据中找出其规律性,给出其近似表达式的问题,在生产实践和科学实验中大量存在,通常利用数据的最小二乘法求得拟合曲线。
在某冶炼过程中,根据统计数据的含碳量与时间关系,试求含碳量y 与时间t 的拟合曲线。
二、要求1、用最小二乘法进行曲线拟合;2、近似解析表达式为()33221t a t a t a t ++=ϕ;3、打印出拟合函数()t ϕ,并打印出()j t ϕ与()j t y 的误差,12,,2,1Λ=j ;4、另外选取一个近似表达式,尝试拟合效果的比较;5、*绘制出曲线拟合图*。
三、目的和意义1、掌握曲线拟合的最小二乘法;2、最小二乘法亦可用于解超定线代数方程组;3、探索拟合函数的选择与拟合精度间的关系。
四、计算公式对于给定的测量数据(x i ,f i )(i=1,2,…,n ),设函数分布为 特别的,取)(x j ϕ为多项式j j x x =)(ϕ (j=0, 1,…,m )则根据最小二乘法原理,可以构造泛函令0=∂∂ka H (k=0, 1,…,m ) 则可以得到法方程求该解方程组,则可以得到解m a a a ,,,10Λ,因此可得到数据的最小二乘解曲线拟合:实际工作中,变量间未必都有线性关系,如服药后血药浓度与时间的关系;疾病疗效与疗程长短的关系;毒物剂量与致死率的关系等常呈曲线关系。
曲线拟合是指选择适当的曲线类型来拟合观测数据,并用拟合的曲线方程分析两变量间的关系。
五、结构程序设计在程序结构方面主要是按照顺序结构进行设计,在进行曲线的拟合时,为了进行比较,在程序设计中,直接调用了最小二乘法的拟合函数polyfit ,并且依次调用了plot 、figure 、hold on 函数进行图象的绘制,最后调用了一个绝对值函数abs 用于计算拟合函数与原有数据的误差,进行拟合效果的比较。
《数值分析》上机习题
《数值分析》上机习题1.用Newton法求方程X7 - 28X4 + 14=0在(0.1,1.9)中的近似根(初始近似值取为区间端点,迭代6次或误差小于0.00001)。
#include<stdio.h>#include<math.h>int main(){ float x1,x,f1,f2;static int count=0;x1=0.1 ;//定义初始值do{x=x1;f1=x*(x*x*x*x*x*x-28*x*x*x)+14;f2=7*x*x*x*x*x*x-4*28*x*x*x;//对函数f1求导x1=x-f1/f2; count++; }while(fabs(x1-x)>=1e-5);printf("%8.7f\n",x1); printf("%d\n",count);return 0;}2.已知函数值如下表:试用三次样条插值求f(4.563)及f’(4.563)的近似值。
include <stdio.h>#include <math.h>#define N 11main(){double B[N+1][N+1],m,x,u[N+1],y[N+1],c[N+1],d[N+1];double e[N+1]={2,0,4.15888308,6.5916738,8.3177664,9.6566268,10.750557,11.675460 6,12.47667,13.1833476,13.8155106,14.0155106};int i;x=4.563;B[0][0]=-2;B[0][1]=-4;B[N][N-1]=4;B[N][N]=2;for(i=1;i<N;i++){B[i][i-1]=1;B[i][i]=4;B[i][i+1]=1;}u[0]=B[0][0];y[0]=e[0];for(i=1;i<N;i++){m=B[i][i-1]/u[i-1];u[i]=B[i][i]-m*B[i-1][i];y[i]=e[i]-m*y[i-1];}c[N]=y[N]/u[N];for(i=N-1;i>=0;i--)c[i]=(y[i]-B[i][i+1]*c[i+1])/u[i];for(i=0;i<12;i++){m=fabs(x-i);if(m>=2)d[i]=0;else if(m<=1)d[i]=0.5*fabs(pow(m,3))-m*m+2.0/3;elsed[i]=(-1.0/6.0)*fabs(pow(m,3))+m*m-2*fabs(m)+4/3.0;} m=0;for(i=0;i<12;i++) m=m+c[i]*d[i];printf("f(%4.3f)=%f\n",x,m);printf("f'(4.563)=%lf\n",(c[4]-c[2])/2); }3.用Romberg 算法求)00001.0(sin )75(32314.1=+⎰ε允许误差dx x x x x . #include "stdafx.h" #include<stdio.h> #include<math.h> float f(float x) {float f=0.0;f=pow(3.0,x)*pow(x,1.4)*(5*x+7)*sin(x*x); return (f); } main() {int i=1,j,k,n=12;float T[12],a=1.0,b=3.0,s=0.0; T[0]=0.5*(b-a)*(f(a)+f(b));for(j=1;j<n-1;j++){ for(k=1;k<=pow(2,j-1);k++) s+=f(a+(2*k-1)*(b-a)/pow(2,j)); T[j]=0.5*(T[j-1]+(b-a)*s/pow(2,j-1)); s=0.0; }T[11]=(4*T[1]-T[0])/(float)3;for(;fabs(T[11]-T[0])>0.00001;i++) {T[0]=T[11];for(j=1;j<n-1-i;j++) T[j]=(pow(4,i)*T[j+1]-T[j])/(pow(4,i)-1); T[11]=(pow(4,i+1)*T[1]-T[0])/(pow(4,i+1)-1); }printf("%f\n",T[11]); }4. 用定步长四阶Runge-Kutta 求解一、程序要求用定步长四阶法求解 y1’=1y2’=y3 y3’=1000-1000y2-100y3(y1(0)=y2(0)=y3(0)=0) h=0.0005,打印yi(0.025),yi(0.045),yi(0.085),yi(0.1),(i=1,2,3)h =0.0005,打印y i (0.025) ,⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧===--===0)0(0)0(0)0(10010001000//1/321323321y y y y y dt dy ydt dy dt dyy i(0.045) ,y i(0.085) ,y i(0.1) ,(i=1,2,3)#include "stdafx.h"#include <stdio.h>#include <math.h>double F(double x,double y[4],double f[4]){f[1]=0*x+0*y[1]+0*y[2]+0*y[3]+1;f[2]=0*x+0*y[1]+0*y[2]+1*y[3]+0;f[3]=0*x+0*y[1]-1000*y[2]-100*y[3]+1000;return(1);}void main(){double F(double x,double y[4],double f[4]);doubleh=0.0005,x=0,Y[4],k[5][4],s[4],f[4],det,m[4]={0.025,0.045,0.085,0.1};int i,j,t; for(t=0;t<=3;t++)/*龙格-库塔算法*/{for(j=0;j<=3;j++)Y[j]=0; //每求一组值后将初值条件还原为0 for(i=1;i<=int(m[t]/h);i++){for(j=1;j<=3;j++)s[j]=Y[j];det=F(x,s,f);for(j=1;j<=3;j++)k[1][j]=h*f[j]; /*四阶古典公式中的k值和求和的计算*/ for(j=1;j<=3;j++)s[j]=Y[j]+0.5*k[1][j];det=F(x+0.5*h,s,f);for(j=1;j<=3;j++)k[2][j]=h*f[j];for(j=1;j<=3;j++)s[j]=Y[j]+0.5*k[2][j];det=F(x+0.5*h,s,f);for(j=1;j<=3;j++)k[3][j]=h*f[j];for(j=1;j<=3;j++)s[j]=Y[j]+k[3][j];det=F(x+h,s,f);for(j=1;j<=3;j++)k[4][j]=h*f[j];for(j=1;j<=3;j++)Y[j]=Y[j]+(k[1][j]+2*k[2][j]+2*k[3][j]+k[4][j])/6;x+=h;} for(j=1;j<=3;j++)printf("y[%d](%f)=%f ",j,m[t],Y[j]); printf("\n"); } } 5.⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=40.00001 4.446782 2.213474- 0.238417 1.784317 0.037585- 1.010103- 3.123124 2.031743- 4.446782 30.719334 3.123789 1.103456- 2.121314 0.71828- 0.336993 1.112348 3.067813 2.213474- 3.123789 14.7138465 0.103458- 3.111223- 2.101023 1.056781- 0.784165- 1.7423820.238417 1.103456- 0.103458- 9.789365 0.431637 3.741856- 1.836742 1.563849 0.718719 1.7843172.1213143.111223- 0.431637 19.8979184.101011 2.031454 2.189736 0.113584-0.037585- 0.71828- 2.101023 3.741856- 4.101011 27.108437 3.123848 1.012345- 1.112336 1.010103- 0.336993 1.056781- 1.836742 2.031454 3.123848 15.567914 3.125432- 1.061074- 3.123124 1.112348 0.784165- 1.563849 2.189736 1.012345- 3.125432- 19.141823 2.115237 2.031743- 3.067813 1.742382 0.718719 0.113584- 1.112336 1.061074- 2.115237 12.38412A Tb )5.6784392- 4.719345 1.1101230 86.612343- 1.784317 0.84671695 25.173417- 33.992318 2.1874369(= 用列主元消去法求解Ax=b 。
东南大学数值分析上机
第一章一、题目设∑=-=Nj N j S 2211,其精确值为)11123(21+--N N 。
(1)编制按从大到小的顺序11131121222-+⋯⋯+-+-=N S N ,计算SN 的通用程序。
(2)编制按从小到大的顺序1211)1(111222-+⋯⋯+--+-=N N S N ,计算SN 的通用程序。
(3)按两种顺序分别计算64210,10,10S S S ,并指出有效位数。
(编制程序时用单精度) (4)通过本次上机题,你明白了什么? 二、MATLAB 程序N=input('请输入N(N>1):');AccurateValue=single((0-1/(N+1)-1/N+3/2)/2); %single 使其为单精度 Sn1=single(0); %从小到大的顺序 for a=2:N; Sn1=Sn1+1/(a^2-1); endSn2=single(0); %从大到小的顺序 for a=2:N; Sn2=Sn2+1/((N-a+2)^2-1); endfprintf('Sn 的值 (N=%d)\n',N);disp('____________________________________________________') fprintf('精确值 %f\n',AccurateValue); fprintf('从大到小计算的结果 %f\n',Sn1); fprintf('从小到大计算的结果 %f\n',Sn2);disp('____________________________________________________')三、结果请输入N(N>1):100Sn的值(N=100)____________________________________________________精确值0.740049从大到小计算的结果0.740049从小到大计算的结果0.740050____________________________________________________请输入N(N>1):10000Sn的值(N=10000)____________________________________________________精确值0.749900从大到小计算的结果0.749852从小到大计算的结果0.749900____________________________________________________请输入N(N>1):1000000Sn的值(N=1000000)____________________________________________________精确值0.749999从大到小计算的结果0.749852从小到大计算的结果0.749999____________________________________________________四、结果分析可以得出,算法对误差的传播又一定的影响,在计算时选一种好的算法可以使结果更为精确。
数值分析上机作业最强版
数值分析上机作业姓名:唐皓学号:142460专业:道路与铁道工程院系:交通学院授课教师:吴宏伟日期:2015年1月习题一1 题目17.(上机题)舍入误差与有效数 设2211NN j S j ==-∑,其精确值为1311221N N ⎛⎫-- ⎪+⎝⎭。
(1)编制按从大到小的顺序22211121311N S N =+++---,计算N S 的通用程序; (2)编制按从小到大的顺序2221111(1)121N S N N =+++----,计算N S 的通用程序; (3)按两种顺序分别计算210S ,410S ,610S ,并指出有效位数。
(编制程序时用单精度);(4)通过本上机题你明白了什么?2 通用程序代码2.1 按从小到大的顺序计算N Svoid AscendSum(unsigned long int N)// 计算从大到小的总和 {for (unsigned long int j=2;j<=N;j++) ascendSum+=(float )1.0/(j*j-1);cout<<"Sum From 1 to N (Ascend) is: "<<ascendSum<<endl; Error(ascendSum); Delimiter();} 2.2 按从大到小的顺序计算N Svoid DescendSum(unsigned long int N)//计算从小到大的总和 {for (unsigned long int j=N;j>=2;j--) descendSum+=(float )1.0/(j*j-1);cout<<"Sum From N to 1 (Descend) is: "<<descendSum<<endl; Error(descendSum); Delimiter();}3计算结果展示图1 N=100时的计算结果图2 N=10000时的计算结果图3 N=1000000时的计算结果表1-1 计算结果汇总N S 精确值按从小到大按从大到小N S 值有效位数 N S 值有效位数210S 0.7400494814 0.7400494814 10 0.740049541 6 410S 0.7498999834 0.7498521209 4 0.7498999834 10 610S0.74999898670.75185602920.752992510824 计算结果分析(1)如果采用单精度数据结构进行计算,则相较于双精度的数据结果,由于数据存储字长的限制导致计算机存在较大的舍入误差,因此本程序采用的是双精度数据存储方式。
昆明理工数值分析大作业插值法数值分析作业
5 / 11
y(i)=s; end
%所得近似值给对应返回值
问题一: 求解及画图程序: xj=[0.4 0.55 0.65 0.8 0.95 1.05]; yj=[0.41075 0.57815 0.69675 0.9 1 1.25382]; xs=(0.3:0.01:1.1); y0=lagrange(xj,yj,xs); plot(xs,y0) >> hold on xs=[0.596 0.99]; y0=lagrange(xj,yj,xs) y0 = 0.6257 1.0542 求解结果; x y 问题一插值函数绘图: * 所求点 插值节点 0.596 0.6257
function y=newton(f,x0,x); m=length(x);n=length(x0); for i=1:m p=zeros(1,n-1); suma=zeros(1,n); suma(1)=f(1); sumax=0; for k=1:(n-1); p(k)=x(i)-x0(k); end for j=2:n; q=1; for s=1:(j-1); q=q*p(s); end suma(j)=f(j)*q; end for h=1:n; sumax=sumax+suma(h); end y(i)=sumax; end
������ =0 ������ =0 ������≠������
������ − ������������ ������������ − ������������
即:
������������ ������ =
������ ������ =0
������������
������ ������ +1 ������ ������−������ ������ ������ ’������ +1 ������ ������
数值分析上机作业(2)
一、数值求解如下正方形域上的Poisson 方程边值问题 2222(,)1,0,1(0,)(1,)(1),01(,0)(,1)0,01u u f x y x y x y u y u y y y y u x u x x ⎧⎛⎫∂∂-+==<<⎪ ⎪∂∂⎪⎝⎭⎨==-≤≤⎪⎪==≤≤⎩二、用椭圆型第一边值问题的五点差分格式得到线性方程组为2,1,1,,1,10,1,,0,141,?,?,?,?0,1i j i j i j i j i j ijj N j i i N u u u u u h f i j N u u u u i j N -+-+++----=≤≤====≤≤+, 写成矩阵形式Au=f 。
其中1.三 、编写求解线性方程组Au=f 的算法程序, 用下列方法编程计算, 并比较计算速度。
2.用Jacobi 迭代法求解线性方程组Au=f 。
3.用块Jacobi 迭代法求解线性方程组Au=f 。
4. 用SOR 迭代法求解线性方程组Au=f,用试算法确定最佳松弛因子。
1122N N v b v b u f v b ⎛⎫⎛⎫ ⎪ ⎪ ⎪ ⎪== ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭4114114ii A -⎛⎫ ⎪- ⎪= ⎪- ⎪-⎝⎭11,12,1,121,22,2,21,2,,2211,12,1,121,22,2,221,2,,(,,...,),(,,...,),......,(,,...,)(,,...,)?,(,,...,)?,......,(,,...,)?1,999,0.10.011T T N N TN N N N N T T N N T N N N N N v u u u v u u u v u u u b h f f f b h f f f b h f f f h N h N ====+=+=+===+取或则或,1,,1,2,...,i j f i j N== 1122NN A I I A A I I A -⎛⎫ ⎪- ⎪= ⎪- ⎪-⎝⎭5.用块SOR 迭代法求解线性方程组Au=f,用试算法确定最佳松弛因子。
东南大学 数值分析上机题作业 MATLAB版
东南大学数值分析上机题作业MATLAB版上机作业题报告1.Chapter 11.1题目设S N= Nj=2j2−1,其精确值为11311(-- 。
22N N +1(1)编制按从大到小的顺序S N =(2)编制按从小到大的顺序S N =111,计算S N 的通用程序。
++⋯⋯+22-132-1N 2-1111,计算S N 的通用程++⋯⋯+N 2-1(N -1 2-122-1序。
(3)按两种顺序分别计算S 102, S 104, S 106, 并指出有效位数。
(编制程序时用单精度)(4)通过本次上机题,你明白了什么?1.2程序 1.3运行结果1.4结果分析按从大到小的顺序,有效位数分别为:6,4,3。
按从小到大的顺序,有效位数分别为:5,6,6。
可以看出,不同的算法造成的误差限是不同的,好的算法可以让结果更加精确。
当采用从大到小的顺序累加的算法时,误差限随着N 的增大而增大,可见在累加的过程中,误差在放大,造成结果的误差较大。
因此,采取从小到大的顺序累加得到的结果更加精确。
2.Chapter 22.1题目(1)给定初值x 0及容许误差ε,编制牛顿法解方程f(x=0的通用程序。
3(2)给定方程f (x =x-x =0, 易知其有三个根x 1*=-3, x 2*=0, x 3*=○1由牛顿方法的局部收敛性可知存在δ>0, 当x 0∈(-δ, Newton 迭代序列收敛+δ 时,于根x2*。
试确定尽可能大的δ。
○2试取若干初始值,观察当x 0∈(-∞, -1, (-1, -δ, (-δ, +δ, (δ, 1, (1, +∞ 时Newton 序列的收敛性以及收敛于哪一个根。
(3)通过本上机题,你明白了什么?2.2程序2.3运行结果(1)寻找最大的δ值。
算法为:将初值x0在从0开始不断累加搜索精度eps ,带入Newton 迭代公式,直到求得的根不再收敛于0为止,此时的x0值即为最大的sigma 值。
最新(完美版)数值分析上机作业
一. 上机作业任务一: 用五点差分格式求解Poisson 方程边值问题,P124-------3、4(任选一题)。
二. 上机作业任务二:用Simpson 求积法计算定积分()baf x dx ⎰。
下面两种方法任选一。
(1)变步长复化Simpson 求积法。
(2)自适应Simpson 求积法三. 上机作业任务三:用MATLAB 语言编写连续函数最佳平方逼近的算法程序(函数式M 文件)。
要求算法程序可以适应不同的具体函数,具有一定的通用性。
并用此程序进行数值试验,写出计算实习报告。
所编程序具有以下功能:1. 用Lengendre 多项式做基,并适合于构造任意次数的最佳平方逼近多项式。
可利用递推关系 0112()1,()()(21)()(1)()/2,3,.....n n n P x P x xP x n xP x n P x n n --===---⎡⎤⎣⎦=2. 被逼近函数f(x)用M 文件建立数学函数。
这样,此程序可通过修改建立数学函数的M 文件以适用不同的被逼近函数(要学会用函数句柄)。
3. 要考虑一般的情况]1,1[],[)(+-≠∈b a x f 。
因此,程序中要有变量代换的功能。
4. 计算组合系数时,计算函数的积分采用数值积分的方法。
5. 程序中应包括帮助文本和必要的注释语句。
另外,程序中也要有必要的反馈信息。
6. 程序输入:(1)待求的被逼近函数值的数据点0x (可以是一个数值或向量)(2)区间端点:a,b 。
7. 程序输出:(1)拟合系数:012,,,...,n c c c c(2)待求的被逼近函数值00001102200()()()()()n n s x c P x c P x c P x c P x =++++ 8. 试验函数:()cos ,[0,4]f x x x x =∈+;也可自选其它的试验函数。
9. 用所编程序直接进行计算,检测程序的正确性,并理解算法。
10. 分别求二次、三次、。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
运行结果:
2
拟合多项式为 y 0.9204x 0.4296x3 (2)用切比雪夫多项式拟合 arcsin x 程序如下;A 是正规方程的系数矩 阵,可以直接由公式得到,设拟合多项式为
y c0 c1x c2 (2x2 1) c3(4x3 3x)
下面将拟合曲线画出 x=-1:0.01:1; y=asin(x); plot(x,y,'r') hold on z=0.9204*x+0.4296*x.^3; plot(x,z,'g') hold on legend('y=arcsin(x)','y=0.9204x+0.4296x^3') B=zeros(4,1);
each
i
0,1,..., N
1.
程序代码:
建立M文件 function [x,y]=Euler1(fun,y0,h) x=0.1:h:0.5; y(1)=y0; for n=1:4
k1=feval(fun,x(n),y(n)); y(n+1)=y(n)+h*k1;
6
k2=feval(fun,x(n+1),y(n+1)); y(n+1)=y(n)+h*(k1+k2)/2; end x=x'; y=y'; 主程序 >> fun=inline('y-x.^2+1'); >> [x,y]=Euler1(fun,0.5,0.1)
2 S ( x)
2 S ( x)
a
f x 在子集 a,b中的最佳平方逼近函数。
取 j x x j , j 0,1,, n, 就有 span1, x, x2,, xn。对于任意的 Sx ,
n
有 Sx aj x j , Sx为次数 n 的多项式。 j0
令 f (x) 在 span{1, x, x2, x3} 中的最佳平方逼近函数为
y(1)=0.5;
for j=1:3
k1=h*feval(f,x(j),y(j));
k2=h*feval(f,x(j)+h/2,y(j)+k1/2);
k3=h*feval(f,x(j)+h/2,y(j)+k2/2);
10
k4=h*feval(f,x(j)+h,y(j)+k3); y(j+1)=y(j)+(k1+2*k2+2*k3+k4)/6; end F=zeros(1,4); F=feval(f,x(1:4),y(1:4)); for k=4:n p=y(k)+(h/24)*(F*[-9 37 -59 55]'); x(k+1)=x(1)+h*k; F=[F(2) F(3) F(4) feval(f,x(k+1),p)]; y(k+1)=y(k)+(h/24)*(F*[1 -5 19 9]'); F(4)=feval(f,x(k+1),y(k+1)); end A=[x' y']; 运行结果: 0.100000000000000 0.657414375000000 0.200000000000000 0.829298275997396 0.300000000000000 1.015070058432605 0.400000000000000 1.214086961083903 0.500000000000000 1.425638497556907
-a(2)*x(2)+x(1)*x(3)+a(6)*x(4)*x(4); -a(3)*x(3)+x(1)*x(2)+a(4)*x(4); a(5)*x(1)]; %% 调用 RK 方法解方程组 y0 = [1 ,-2, 1, -1];%初值 [~,y]= myrk4(@xtfc,0,0.01,15000,y0); %% 作相平面图 subplot(1,2,1) plot(y(:,1),y(:,3),'b'); xlabel('x'); ylabel('z'); subplot(1,2,2) plot(y(:,2),y(:,3),'r') xlabel('y'); ylabel('z');
x-z,y-z 的平面相图。
8
•
x a1x yz
•
y
a2
y
xz
a0 w2
•
z
a3z xy
•
w a5x
a4w
a
a0
,
a1,
a2 ,
a3 ,
a4 ,
Байду номын сангаас
a5 ,
a6 =5,
14,
7,
3,
1,
150
x0 , y0, z0, w0 1, 2, 1, 1
简单原理:
ym1
ym
h 6
第 8 章 函数逼近与曲线拟合
上机作业 1:
最佳平方逼近
8-11.设 f x arcsin x, x 1,1,
(1) 在 span1, x, x2, x3中求 f x 的最佳平方逼近多项式;
(2) 在 spanT0 (x),T1(x),T2 (x),T3(x)中求 f x 的最佳平方逼近多项
画图分析
4
第 10 章 常微分方程的初边值问题解法
上机作业 2:
1. 分别用 Euler 方法(h=0.025)、改进的 Euler 方法(h=0.05)、经
典的 R-K 方法(h=0.1),求初值问题的数值计算 0.1,0.2,0.3,0.4,0.5
处解的近似值。
y y x2 1 y(0) 0.5
主程序: >> fun=inline('y-x.^2+1'); >> [x,y]=Euler1(fun,0.5,0.1)
运行结果:
x=
0.1000 0.2000 0.3000 0.4000 0.5000
y=
0.5000 0.6540 0.8200 0.9970 1.1841
用经典的R-K方法()求解一阶微分方程组的初值问题,并分别画出
运行结果
x=
0.1000 0.2000 0.3000 0.4000 0.5000 y= 0.5000 0.6490 0.8099 0.9819 1.1641
(2)改进欧拉法:
简单原理:
wi
1
wi
h[f 2
w0 (ti , wi ) f (ti1, wi
hf
, (ti , wi ))]
for
(1)欧拉法:
简单原理:
wi1
w0
,
wi hf (ti , wi )
for
each
i
0,1,..., N
1.
程序代码:
建立M文件:
5
function [x,y]=Euler(fun,y0,h) x=0.1:h:0.5; y(1)=y0; for n=1:4
y(n+1)=y(n)+h*feval(fun,x(n),y(n)) end x=x'; y=y'; 主程序:>> fun=inline('y-x.^2+1'); >> [x,y]=Euler(fun,0.5,0.1)
高等数值分析上机作业
目录
上机作业 1........................................1 上机作业 2........................................5 上机作业 3........................................10 上机作业 4........................................13 上机作业 5........................................16 上机作业 6........................................19 上机作业 7........................................20 上机作业 8........................................29
S * ( x)
a* 0
a* 1
x
a* x2 2
a* x3 3
通过求解法方程
(0 ,0 )
(1,0 )
(2 (3
,0 ,0
) )
(0 ,1) (1 ,1 ) (2 ,1) (3 ,1 )
(0 ,2 ) (1,2 ) (2 ,2 ) (3,2 )
(0,3) a0 ( f ,0 )
(1 (2 (3
9
上机作业 3:
1. 用 4 阶 Adams 预测-校正法初值问题的数值解。
y y x2 1 y(0) 0.5
简单原理:
y(0) n1
yn
h 24
(55
y(k 1) n1
yn
h (9 24
f
(
fn xn1,
59 fn1 37 fn2
y(k) n1
)
19
fn
5
9 f n 1
fn3 f
式。
解:(1) 基于幂函数的最佳平方逼近
简单原理:
对于 f (x)C[a,b]及一个线性无关函数组的集合
span0 (x),1(x),,n (x) C[a,b], 若存在 S , 使得
f (x) S(x) 2 min