
我选修了数值分析,结果发现自己不会用matlab,但是上机又要用matlab作业,只好求救高人了,
1.jacobi迭代法解方程组的MATLAB程序function x=jacobi(a,b,x0,m)%a:系数矩阵 b:等号右边矩阵 x0:迭代初值 m:迭代次数x_temp=x0;for k=1:m for i=1:length(b) sum=0; for j=1:length(b) if(j~=i) sum=sum+a(i,j)*x_temp(j); end end x(i)=-(sum-b(i))\\\/a(i,i); end x_temp=x;end2.gauss-seidel迭代法解方程组的MATLAB程序function x=gaussseidel(a,b,x0,m)x=x0;for k=1:m for i=1:length(b) sum=0; for j=1:length(b) if(j~=i) sum=sum+a(i,j)*x(j); end end x(i)=-(sum-b(i))\\\/a(i,i); end x'endm=inv(a)*d';
谈谈对数值分析的认识
数值分析(numerical analysis)是研究分析用计算机求解数学计算问题的数值计算方法及其理论的学科,是数学的一个分支,它以数字计算机求解数学问题的理论和方法为研究对象。
为计算数学的主体部分。
数百年前,人类已经将数学应用在建筑、战争、会计,以及许多领域之上,最早的数学大约是西元前1800年巴比伦人泥板(Babylonian tablet )上的计算式子。
例如所谓的勾股数(毕氏三元数),(3, 4, 5),是直角三角形的三边长比,在巴比伦泥板上已经发现了开根号的近似值。
数值分析在传统上一直不断的在改进,因为像巴比伦人的近似值,至今仍然是近似值,即使用电脑计算也找不到最精确的值. 运用数值分析解决问题的过程:实际问题→数学模型→数值计算方法→程序设计→上机计算求出结果 数值分析这门学科有如下特点: 1·面向计算机 2·有可靠的理论分析 3·要有好的计算复杂性 4·要有数值实验 5.要对算法进行误差分析 主要内容:插值法,函数逼近,曲线拟和,数值积分,数值微分,解线性方程组的直接方法,解线性方程组的迭代法,非线性方程求根,常微分方程的数值解法。
学习数据结构的心得体会
数据结构学习体会及教学建议时间过的很快,一转眼一学期的数据结构课程就已经快要告一段落了,在接触这么课以前,我觉得编程无非就是会写代码就好了。
然而事实上数据结构对于程序来说,有着非常重要的地位。
随着计算机应用领域的不断扩大,非数值计算的问题占据了当今计算机应用的绝大部分,简单的数据类型已经远远不能满足需要,个数据元素之间的复杂关系已经不是普通数学方程式能够表达的了,所以数据结构就扮演了十分重要的角色。
在学期初,我觉得数据结构还是比较简单的,但可能由于之前c语言学习对指针掌握的不够熟练,导致在数据结构中接触到与指针有关的问题,例如线性表,堆栈,队列,二叉树等问题的时候,都会显得有些吃力。
但是在不断学习数据结构的过程中我也不断加强了对指针的学习,现在我已经能够基本掌握指针的相关知识并且能够熟练运用了。
这一学期的学习下来我发现想要学好数据结构有以下几点经验{虽然可能我的数据结构学的并不是很好}1.初步了解算法思想、原理想要弄清楚一个算法的实现,首先要知道这个算法的大致原理,这是最简单的一步,也是最基础的一步,只有明白算法想要干什么,才能弄清楚相应的代码段是为什么2.钻研课本代码段对于书上的算法代码,我们一定要仔细钻研每一步的具体含义和目的,在此基础上深入的了解算法的实现过程,而不是一味的四级硬背,不仅无聊,而且效率低下。
3.查找各种算法资料例如排序算法,其实历史上有很多不同的排序算法,书上
数值分析第二章上机题之第二题
姓名:蒋元义、学号:、专业:测绘工程一、在区间[-1,1]上分别取用两组等距节点对龙格函数作多项式插值及三次样条插值,对每个值,分别画出插值函数即的图形。
解:当N=10时,代码及图像如下:x=-1:0.2:1;y=1.\\\/(1+25*x.^2);x1=linspace(-1,1,10);p=interp1(x,y,x1,'linear');p1=interp1(x,y,x1,'spline');plot(x,y,'b');holdonplot(x1,p,'r');holdonplot(x1,p1,'k');legend('龙格函数','多项式插值函数','三次样条插值函数');gridon;title('N=10的插值函数及原函数图形');xlabel('x轴');ylabel('y‘轴');当N=20时,代码及图像如下:x=-1:0.2:1;y=1.\\\/(1+25*x.^2);x1=linspace(-1,1,20);p=interp1(x,y,x1,'linear');p1=interp1(x,y,x1,'spline');plot(x,y,'b');holdonplot(x1,p,'r');holdonplot(x1,p1,'k');legend('龙格函数','多项式插值函数','三次样条插值函数');gridon;title('N=20的插值函数及原函数图形');xlabel('x轴');ylabel('y轴');
数值分析上机题 , 会的追加分
数值分析实验报告 姓名: 学号: 实验1: 1. 实验项目的性质和任务 通过上机实验,对病态问题、线性方程组求解和函数的数值逼近方法有一个初步理解。
2.教学内容和要求 1)对高阶多多项式 编程求下面方程的解 并绘图演示方程的解与扰动量 的关系。
(实验2.6) 2)对 ,生成对应的Hilbert矩阵,计算矩阵的条件数;通过先确定解获得常向量b的方法,确定方程组 最后,用矩阵分解方法求解方程组,并分析计算结果。
(第三章,实验题4) 3)对函数 的Chebyshev点 编程进行Lagrange插值,并分析插值结果。
(第四章 实验1) 项目涉及核心知识点 病态方程求解、矩阵分解和方程组求解、Lagrange插值。
重点与难点 算法设计和matlab编程。
1)a.实验方案: 先创建一个20*50的零矩阵X,然后利用Matlab中的roots()和poly()函数将50个不同的ess扰动值所产生的50个解向量分别存入X矩阵中。
然后再将ess向量分别和X的20个行向量绘图。
即可直观的看出充分小的扰动值会产生非常大的偏差。
即证明了这个问题的病态性。
b.编写程序: >> X=zeros(20,50); >> ve=zeros(1,21); >> ess=linspace(0,0.00001,50);k=1; >> while k<=50 ve(2)=ess(k); X(1:20,k)=roots(poly(1:20)+ve); k=k+1; end >> m=1; >> while m<=20 figure(m),plot(ess,X(m,:)); m=m+1; end C.实验结果分析和拓展 由上面的实验结果可以看出一个充分小的扰动值可以让方程的解产生非常大的偏差,而且这个偏差随着ess的变大偏差也随即变大。
但可以看出在相对小的根处根比较稳定,也就是说这些根关于ess并不敏感,而在较大根处时,根很不稳定,即这些解关于ess的变化是敏感的。
这就说明了这个问题本身就是一个病态问题,与算法好坏无关。
若扰动在x^18处,只要把程序中的ve(2)改为ve(3)即可,其图形和此类似。
d.实验结论: 高次多项式扰动求方程解问题是一个病态问题。
2)a.实验方案: 先创建一个20*20的零矩阵A,再通过给定解x和Hilbert矩阵求出列向量b,然后通过LU分解法求出方程HX=b的解X,然后将x-X’这一行向量存入A矩阵中,形成一循环,最后,如果Hilbert矩阵非病态的话,则可输出一个20*20的对角矩阵。
b.编写程序: >> n=2; >> A=zeros(20,20); >> while n<=20 x=1:n; H=hilb(n); b=H*x'; [L U]=lu(H); y=L\\\\b;X=U\\\\y; A(n,1:n)=x-X'; n=n+1; end Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 4.455948e-017. Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 7.948463e-017. Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 1.798429e-016. Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 7.626119e-018. Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 6.040620e-017. Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 5.444860e-017. >> A A = 1.0e+003 * Columns 1 through 10 0 0 0 0 0 0 0 0 0 0 -0.0000 0.0000 0 0 0 0 0 0 0 0 -0.0000 0.0000 -0.0000 0 0 0 0 0 0 0 -0.0000 0.0000 -0.0000 0.0000 0 0 0 0 0 0 0.0000 -0.0000 0.0000 -0.0000 0.0000 0 0 0 0 0 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0 0 0 0 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 0 0 0 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 0 0 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0001 -0.0003 0.0006 -0.0007 0.0005 0.0000 -0.0000 0.0000 -0.0001 0.0005 -0.0027 0.0096 -0.0223 0.0348 -0.0361 0.0000 -0.0000 0.0000 -0.0004 0.0030 -0.0098 0.0080 0.0593 -0.2570 0.5154 0.0000 -0.0000 0.0000 -0.0001 0.0005 -0.0029 0.0095 -0.0171 0.0086 0.0347 0.0000 -0.0000 0.0000 -0.0000 0.0003 -0.0016 0.0059 -0.0133 0.0145 0.0094 0.0000 -0.0000 0.0000 -0.0001 0.0009 -0.0042 0.0118 -0.0182 0.0082 0.0185 0.0000 0.0000 -0.0000 0.0002 -0.0027 0.0187 -0.0762 0.1806 -0.2249 0.0813 0.0000 0.0000 -0.0000 0.0001 -0.0017 0.0120 -0.0497 0.1224 -0.1699 0.1064 0.0000 -0.0000 0.0000 -0.0003 0.0028 -0.0137 0.0371 -0.0464 -0.0164 0.1243 Columns 11 through 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.0000 0 0 0 0 0 0 0 0 0 -0.0002 0.0000 0 0 0 0 0 0 0 0 0.0238 -0.0091 0.0015 0 0 0 0 0 0 0 -0.6091 0.4336 -0.1727 0.0296 0 0 0 0 0 0 -0.0944 0.1170 -0.0824 0.0318 -0.0053 0 0 0 0 0 -0.0624 0.1107 -0.1110 0.0674 -0.0232 0.0035 0 0 0 0 -0.0289 0.0059 0.0103 0.0082 -0.0263 0.0181 -0.0042 0 0 0 0.0524 0.1690 -0.3743 -0.1862 1.0944 -1.2171 0.6004 -0.1156 0 0 -0.0327 0.1652 -0.3051 -0.0485 0.7195 -0.9387 0.5714 -0.1699 0.0191 0 -0.1120 -0.0421 0.0883 0.0222 -0.0628 0.1013 -0.2902 0.3783 -0.2173 0.0469 C.实验结果分析和拓展: 当Hilbert矩阵的阶数比较小时,其解X和给定解x偏差不大;但当Hilbert矩阵的阶数变大时,偏差就会变大。
这就说明了Hilbert矩阵是一组病态矩阵,从Matlab运行中的Warning可以看出,其条件数相当大。
d.实验结论: Hilbert矩阵是一组病态矩阵,用它来做线性方程的系数矩阵时,往往会得出与精确解相差较大的解。
3)a.实验方案: 在区间【-1,1】上取点,先按Chebyshev取点,即xk=cos((2k-1)pi\\\/2\\\/(n+1))取点,然后再进行拉格朗日插值,绘出图和插值点。
而后再进行均匀取点再拉格朗日插值。
将两种插值结果进行比较。
b.编程实现: for a=1:10 b=a+1; for c=1:b X(c)=cos((2*c-1)*pi\\\/2\\\/(a+1)); Y(c)=1\\\/(1+25*X(c)^2); x=-1:0.05:1; end m=length(x); for i=1:m z=x(i);s=0; for k=1:b L=1; for j=1:b if j~=k L=L*(z-X(j))\\\/(X(k)-X(j)); end end s=s+L*Y(k); end y(i)=s; end figure(1) plot(x,y,'r'); hold on; figure(2) plot(X,Y,'b*') hold on end for a=2:2:10 b=a+1; X=linspace(-1,1,b); Y=1.\\\/(1+25*X.^2); x=-1:0.05:1; m=length(x); for i=1:m z=x(i);s=0; for k=1:b L=1; for j=1:b if j~=k L=L*(z-X(j))\\\/(X(k)-X(j)); end end s=s+L*Y(k); end y(i)=s; end figure(1) plot(x,y,'r'); hold on; figure(2) plot(X,Y,'b*') hold on end C.实验结果分析及拓展: 均匀插值时,当n比较大时,就会出现多项式插值的Runge现象,即当插值节点的个数n增加时,Lagrange插值多项式对原来函数的近似并非越来越好。
当进行非等距节点插值时,其近似效果明显要比均匀插值是要好。
原因是非均匀插值时,在远离原点处的插值节点比较密集,所以其插值近似效果要比均匀插值时的效果要好。
d.实验结论: 利用Chebyshev点进行非等距节点插值的对原函数的近似效果要比均匀节点插值的好。
数值分析怎么看计算过程稳不稳定
数值分析(numerical analysis)是研究分析用计算机求解数学计算问题的数值计算方法及其理论的学科,是数学的一个分支,它以数字计算机求解数学问题的理论和方法为研究对象。
为计算数学的主体部分。
运用数值分析解决问题的过程:实际问题→数学模型→数值计算方法→程序设计→上机计算求出结果



