数值分析 matlab 实验4
数值分析上机作业(MATLAB)
将系数矩阵 A 分解为:A=L+U+D
Ax=b
⇔ (D + L +U)x = b ⇔ Dx = −(L + U )x + b ⇔ x = −D −1(L + U )x + D −1b x(k +1) = −D −1 (L + U ) x(k ) + D −1b
输入 A,b 和初始向量 x
迭代矩阵 BJ , BG
否
ρ(B) < 1?
按雅各比方法进行迭代
否
|| x (k+1) − x(k) ||< ε ?
按高斯-塞德尔法进行迭代
否
|| x(k+1) − x (k ) ||< ε ?
输出迭代结果
图 1 雅各布和高斯-赛德尔算法程序流程图
1.2 问题求解
按图 1 所示的程序流程,用 MATLAB 编写程序代码,具体见附录 1。解上述三个问题 如下
16
-0.72723528355328
0.80813484897616
0.25249261987171
17
-0.72729617968010
0.80805513082418
0.25253982509100
18
-0.72726173942623
0.80809395746552
0.25251408253388
0.80756312717373
8
-0.72715363032573
0.80789064377799
9
-0.72718652854079
数值分析实验报告--解线性方程组的迭代法及其并行算法
disp('请注意:高斯-塞德尔迭代的结果没有达 到给定的精度,并且迭代次数已经超过最大迭 代次数max1,方程组的精确解jX和迭代向量X 如下: ') X=X';jX=jX' end end X=X';D,U,L,jX=jX'
高斯-塞德尔的输入为:
A=[10 2 3;2 10 1;3 1 10]; b=[1;1;2]; X0=[0 0 0]'; X=gsdddy(A,b,X0,inf, 0.001,100) A=[10 2 3;2 10 1;3 1 10]; 请注意:因为对角矩阵 D 非奇异,所以此方程组有解.
0.0301 0.0758 0.1834
8.心得体会:
这已经是第三次实验了, 或多或少我已经对 MATLAB 有了更多的了 解与深入的学习。通过这次实验我了解了雅可比迭代法和高斯- 塞德尔迭代法的基本思想,虽然我们不能熟练编出程序,但还是 能看明白的。运行起来也比较容易,让我跟好的了解迭代法的多 样性,使平常手算的题能得到很好的验证。通过这次实验让我对 MATLAB 又有了更深一层的认识,使我对这门课兴趣也更加浓厚。
运行雅可比迭代程序输入: A=[10
b=[1;1;2];X0=[0 0 0]'; X=jacdd(A,b,X0,inf,0.001,100)
2 3;2 10 1;3 1 10];
结果为:
k= 1 X=
0.1000 k= 2 X= 0.0200 k= 3 X= 0.0400 k= 4 X= 0.0276 k= 5 X= 0.0314 k= 6 X= 0.0294 k= 7 X= 0.0301 k= 8 X= 0.0297
6、 设计思想:先化简,把对角线的项提到左边,其它项
数值分析实验2014
数值分析实验(2014,9,16~10,28)信计1201班,人数34人数学系机房数值分析计算实习报告册专业__________________学号_______________姓名_______________2014~2015年第一学期实验一数值计算的工具Matlab1. 解释下MATLABS序的输出结果程序:t=0.1n=1:10e=n/10-n*te 的结果:0 0 -5.5511e-017 0 0-1.1102e-016 -1.1102e-016 0 0 02. 下面MATLABS序的的功能是什么?程序:x=1;while 1+x>1,x=x/2,pause(0.02),e nd用迭代法求出x=x/2,的最小值x=1;while x+x>x,x=2*x,pause(0.02),e nd用迭代法求出x=2*x,的值,使得2x>Xx=1;while x+x>x,x=x/2,pause(0.02),e nd用迭代法求出x=x/2,的最小值,使得2x>X3. 考虑下面二次代数方程的求解问题2ax bx c = 0公式x=电上4ac是熟知的,与之等价地有_____________________________ ,对于2a-b ■ b -4aca =1,b =100000000,c =1,应当如何选择算法。
b ~4ac计算,因为b与b2— 4ac相近,两个相加减不宜应该用2a u做分母3 5 74. 函数sin(x)有幂级数展开sin x = x - x - - ■■3! 5! 7!利用幕级数计算sinx的MATLAB程序为fun cti on s=powers in(x)s=0;t=x;n=1;while s+t~=s;s=s+t ;t=-x A2/ ((n+1)*(n+2) ) *t ;n=n+2 ;endt仁cputime;pause(10);t2=cputime;t0=t2-t1(a) 解释上述程序的终止准则。
数值分析第四章外推法计算数值微分MATLAB计算实验报告
数值分析第四章外推法计算数值微分MATLAB计算实验报告数值分析MATLAB计算实验报告姓名班级学号⼀、实验名称⽤MATLAB编程实现数值微分的外推法计算。
⼆、实验⽬的1.掌握数值微分和定义和外推法的计算过程;2.了解数值微分外推法的计算⽅法并且编写出与其算法对应的MATLAB程序代码;3.体会利⽤MATLAB软件进⾏数值计算。
三、实验内容⽤外推法计算f(x)=x2e?x在x=0.5的导数。
四、算法描述1.命名函数。
2.如果输⼊未知数少于四个,默认精度10^-33.描述T表矩阵坐标4.依次赋值计算 T表第⼀列5.根据数值微分计算公式求出T表矩阵的值6.若达到精度则运算结束,若未达到循环计算7.输出T表,得出的值就是导数值五、实验结果六、实验结果分析此实验通过MATLAB实现外推法数值微分计算,得到相应的数据,⽅便对数据进⾏分析。
从结果可以看出,当步长h=0.025时⽤中点微分公式只有3位有效数字,外推⼀次达到5位有效数字,外推两次达到9位有效数字。
七、附录(程序)function g=waituifa(fname,x,h,e)if nargin<4,e=1e-3;end;i=1;j=1;G(1,1)=(feval(fname,x+h)-feval(fname,x-h))/(2*h);G(i+1,1)=(feval(fname,x+h/2)-feval(fname,x-h/2))/h;G(i+1,j+1)=(4^j*G(i+1,j)-G(i,j))/(4^j-1);while abs(G(i+1,i+1)-G(i+1,i))>ei=i+1;G(i+1,1)=(feval(fname,x+h/2^i)-feval(fname,x-h/2^i))/(2*h/2^i); for j=1:iG(i+1,j+1)=((4^j)*G(i+1,j)-G(i,j))/(4^j-1);endendGg=G(i+1,i+1);。
数值分析实验报告4
function f=gg(x) f=sqrt(2.5-(x^3)/4); end
则三种方法运行出的结果分别为: >> BDD(1.5) k= 20 ans = 1.365229578333959 >> WA(1.5) k= 6 ans = 1.365230351032824 >> ATJ(1.5) k= 4 ans = 1.365230013413594 (5)在 MATLAB 的 Editor 中建立一个 M-文件,输入程序代码,实现 matlab 自带函数求根 的程序代码如下:
>>format long BDD(1.5) k= 7 ans = 1.365230575673434
(2)在 MATLAB 的 Editor 中建立一个 M-文件,输入程序代码,实现加权加速求根的程序 代码如下:
function [y,n]=WA(a,eps) if nargin==1 eps=1e-16; end syms x L=subs(diff(sqrt(10/(4+x))),a); xl=gg(a,L); n=1; E=abs(xl-a); while (E>=eps)&(n<=10000) x=xl; xl=gg(x,L); n=n+1; E=abs(xl-x); end
在 command Windows 中输入命令:XJF(1.5),得出的结果为:
>> XJF(1.5) k= 5 ans = 1.365230020178121 (8)在 MATLAB 的 Editor 中建立一个 M-文件,输入程序代码,实现抛物线法求根的程序
代码如下:
function [y,n] = parabola(fx,a,b,c,eps) if(nargin == 4) eps=1e-6; syms x fa = subs(fx,a); fb = subs(fx,b); fc = subs(fx,c); fb_a = (fb-fa)/(b-a); fc_b = (fc-fb)/(c-b); fc_b_a = (fc_b - fb_a)/(c-a); w = fc_b + fc_b_a*(c-b); x0 = c - 2*fc/(w+(w^2 - 4*fc*fc_b_a)^.5); n=1; if(abs(x0-c) > eps && n <= 10000) a=b; b=c; c=x0; fa = subs(fx,a); fb = subs(fx,b); fc = subs(fx,c); fb_a = (fb-fa)/(b-a); fc_b = (fc-fb)/(c-b); fc_b_a = (fc_b - fb_a)/(c-a); w = fc_b + fc_b_a*(c-b); x0=c - 2*fc/(w+(w^2 - 4*fc*fc_b_a)^.5); n=n+1; end y=x0; n; end end
数值分析实验报告心得(3篇)
第1篇在数值分析这门课程的学习过程中,我深刻体会到了理论知识与实践操作相结合的重要性。
通过一系列的实验,我对数值分析的基本概念、方法和应用有了更加深入的理解。
以下是我对数值分析实验的心得体会。
一、实验目的与意义1. 巩固数值分析理论知识:通过实验,将课堂上学到的理论知识应用到实际问题中,加深对数值分析概念和方法的理解。
2. 培养实际操作能力:实验过程中,我学会了使用Matlab等软件进行数值计算,提高了编程能力。
3. 增强解决实际问题的能力:实验项目涉及多个领域,通过解决实际问题,提高了我的问题分析和解决能力。
4. 培养团队协作精神:实验过程中,我与同学们分工合作,共同完成任务,培养了团队协作精神。
二、实验内容及方法1. 实验一:拉格朗日插值法与牛顿插值法(1)实验目的:掌握拉格朗日插值法和牛顿插值法的原理,能够运用这两种方法进行函数逼近。
(2)实验方法:首先,我们选择一组数据点,然后利用拉格朗日插值法和牛顿插值法构造插值多项式。
最后,我们将插值多项式与原始函数进行比较,分析误差。
2. 实验二:方程求根(1)实验目的:掌握二分法、Newton法、不动点迭代法、弦截法等方程求根方法,能够运用这些方法求解非线性方程的根。
(2)实验方法:首先,我们选择一个非线性方程,然后运用二分法、Newton法、不动点迭代法、弦截法等方法求解方程的根。
最后,比较不同方法的收敛速度和精度。
3. 实验三:线性方程组求解(1)实验目的:掌握高斯消元法、矩阵分解法等线性方程组求解方法,能够运用这些方法求解线性方程组。
(2)实验方法:首先,我们构造一个线性方程组,然后运用高斯消元法、矩阵分解法等方法求解方程组。
最后,比较不同方法的计算量和精度。
4. 实验四:多元统计分析(1)实验目的:掌握多元统计分析的基本方法,能够运用这些方法对数据进行分析。
(2)实验方法:首先,我们收集一组多元数据,然后运用主成分分析、因子分析等方法对数据进行降维。
MATLAB实验
MATLAB实验一:MATLAB语言基本概念实验实验目的:1. 熟悉MATLAB语言及使用环境;2.掌握MATLAB的常用命令;3.掌握MATLAB的工作空间的使用;4.掌握MATLAB的获得帮助的途径。
5.掌握科学计算的有关方法,熟悉MATLAB语言及其在科学计算中的运用;6.掌握MATLAB的命令运行方式和M文件运行方式;7.掌握矩阵在MATLAB中的运用。
实验方案分析及设计:本次实验主要目的是了解MATLAB的使用环境,以及常用的一些命令的使用;了解矩阵在MATLAB实验中的具体运用,以及相关的一些符号命令的使用。
实验器材:电脑一台,MATLAB软件实验步骤:打开MATLAB程序,将实验内容中的题目依次输入MATLAB中,运行得到并记录结果,最后再对所得结果进行验证。
实验内容及要求:1.熟悉MATLAB的菜单和快捷键的功能2.熟悉MATLAB的命令窗口的使用3.熟悉常用指令的使用format clc clear help lookfor who whos 4.熟悉命令历史窗口的使用5. 熟悉MATLAB工作空间的功能将工作空间中的变量保存为M文件,并提取该文件中的变量6.熟悉MATLAB获取帮助的途径将所有plot开头的函数列出来,并详细给出plotfis函数的使用方法1. 输入 A=[7 1 5;2 5 6;3 1 5],B=[1 1 1; 2 2 2;3 3 3],在命令窗口中执行下列表达式,掌握其含义:A(2, 3) A(:,2) A(3,:) A(:,1:2:3)A(:,3).*B(:,2) A(:,3)*B(2,:) A*BA.*BA^2 A.^2 B/A B./AA=[7 1 5;2 5 6;3 1 5]7 1 52 5 63 1 5>> B=[1 1 1; 2 2 2;3 3 3]1 1 12 2 23 3 3>> A(2, 3)6>> A(:,2)151>> A(3,:)3 1 5>> A(:,1:2:3)7 52 63 5>> A(:,3).*B(:,2)51215>> A(:,3)*B(2,:)10 10 1012 12 1210 10 10>> A*B24 24 2430 30 3020 20 20>> A.*B7 1 54 10 129 3 15>> A^266 17 6642 33 7038 13 46>> A.^249 1 254 25 369 1 25>> B/A0.1842 0.2105 -0.23680.3684 0.4211 -0.47370.5526 0.6316 -0.7105>> B./A0.1429 1.0000 0.20001.0000 0.4000 0.33331.0000 3.0000 0.60002.输入 C=1:2:20,则 C (i )表示什么?其中 i=1,2,3, (10)1到19差为2,i 代表公差3. 试用 help 命令理解下面程序各指令的含义:cleart =0:0.001:2*pi;subplot(2,2,1);polar(t, 1+cos(t))subplot(2,2,2);plot(cos(t).^3,sin(t).^3)subplot(2,2,3);polar(t,abs(sin(t).*cos(t)))subplot(2,2,4);polar(t,(cos(2*t)).^0.5)4计算矩阵⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡897473535与⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡638976242之和。
数值分析实验报告matlab
数值分析实验报告matlab数值分析实验报告引言:数值分析是一门研究利用计算机数值方法解决数学问题的学科,它在科学计算、工程设计、金融分析等领域具有重要的应用价值。
本实验报告旨在通过使用MATLAB软件,探索数值分析的基本原理和方法,并通过实际案例加深对数值分析的理解。
一、误差分析在数值计算中,误差是无法避免的。
误差分析是数值分析中的重要一环,它帮助我们了解数值计算的准确性和稳定性。
在实验中,我们通过计算机模拟了一个简单的数学问题,并分别计算了绝对误差和相对误差。
通过比较不同算法的误差大小,我们可以选择最适合的算法来解决实际问题。
二、插值与拟合插值和拟合是数值分析中常用的方法,它们可以通过已知的数据点来推导出未知数据点的近似值。
在本实验中,我们通过MATLAB的插值函数和拟合函数,分别进行了插值和拟合的实验。
通过比较不同插值和拟合方法的结果,我们可以选择最适合的方法来处理实际问题。
三、数值积分数值积分是数值分析中的重要内容,它可以用来计算曲线下的面积或函数的积分值。
在实验中,我们通过MATLAB的数值积分函数,对一些简单的函数进行了积分计算。
通过比较数值积分和解析积分的结果,我们可以评估数值积分的准确性和稳定性,并选择最适合的积分方法来解决实际问题。
四、常微分方程的数值解法常微分方程是数值分析中的重要内容,它可以用来描述许多自然现象和工程问题。
在实验中,我们通过MATLAB的常微分方程求解函数,对一些简单的微分方程进行了数值解法的计算。
通过比较数值解和解析解的结果,我们可以评估数值解法的准确性和稳定性,并选择最适合的数值解法来解决实际问题。
五、线性方程组的数值解法线性方程组是数值分析中的经典问题,它在科学计算和工程设计中广泛应用。
在实验中,我们通过MATLAB的线性方程组求解函数,对一些简单的线性方程组进行了数值解法的计算。
通过比较数值解和解析解的结果,我们可以评估数值解法的准确性和稳定性,并选择最适合的数值解法来解决实际问题。
数值分析实验报告纸非线性方程的数值解法及其并行算法
>>二 :牛顿切线
[k,piancha,xdpiancha,xk,yk]=diedai2(1.5,0.0001,100) ans = 1.0000 ans = 2.0000 ans = 3.0000 ans = 4.0000 ans = 5.0000 ans = 6.0000 ans = 7.0000 ans = 0.8306 1.2408 0.6694 1.5361
i=i+1;xk=x(i);[(i-1) piancha xdpiancha xk] end if (piancha >1)&(xdpiancha>0.5)&(k>3) disp('请用户注意:此迭代序列发散,请重新输入新的迭 代公式') return; end if (piancha < 0.001)&(xdpiancha< 0.0000005)&(k>3) disp('祝贺您!此迭代序列收敛,且收敛速度较快') return; end p=[(i-1) piancha xdpiancha xk]'; 建立并保存下面的M文件fun.m function y=fun(x) y=2*x^3-x^2-5; >>[k,piancha,xdpiancha,xk,yk]=diedai2(1.5,0.0001,30) 牛顿切线法的 MATLAB 主程序 现提供名为 newtonqx.m 的 M 文件: function [k,xk,yk,piancha,xdpiancha]=newtonqx(x0,tol,ftol,gxma x) x(1)=x0; for i=1: gxmax x(i+1)=x(i)-fnq(x(i))/(dfnq(x(i))+eps); piancha=abs(x(i+1)-x(i)); xdpiancha= piancha/( abs(x(i+1))+eps); i=i+1; xk=x(i);yk=fnq(x(i)); [(i-1) xk yk piancha
Matlab与数值分析实验
>> sum
法 2: >>a=1:100; >>sum=a*a’
法 3: >>n=1;
>>sum=0;
>> while n<=100
sum=sum+n*n;
n=n+1;
end
-6-
>> sum * 选择语句
if expression() statements;
[else statements;]
end 例:编写函数文件 demo3 实现 sgn 函数功能
例 2:编写命令文件 demo1 完成以下操作
-4-
建立数组 a=[1,2,3,...,20],b=[1,3,5,...,39],并求 a,b 内积 操作 1) 主窗口点击新建按钮 2) 在弹出的文本编辑窗口添加 a=1:20 b=1:2:39 sum=a*b'
3) 单击保存按钮 将文件命名为 demo1 保存在例 1 新建文件夹中
4) 在 Command Window 中输入 demo1 并回车 例 3:编写函数文件 demo2,返回输入变量的内积
操作:1) 新建 M 文件,编辑如下: function sum=demo2(a,b) sum=a*b';
2) 保存文件在查询目录下,注意不要修改默认名 3) 在 Command Window 中输入
操作:1)新建 M 文件,并编辑如下 function val=demo3(x) if x>0 val=1; elseif x<0 val=-1; else val=0; end 2) 将文件保存在查询目录内 3) >>demo3(0) >>demo3(90) >>demo3(-12)
《数值分析》上机实验报告
数值分析上机实验报告《数值分析》上机实验报告1.用Newton 法求方程 X 7-X 4+14=0在(0.1,1.9)中的近似根(初始近似值取为区间端点,迭代6次或误差小于0.00001)。
1.1 理论依据:设函数在有限区间[a ,b]上二阶导数存在,且满足条件{}αϕ上的惟一解在区间平方收敛于方程所生的迭代序列迭代过程由则对任意初始近似值达到的一个中使是其中上不变号在区间],[0)(3,2,1,0,)(')()(],,[x |))(),((|,|,)(||)(|.4;0)(.3],[)(.20)()(.110......b a x f x k x f x f x x x Newton b a b f a f mir b a c x f ab c f x f b a x f b f x f k k k k k k ==-==∈≤-≠>+令)9.1()9.1(0)8(4233642)(0)16(71127)(0)9.1(,0)1.0(,1428)(3225333647>⋅''<-=-=''<-=-='<>+-=f f x x x x x f x x x x x f f f x x x f故以1.9为起点⎪⎩⎪⎨⎧='-=+9.1)()(01x x f x f x x k k k k 如此一次一次的迭代,逼近x 的真实根。
当前后两个的差<=ε时,就认为求出了近似的根。
本程序用Newton 法求代数方程(最高次数不大于10)在(a,b )区间的根。
1.2 C语言程序原代码:#include<stdio.h>#include<math.h>main(){double x2,f,f1;double x1=1.9; //取初值为1.9do{x2=x1;f=pow(x2,7)-28*pow(x2,4)+14;f1=7*pow(x2,6)-4*28*pow(x2,3);x1=x2-f/f1;}while(fabs(x1-x2)>=0.00001||x1<0.1); //限制循环次数printf("计算结果:x=%f\n",x1);}1.3 运行结果:1.4 MATLAB上机程序function y=Newton(f,df,x0,eps,M)d=0;for k=1:Mif feval(df,x0)==0d=2;breakelsex1=x0-feval(f,x0)/feval(df,x0);ende=abs(x1-x0);x0=x1;if e<=eps&&abs(feval(f,x1))<=epsd=1;breakendendif d==1y=x1;elseif d==0y='迭代M次失败';elsey= '奇异'endfunction y=df(x)y=7*x^6-28*4*x^3;Endfunction y=f(x)y=x^7-28*x^4+14;End>> x0=1.9;>> eps=0.00001;>> M=100;>> x=Newton('f','df',x0,eps,M);>> vpa(x,7)1.5 问题讨论:1.使用此方法求方解,用误差来控制循环迭代次数,可以在误差允许的范围内得到比较理想的计算结果。
数值分析实验(4)
页脚内容1实验四 数值积分与数值微分专业班级:信计131班 姓名:段雨博 学号:2013014907 一、实验目的1、熟悉matlab 编程。
2、学习数值积分程序设计算法。
3、通过上机进一步领悟用复合梯形、复合辛普森公式,以及用龙贝格求积方法计算积分的原理。
二、实验题目 P1371、用不同数值方法计算积分049xdx =-⎰。
(1)取不同的步长h .分别用复合梯形及复合辛普森求积计算积分,给出误差中关于h 的函数,并与积分精确值比较两个公式的精度,是否存在一个最小的h ,使得精度不能再被改善?(2)用龙贝格求积计算完成问题(1)。
三、实验原理与理论基础1.1复合梯形公式及其复合辛普森求解[]()()()11101()()222n n n k k k k k h h T f x f x f a f x f b --+==⎡⎤=+=++⎢⎥⎣⎦∑∑误差关于h 的函数:()()212n b a R fh f η-''=-页脚内容2复合辛普森公式:()()()()111/201426n n n k k k k h S f a f x f x f b --+==⎡⎤=+++⎢⎥⎣⎦∑∑误差关于h 的函数:()()441802n n b a h R f I S f η-⎛⎫=-=- ⎪⎝⎭1.2龙贝格求积算法:龙贝格求积公式是梯形法的递推化,也称为逐次分半加速法,它是在梯形公式、辛普森公式和柯特斯公式之间的关系的基础上,构造出一种计算积分的方法,同时它有在不断增加计算量的前提下提高误差的精度的特点。
计算过程如下:(1)取0,k h b a ==-,求:()()()[]()00.,.2hT f a f b k a b =+→⎡⎤⎣⎦令k 1记为区间的二分次数 (2)求梯形值02k b a T -⎛⎫⎪⎝⎭即按递推公式12102122n n n k k h T T f x -+=⎛⎫=+ ⎪⎝⎭∑计算0k T .(3)求加速值,按公式()()()111444141m m k k k mm m m m T T T +--=---逐个求出T 表的地k 行其余各元素()()1,2,,k j j T j k -=(4)若()()001k k T T ε--<(预先给定的精度),则终止计算,并取()()0;1k T I k k ≈+→否则令转(2)继续计算。
数值分析matlab实验报告
数值分析matlab实验报告数值分析 Matlab 实验报告一、实验目的数值分析是研究各种数学问题数值解法的学科,Matlab 则是一款功能强大的科学计算软件。
本次实验旨在通过使用 Matlab 解决一系列数值分析问题,加深对数值分析方法的理解和应用能力,掌握数值计算中的误差分析、数值逼近、数值积分与数值微分等基本概念和方法,并培养运用计算机解决实际数学问题的能力。
二、实验内容(一)误差分析在数值计算中,误差是不可避免的。
通过对给定函数进行计算,分析截断误差和舍入误差的影响。
例如,计算函数$f(x) =\sin(x)$在$x = 05$ 附近的值,比较不同精度下的结果差异。
(二)数值逼近1、多项式插值使用拉格朗日插值法和牛顿插值法对给定的数据点进行插值,得到拟合多项式,并分析其误差。
2、曲线拟合采用最小二乘法对给定的数据进行线性和非线性曲线拟合,如多项式曲线拟合和指数曲线拟合。
(三)数值积分1、牛顿柯特斯公式实现梯形公式、辛普森公式和柯特斯公式,计算给定函数在特定区间上的积分值,并分析误差。
2、高斯求积公式使用高斯勒让德求积公式计算积分,比较其精度与牛顿柯特斯公式的差异。
(四)数值微分利用差商公式计算函数的数值导数,分析步长对结果的影响,探讨如何选择合适的步长以提高精度。
三、实验步骤(一)误差分析1、定义函数`compute_sin_error` 来计算不同精度下的正弦函数值和误差。
```matlabfunction value, error = compute_sin_error(x, precision)true_value = sin(x);computed_value = vpa(sin(x), precision);error = abs(true_value computed_value);end```2、在主程序中调用该函数,分别设置不同的精度进行计算和分析。
(二)数值逼近1、拉格朗日插值法```matlabfunction L = lagrange_interpolation(x, y, xi)n = length(x);L = 0;for i = 1:nli = 1;for j = 1:nif j ~= ili = li (xi x(j))/(x(i) x(j));endendL = L + y(i) li;endend```2、牛顿插值法```matlabfunction N = newton_interpolation(x, y, xi)n = length(x);%计算差商表D = zeros(n, n);D(:, 1) = y';for j = 2:nfor i = j:nD(i, j) =(D(i, j 1) D(i 1, j 1))/(x(i) x(i j + 1));endend%计算插值结果N = D(1, 1);term = 1;for i = 2:nterm = term (xi x(i 1));N = N + D(i, i) term;endend```3、曲线拟合```matlab%线性最小二乘拟合p = polyfit(x, y, 1);y_fit_linear = polyval(p, x);%多项式曲线拟合p = polyfit(x, y, n);% n 为多项式的次数y_fit_poly = polyval(p, x);%指数曲线拟合p = fit(x, y, 'exp1');y_fit_exp = p(x);```(三)数值积分1、梯形公式```matlabfunction T = trapezoidal_rule(f, a, b, n)h =(b a) / n;x = a:h:b;y = f(x);T = h ((y(1) + y(end))/ 2 + sum(y(2:end 1)));end```2、辛普森公式```matlabfunction S = simpson_rule(f, a, b, n)if mod(n, 2) ~= 0error('n 必须为偶数');endh =(b a) / n;x = a:h:b;y = f(x);S = h / 3 (y(1) + 4 sum(y(2:2:end 1))+ 2 sum(y(3:2:end 2))+ y(end));end```3、柯特斯公式```matlabfunction C = cotes_rule(f, a, b, n)h =(b a) / n;x = a:h:b;y = f(x);w = 7, 32, 12, 32, 7 / 90;C = h sum(w y);end```4、高斯勒让德求积公式```matlabfunction G = gauss_legendre_integration(f, a, b)x, w = gauss_legendre(5);%选择适当的节点数t =(b a) / 2 x +(a + b) / 2;G =(b a) / 2 sum(w f(t));end```(四)数值微分```matlabfunction dydx = numerical_derivative(f, x, h)dydx =(f(x + h) f(x h))/(2 h);end```四、实验结果与分析(一)误差分析通过不同精度的计算,发现随着精度的提高,误差逐渐减小,但计算时间也相应增加。
数值分析课程设计报告(MATLAB版)
(2)取右端向量 b 的三位有效数字得 b [1.83 1.08 0.783]T ,求方程组的准确 解 X ,并与 X 的数据 [1 1 1]T 作比较 。说明矩阵的病态性。
算法及相应结果: (1)在 MATLAB 命令窗口里输入如下命令: >> H=[1 1/2 1/3;1/2 1/3 1/4;1/3 1/4 1/5]; b=[11/6 13/12 47/60]'; >> x=H\b 回车得到结果为: x = 1.0000 1.0000 1.0000 (2)紧接着在上题基础上继续输入如下命令: >> c=[1.83 1.08 0.783]'; x1=H\c 回车得到如下结果: x1 = 1.0800 0.5400 1.4400
问题分析:考虑由直线段(2 个点)产生第一个图形(5 个点)的过程,设 P 1 和 P5 分别为原始直线段的两个端点。现在需要在直线段的中间依次插入三个点 。显然, P2 位于 P P2 , P3 , P4 产生第一次迭代的图形(图 1-4) 1 点右端直线段的三分 之一处, P4 点绕 P2 旋转 60 度(逆时针方向)而得到的,故可以处理为向量 P2 P4 经正交变换而得到向量 P2 P3 ,形成算法如下: (1) P2 P 1 (P 5 P 1) / 3 ; (2) P4 P 1 2( P 5 P 1) / 3 ; (3) P3 P2 ( P4 P2 ) AT ; 在算法的第三步中,A 为正交矩阵。
运行结果: 0.0884 0.0580 0.0431 0.0343 0.0285 0.0243 0.0212 0.0188 0.0169 0.0154 0.0141 0.0130 0.0120 0.0112 0.0105 0.0099 0.0094 0.0087 0.0092 0.0042 (2)从 I 30 较粗略的估计值出发,我们不妨取 0.01. 源程序:
数值分析实验报告Matlab仿真资料
数值分析实验报告学院:电气工程与自动化学院专业:控制理论与控制工程姓名:李亚学号:61201401622014 年 12 月24日实验一 函数插值方法一、目的和意义1、 学会常用的插值方法,求函数的近似表达式,以解决其它实际问题;2、 明确插值多项式和分段插值多项式各自的优缺点;3、 熟悉插值方法的程序编制;4、 如果绘出插值函数的曲线,观察其光滑性。
二、实验原理1、 Lagrange 插值公式00,()n ni n k k i i k k i x x L x y x x ==≠⎛⎫-= ⎪-⎝⎭∑∏编写出插值多项式程序;2、 给出插值多项式或分段三次插值多项式的表达式;三、实验要求对于给定的一元函数)(x f y =的n+1个节点值(),0,1,,j j y f x j n ==。
试用Lagrange 公式求其插值多项式或分段二次Lagrange 插值多项式。
数据如下:(1求五次Lagrange 多项式5L ()x ,计算(0.596)f ,(0.99)f 的值。
(提示:结果为(0.596)0.625732f ≈, (0.99) 1.05423f ≈)试构造Lagrange 多项式6,和分段三次插值多项式,计算的(1.8)f ,(6.15)f 值。
(提示:结果为(1.8)0.164762f ≈, (6.15)0.001266f ≈)四、实验过程1.进入matlab开发环境;2.根据实验内容和要求编写程序,程序如下所示,程序通过运用function 函数编写,生成.m文件。
调用时只需要在命令窗口调用y=Lagrange(A,input)就可以实现任意次数拉格朗日插值法求解。
function y=Lagrange(A,input)[a,b]=size(A);x=input;y=0;for j=1:aMj=1;Nj=1;for k=1:aif(k==j)continue;endMj=Mj*(x-A(k,1));Nj=Nj*(A(j,1)-A(k,1));endy=y+A(j,2)*Mj/Nj;end3.调试程序并运行程序;调用拉格朗日脚本文件对以上两个表格数据求解,表格一对应MATLAB向量A;表格二对应向量I。
数值分析及其MATLAB实现》第四篇书稿图形第十章图形
第十章常微分方程(组)求解图10–4 n =10,100时,1)0(,783=-+-=y x y dxdy 在[0,1]上的数值解和精确解图10–5a 40=n ,用向前欧拉公式和一、四阶泰勒逼近法及double 求初值问题的图图10–5b 40=n ,用向前欧拉公式和一、四阶泰勒逼近法及double 求初值问题的图图10–6 取80=n 时,用向前欧拉公式和一、四阶泰勒逼近法及double 求初值问题的图图10–7 取10010,=n 时,用向前欧拉公式求初值问题数值解和精确解的图形图10–8 取精度为110-时,用向前欧拉公式求初值问题和精确值的图形图10–10 取h=0.05时,用向后欧拉公式求初值问题的数值解和精确解的图形图10–11用梯形公式求解区间]2,0[上的初值问题1)0(,783=-+-=y x y dxdy图10–12 自适应梯形公式和向前欧拉公式求解初值问题1)0(,783=-+-=y x y dxdy图10–13用梯形和改进的欧拉公式求解1)0(,783=-+-=y x y dxdy的图形图10–14 用二阶龙格—库塔方法求初值问题图10–15 常用的三阶龙格-库塔公式求初值问题图10–16用常用的四阶龙格-库塔公式求初值问题图10–17 用二阶龙格-库塔方法计算d y/d x=2x/(3y2),y(0)=1的数值解图10–18a 精确解和用ode15s求数值解的图图10–18b 精确解和用ode45求数值解的图图10–19 用四阶龙格-库塔公式和四阶亚当斯显式公式求解常微分方程初值问题图10–20 用四阶龙格-库塔公式和四阶亚当斯隐式公式求解常微分方程初值问题图10–21 用改进的亚当斯方法求解常微分方程初值问题图10–22 米尔恩公式、改进的亚当斯方法及常用的四阶龙格-库塔公式求数值解图10–23 米尔恩方法、米尔恩公式、改进的亚当斯方法和龙格-库塔公式求解图10–24a 取21 h ,用汉明公式、米尔恩公式、改进的四阶亚当斯方法和常用的四阶龙格-库塔公式求初值问题图10–24b 取h =1/20时,用四种方法求初值问题图10–25 单环节的Adams预测-校正公式四阶Adams显式公式和四阶Adams隐式公式.图10–26图10–27例10.7.2用ode15s 计算 图10–28例10.7.3用RK 4z 计算图10–29微分方程07)21(5'4''=+--y y y y 的解图10–30方程组05'''=-xz y ,05'''=+xy z 的解图10–31方程组xy z cy z z y b y yz ax x 3),2(,'''--=--=+-=的解图10–33单摆运动初始角010)0(=θ,030的数值解和数值解图10–35 例10.8.1的数值解和精确解的图形图10–36 n =6 时数值解和精确解的图形 图10–37 n =36 时数值解和精确解的图形图10–38 0"=+y y 在 [0,4]上满足0)0(=y 和2)4(-=y 的数值解图10–39图10–40(注:本资料素材和资料部分来自网络,仅供参考。
(完整word版)matlab数值分析例题
1、 在MATLAB 中用Jacobi 迭代法讨论线性方程组,1231231234748212515x x x x x x x x x -+=⎧⎪-+=-⎨⎪-++=⎩(1)给出Jacobi 迭代法的迭代方程,并判定Jacobi 迭代法求解此方程组是否收敛。
(2)若收敛,编程求解该线性方程组.解(1):A=[4 -1 1;4 —8 1;-2 1 5] %线性方程组系数矩阵A =4 -1 1 4 -8 1 —2 1 5>> D=diag(diag(A))D =4 0 0 0 —8 0 0 0 5〉〉 L=—tril (A,-1) % A 的下三角矩阵L =0 0 0 —4 0 0 2 —1 0〉〉U=-triu(A,1)% A的上三角矩阵U =0 1 —10 0 —10 0 0B=inv(D)*(L+U)% B为雅可比迭代矩阵B =0 0.2500 —0。
25000.5000 0 0.12500。
4000 —0.2000 0〉〉r=eigs(B,1)%B的谱半径r =0。
3347 〈1Jacobi迭代法收敛。
(2)在matlab上编写程序如下:A=[4 —1 1;4 -8 1;—2 1 5];〉〉b=[7 —21 15]';>〉x0=[0 0 0]’;〉〉[x,k]=jacobi(A,b,x0,1e—7)x =2。
00004.00003。
0000k =17附jacobi迭代法的matlab程序如下:function [x,k]=jacobi(A,b,x0,eps)% 采用Jacobi迭代法求Ax=b的解%A为系数矩阵%b为常数向量%x0为迭代初始向量%eps为解的精度控制max1= 300; %默认最多迭代300,超过300次给出警告D=diag(diag(A));%求A的对角矩阵L=-tril(A,—1); %求A的下三角阵U=—triu(A,1); %求A的上三角阵B=D\(L+U);f=D\b;x=B*x0+f;k=1;%迭代次数while norm(x-x0)>=epsx0=x;x=B*x0+f;k=k+1;if(k〉=max1)disp(’迭代超过300次,方程组可能不收敛’);return;endend2、设有某实验数据如下:(1)在MATLAB中作图观察离散点的结构,用多项式拟合的方法拟合一个合适的多项式函数;(2)在MATLAB中作出离散点和拟合曲线图。
matlab数值分析实验报告
matlab数值分析实验报告Matlab数值分析实验报告引言数值分析是一门研究利用计算机进行数值计算和模拟的学科,它在科学计算、工程技术和金融等领域有着广泛的应用。
本次实验报告将介绍在Matlab环境下进行的数值分析实验,包括数值微分、数值积分和线性方程组求解等内容。
一、数值微分数值微分是通过数值方法计算函数的导数,常用的数值微分方法有前向差分、后向差分和中心差分。
在Matlab中,可以使用diff函数来计算函数的导数。
例如,对于函数f(x)=x^2,在Matlab中可以使用如下代码进行数值微分的计算:```matlabsyms x;f = x^2;df = diff(f, x);```二、数值积分数值积分是通过数值方法计算函数的定积分,常用的数值积分方法有梯形法则、辛普森法则和龙贝格积分法。
在Matlab中,可以使用trapz、quad和integral等函数来进行数值积分的计算。
例如,对于函数f(x)=sin(x),可以使用如下代码进行数值积分的计算:```matlabx = linspace(0, pi, 100);y = sin(x);integral_value = trapz(x, y);```三、线性方程组求解线性方程组求解是数值分析中的重要问题,常用的求解方法有高斯消元法和LU 分解法。
在Matlab中,可以使用\操作符来求解线性方程组。
例如,对于线性方程组Ax=b,可以使用如下代码进行求解:```matlabA = [1, 2; 3, 4];b = [5; 6];x = A\b;```四、实验结果与分析在本次实验中,我们分别使用Matlab进行了数值微分、数值积分和线性方程组求解的计算。
通过实验结果可以发现,Matlab提供了丰富的数值计算函数和工具,能够方便地进行数值分析的计算和求解。
数值微分的计算结果与解析解相比较,可以发现数值微分的误差随着步长的减小而减小,但是当步长过小时,数值微分的误差会受到舍入误差的影响。
MATLAB实验报告
MATLAB实践报告2016/2017学年第一学期专业:电气工程及其自动化班级:学号:姓名:2017年 2 月目录第1章绪论 (1)1.1 Matlab简介 (1)1.2 Matlab语言特点及优势 (1)1.2.1 语言特点 (1)1.2.2 优势 (2)1.3 Matlab的功能 (5)第2章Matlab实践任务 (6)2.1实验一Matlab环境语法、基本运算及绘图 (6)2.1.1实验目的 (6)2.1.2实验原理 (6)2.1.3实验内容 (6)2.2实验二Matlab数值运算 (10)2.2.1实验目的 (10)2.2.2实验原理 (10)2.2.3实验内容 (10)2.3实验三Matlab的符号计算 (19)2.3.1实验目的 (19)2.3.2实验内容 (19)2.4实验四Matlab基本编程方法 (23)2.4.1实验目的 (23)2.4.2实验内容 (23)第3章小结 (27)参考文献 (28)第1章绪论1.1 Matlab简介Matlab是“Matrix Laboratory”的缩写,意为“矩阵实验室”,是当今美国很流行的科学计算软件.信息技术、计算机技术发展到今天,科学计算在各个领域得到了广泛的应用.在许多诸如控制论、时间序列分析、系统仿真、图像信号处理等方面产生了大量的矩阵及其相应的计算问题.自己去编写大量的繁复的计算程序,不仅会消耗大量的时间和精力,减缓工作进程,而且往往质量不高.美国Mathwork软件公司推出的Matlab软件就是为了给人们提供一个方便的数值计算平台而设计的.Matlab是一个交互式的系统,它的基本运算单元是不需指定维数的矩阵,按照IEEE的数值计算标准(能正确处理无穷数Inf(Infinity)、无定义数NaN(not-a-number)及其运算)进行计算。
系统提供了大量的矩阵及其它运算函数,可以方便地进行一些很复杂的计算,而且运算效率极高。
Matlab命令和数学中的符号、公式非常接近,可读性强,容易掌握,还可利用它所提供的编程语言进行编程完成特定的工作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(1) 解题过程如下:
(1)MATLAB中创建复化梯形公式和复化辛普森公式的 M 文件:1)复化梯形公式文件:
function s=T_fuhua(f,a,b,n)
h=(b-a)/n;
s=0;
for k=1:(n-1)
x=a+h*k;
s=s+feval(f,x);
end
s=h*(feval(f,a)+feval(f,b))/2+h*s;
2)复化辛普森公式文件:
function s=S_fuhua(f,a,b,n)
h=0;
h=(b-a)./(2*n);
s1=0;
-5-
s2=0;
for k=1:n-1
x=a+h*2*k;
s1=s1+feval(f,x);
end
for k=1:n
x=a+h*(2*k-1);
s2=s2+feval(f,x);
end
s=h*(feval(f,a)+feval(f,b)+s1*2+s2*4)/3;
在MATLAB中输入:
f=inline('x/(4+x^2)');a=0;b=1;
%inline 构造内联函数对象
for n=2:10
s(n-1)=T_fuhua(f,a,b,n);s(n-1)=vpa(s(n-1),10);
%调用复化梯形公式,生成任意精度的数值
end
exact=int('x/(4+x^2)',0,1);exact=vpa(exact,10)
%求出积分的精确值
输出结果:exact =
.1115717755
s =
Columns 1 through 6
0.1088 0.1104 0.1109 0.1111 0.1113 0.1114
Columns 7 through 9
0.1114 0.1114 0.1115
在MATLAB中输入以下函数用以画出计算误差与 n 之间的曲线:
r=abs(exact-s);
n=2:10;
plot(double(n),double(r(n-1)))
得到结果如图所示:
(2)在 MATLAB中输入以下程序代码:
f=inline('x/(4+x^2)');a=0;b=1;n=9;
%inline 构造内联函数对象
t=T_fuhua(f,a,b,n);t=vpa(t,10)
s=S_fuhua(f,a,b,n);s=vpa(s,10)
%调用复化梯形和复化辛普森公式,生成任意精度的数值
exact=int('x/(4+x^2)',0,1);exact=vpa(exact,10)
%求出积分的精确值
计算结果:t =
.1114379370
s =
.1115717991
exact =
.1115717755
E1=|t-exact|=0.0001338385
E2=|s-exact|=0.0000000236
所以,两种方法计算所得的绝对误差:E1>E2
(1)中的两个结果 s 与t,两个函数的计算量基本相同,但是精度却有很大
差别:与精确值exact =.1115717755比较,复化梯形公式的结果t =.1114379370 只有三位有
效数字,而复化辛普森公式的结果 s =.1115717991 却有七位有效数字。
由此例子可以知道,复化辛普森公式比复化梯形公式的代数精度高,更适合于科学计
算与应用。
(2)用求定积分的函数int求积分的值:
在命令窗口中键入如下的命令:
sym x
int(sqrt(x),1,9)
I=vpa(int (sqrt(x),1,9))
回车后输出积分结果为:
I =17.3333
编写求复合辛普森公式的m文件如下:
function Simpson2
x=1:1/2:9;
f= sqrt(x);
a=1,b=9;
%f(1)=1;
h=(b-a)/4;
s=f(1)+f(17);
for k=1:1:8
s=s+4*f(2*k);
end
for k=2:1:8
s=s+2*f(2*k-1);
end
s=(h/6)*s
运行上述程序:s=17.3332
(2)用求定积分的函数int求积分的值:
在命令窗口中键入如下的命令:
sym x
int(sqrt(4-sin(x).^2),0,pi/6)
I=vpa(int (sqrt(4-sin(x).^2),0,pi/6))
回车后输出积分结果为:
I =1.03576
编写求复合辛普森公式的m文件如下:
function Simpson3
x=0:pi/96:pi/6;
f=sqrt(4-sin(x).^2);
a=0,b=pi/6;
%f(1)=1;
h=(b-a)/6;
s=f(1)+f(17);
for k=1:1:8
s=s+4*f(2*k);
end
for k=2:1:8
s=s+2*f(2*k-1);
end
s=(h/6)*s
运行上述程序:s= 1.0358 误差为0.00004
分析:本题是求解定积分的问题,可以采用复化的辛普森公式求解。
根据题中的条件可以计算出c,a的值。
解:用matlab求解才c,a如下:
a =(2R+H+h)/2 ,c=(H-h)/2. c=972.5, a=7782.5
用求定积分的函数int求积分值:
在命令窗口中键入如下的命令:
sym x
int(4*7782.5*sqrt(1-(972.5/7782.5)^2*sin(x).^2),0,pi/2)
I=vpa(int
(4*7782.5*sqrt(1-(972.5/7782.5)^2*sin(x).^2),0,pi/2))
回车后输出积分结果为:
I =48707.60111
下面编写M文件用复合的辛普森公式计算周长:
function Simpson4
e=7782.5 ; %因为下面要用到a,为了避免变量冲突,所以这里将
c=972.5; %a改成e了。
x=0:pi/16:pi/2;
f=4*e*sqrt(1-(c/e)^2*(sin(x)).^2);
a=0,b=pi/2;
h=(b-a)/4;
s=f(1)+f(9);
for k=1:1:4
s=s+4*f(2*k);
end
for k=2:1:4
s=s+2*f(2*k-1);
end
s=(h/6)*s
运行上述程序得出周长为:4.870743851190015e+004km.
用梯形求积分函数trapz求积分
在命令行输入下列程序:
d=pi/16;
x=0:d:pi/2;
T=d*trapz(4*7782.5*sqrt(1-(972.5/7782.5)^2*sin(x).^2))
回车后,可见 T= 4.870743851190014e+004km
用复化的梯形公式求解该题:
Matlab程序如下:
function t=tixing()%梯形法求积分
clear;
clc;
options={'积分下限a','积分上限b' ,'插入点相关的值n'};
topic='seting';
lines=1;
def={'0','1','1000'};
h=inputdlg(options,topic,lines,def);
a=eval(h{1});%积分下限
b=eval(h{2});%积分上限
n=eval(h{3});%子区间个数
%********************************************
f='func';%用f来调用被积函数func
h=(b-a)/(n);
t=0;
for k=1:1:n-1
x=a+h*(k);
t=t + feval(f,x);
end
format long
t=h*( feval(f,a) +feval(f,b)+2*t)/2;%s是梯形规则的总计
end
%定义被积函数func
function y=func(x)
y=4*7782.5*sqrt(1-(972.5/7782.5)^2*sin(x).^2);
end
运行上面的程序得周长为:4.870743851190014e+004。
由上述计算结果可知编程计算与用积分函数计算的结果是一样的。
与精确值之间的误差也在允许的范围内。
终上所述,卫星轨道的周长约为48707km.。