MATLAB上机作业(数值分析方法(上理))

合集下载

数值分析(王能超)matlab上机作业

数值分析(王能超)matlab上机作业

引论习题题目:用二分法求方程x^3-x-1=0在[1,2]内的近似根,要求误差不超过10-3程序:function [root,n]=dichotomy(a,b,eps)% dichotomy:二分法求根函数% f:带求解方程;[a,b]求解区间;n为二分次数if nargin<2 disp('输入变量不够');return;else if nargin>3 disp('输入变量过多');return;else nargin==2eps=1.0e-3;endendif a>b disp('区间输入错误')returnendc=(a+b)/2;if f(c)==0y=cn=1returnendn=0;while abs(b-a)>epsif f(a)*f(c)>0a=c;else b=c;endc=(a+b)/2;n=n+1;endroot=c;end运算结果:定义函数f如下:function [yy] = f(x)%定义了测试函数% x为输入变量yy=x^3-x-1;end在commond window中运行结果如下:>> [root,n]=dichotomy(1,2,1.0e-3)root =1.32471n =10习题一题目一给出概率积分2xxy e dx-=的数据表i 0 1 2 3xi 0.46 0.47 0.48 0.49yi 0.4846555 0.4937452 0.5027498 0.5116683 用二次插值计算,试问:(1)当x=0.472时该积分值等于多少?(2)当x为何值时积分值等于0.5?程序:function [ y,t ] = interpolation( X,Y,x )%拉格朗日插值函数%X为自变量数组,Y为函数值数组,x为插值点,t为插值基函数n=length(X);y=0;t=zeros(1,n);for i=1:nt(i)=1;for j=1:nif i==j continueendt(i)=t(i)*(x-X(j))/(X(i)-X(j));endy=y+t(i)*Y(i);endend运算结果:在commond window中运行结果如下:(1)当x=0.472时该积分值等于多少?>> clear>> X=[0.46 0.47 0.48 0.49];>> Y=[0.4846555 0.4937452 0.5027498 0.5116683];>> x=0.472;>> [ y,t ] = interpolation( X,Y,x )y =0.4956t =-0.0480 0.8640 0.2160 -0.0320(2)当x为何值时积分值等于0.5?>> clear>> X=[0.46 0.47 0.48 0.49];>> Y=[0.4846555 0.4937452 0.5027498 0.5116683];>> y=0.5;>> [ x,t ] = interpolation( Y,X,y )x =0.4769t =-0.0452 0.3356 0.7707 -0.0611题目二构造适合下列数据表的三次插值样条函数S(x):x -1 0 1 3 y -1 1 3 5 y' 6 1程序:function [ y,m ] =spline( X,Y,x,m1,mn )%样条插值函数%X,Y为输入的自变量、函数值数组;%x为插值点(数组),y为插值结果(数组),m为各插值节点的一阶导数值%m1为X(1)的一阶导数;mn为X(n)的一阶导数n=length(X);alpha=zeros(n-2,1);beta=zeros(n-2,1);for i=1:(n-2)alpha(i)=(X(i+1)-X(i))/(X(i+1)-X(i)+X(i+2)-X(i+1));beta(i)=3*((1-alpha(i))*(Y(i+1)-Y(i))/(X(i+1)-X(i))+alpha(i)*(Y(i+2)-Y(i+1))/(X(i+2)-X(i+1) ));endm=zeros(n,1);m(1)=m1;m(n)=mn;A=zeros((n-2),(n-2));B=zeros((n-2),1);for j=1:(n-2)A(j,j)=2;endfor k=2:(n-2)A(k,(k-1))=1-alpha(k);endfor l=1:(n-3)A(l,(l+1))=alpha(l);endB(1)=beta(1)-(1-alpha(1))*m1;B(n-2)=beta(n-2)-alpha(n-2)*mn;for p=2:(n-3)B(p)=beta(p);endm(2:(n-1))=A\B;s=length(x);y=zeros(1,s);for t=1:sr=1;for q=1:nif x(t)>=X(q)&&x(t)<=X(q+1)break;endr=r+1;endxx=(x(t)-X(r))/(X(r+1)-X(r));y(t)=(xx-1)^2*(2*xx+1)*Y(r)+xx^2*(-2*xx+3)*Y(r+1)+(X(r+1)-X(r))*xx*(xx-1)^2*m(r)+( X(r+1)-X(r))*xx^2*(xx-1)*m(r+1);endend运算结果:在commond window中运行结果如下:>> clear>> X=[-1 0 1 3];>> Y=[-1 1 3 5];>> m1=6;mn=1;>> x=-1:0.1:3;>> [ y,m ] =spline( X,Y,x,m1,mn );plot(x,y)求得结果如下(整理之后):其中红色数据表示插值节点将以上结果绘制成图,如下所示:习题二题目编写一通用型复化辛普生公式,能够对任意长度的等间距离散数据进行积分运算。

基于MATLAB的数值分析编程上机作业1

基于MATLAB的数值分析编程上机作业1
%输出:H。H是Householder初等变换阵,H*x=y,使得y的第k+1项到最后项全为零;
%引用函数:
% holder2;示例[p,u]=holder2(x);
%使用举例:
% H=holderk(x,k)
%Define variables:
% x-输入的n维向量;
% n-n维向量x的维数;
% p-Householder初等变换阵的系数ρ;
H(k:n,k:n)=eye(n-k+1)-p\u*u';%计算H(k:n,k:n)=I-p\u*u';
3、计算实例:
>> x=[2,0,2,1]'
x =
2
0
2
1
>> H=holderk(x,3)
H =
1.0000 0 0 0
0 1.0000 0 0
0 0 -0.8944 -0.4472
0 0 -0.4472 0.8944
%HOLDERK给定向量x≠0,数k,计算初等反射阵Hk,使HkX=Y,其中Y的第k+1项到最后项全为零;
%程序功能:函数holderk给定向量x≠0,数k,计算初等反射阵Hk,使HkX=Y,%程序功能:函数holder2给定向量x≠0,计算Householder初等变换阵的p,u;
%输入:n维向量x,数k;
>> H*x
ans =
2.0000
0
-2.2361
0
二、用Householder变换法求矩阵A的正交分解A=QR。
1、基本原理:
任一实列满秩的m×n矩阵A,可以分解成两个矩阵的乘积,即A=QR,其中Q是具有法正交列向量的m×n矩阵,R是非奇异的n阶上三角阵。

数值分析作业MATLAB

数值分析作业MATLAB

1.用二分法解方程 x-lnx=2 在区间【2 ,4】内的根方法: 二分法算法:f=inline('x-2-log(x)');a=2;b=4;er=b-a; ya=f(a);er0=.00001;while er>er0x0=.5*(a+b);y0=f(x0);if ya*y0<0b=x0;elsea=x0;ya=y0;enddisp([a,b]);er=b-a;k=k+1;end求解结果:>> answer13 43.0000 3.50003.0000 3.25003.1250 3.25003.1250 3.18753.1250 3.15633.1406 3.15633.1406 3.14843.1445 3.1484 3.1445 3.1465 3.1455 3.1465 3.1460 3.1465 3.1460 3.1462 3.1461 3.1462 3.1462 3.14623.1462 3.1462 3.1462 3.1462 3.1462 3.1462 最终结果为: 3.14622.试编写MATLAB 函数实现Newton 插值,要求能输出插值多项式。

对函数141)(2+=x x f 在区间[-5,5]上实现10次多项式插值。

Matlab 程序代码如下:%此函数实现y=1/(1+4*x^2)的n 次Newton 插值,n 由调用函数时指定 %函数输出为插值结果的系数向量(行向量)和插值多项式 算法:function [t y]=func5(n) x0=linspace(-5,5,n+1)'; y0=1./(1.+4.*x0.^2); b=zeros(1,n+1); for i=1:n+1 s=0; for j=1:i t=1; for k=1:iif k~=jt=(x0(j)-x0(k))*t;end;end;s=s+y0(j)/t;end;b(i)=s;end;t=linspace(0,0,n+1);for i=1:ns=linspace(0,0,n+1);s(n+1-i:n+1)=b(i+1).*poly(x0(1:i));t=t+s;end;t(n+1)=t(n+1)+b(1);y=poly2sym(t);10次插值运行结果:[b Y]=func5(10)b =Columns 1 through 4-0.0000 0.0000 0.0027 -0.0000Columns 5 through 8-0.0514 -0.0000 0.3920 -0.0000Columns 9 through 11-1.1433 0.0000 1.0000Y =- (7319042784910035*x^10)/147573952589676412928 + x^9/18446744073709551616 + (256*x^8)/93425 -x^7/1152921504606846976 -(28947735013693*x^6)/562949953421312 -(3*x^5)/72057594037927936 + (36624*x^4)/93425 -(5*x^3)/36028797018963968 -(5148893614132311*x^2)/4503599627370496 +(7*x)/36028797018963968 + 1b为插值多项式系数向量,Y为插值多项式。

数值分析上机题Matlab(东南大学)3

数值分析上机题Matlab(东南大学)3

0.22 0.24 0.26 0.28 0.30 0.32 0.34 0.36 0.38 0.40 0.42 0.44 0.46 0.48 0.50 0.52 0.54 0.56 0.58 0.60 0.62 0.64 0.66 0.68 0.70 0.72
152 139 128 119 110 103 96 90 85 80 76 72 68 65 62 59 56 53 51 49 47 45 43 41 39 38
========================================================================================================================
======================================================================================================================================================================== 习题 3_36 ======================================================================================================================================================================== Omega n x1 x2 x3 x4 x5 x6 x7 x8 x9
-0.71279 -0.71280 -0.71280 -0.71280 -0.71280 -0.71280 -0.71280 -0.71280 -0.71280 -0.71280 -0.71280 -0.71281 -0.71281 -0.71281 -0.71281 -0.71281 -0.71281 -0.71281 -0.71281 -0.71281 -0.71281 -0.71281 -0.71281 -0.71281 -0.71281 -0.71281

数值分析作业-matlab上机作业

数值分析作业-matlab上机作业

数值分析———Matlab上机作业学院:班级:老师:姓名:学号:第二章解线性方程组的直接解法第14题【解】1、编写一个追赶法的函数输入a,b,c,d输出结果x,均为数组形式function x=Zhuiganfa(a,b,c,d)%首先说明:追赶法是适用于三对角矩阵的线性方程组求解的方法,并不适用于其他类型矩阵。

%定义三对角矩阵A的各组成单元。

方程为Ax=d%b为A的对角线元素(1~n),a为-1对角线元素(2~n),c为+1对角线元素(1~n-1)。

% A=[2 -1 0 0% -1 3 -2 0% 0 -2 4 -3% 0 0 -3 5]% a=[-1 -2 -3];c=[-1 -2 -3];b=[2 3 4 5];d=[6 1 -2 1];n=length(b);u(1)=b(1);y(1)=d(1);for i=2:nl(i)=a(i-1)/u(i-1);%先求l(i)u(i)=b(i)-c(i-1)*l(i);%再求u(i)%A=LU,Ax=LUx=d,y=Ux,%Ly=d,由于L是下三角矩阵,对角线均为1,所以可求y(i)y(i)=d(i)-l(i)*y(i-1);endx(n)=y(n)/u(n);for i=(n-1):-1:1%Ux=y,由于U是上三角矩阵,所以可求x(i)x(i)=(y(i)-c(i)*x(i+1))/u(i);end2、输入已知参数>>a=[2 2 2 2 2 2 2];>>b=[2 5 5 5 5 5 5 5];>>c=[2 2 2 2 2 2 2];>>d=[220/27 0 0 0 0 0 0 0];3、按定义格式调用函数>>x=zhuiganfa(a,b,c,d)4、输出结果x=[8.147775166909105 -4.073701092835030 2.036477565178471 -1.017492820111148 0.507254485099400 -0.250643392637350 0.119353996493976 -0.047741598597591]第15题【解】1、编写一个程序生成题目条件生成线性方程组A x=b 的系数矩阵A 和右端项量b ,分别定义矩阵A 、B 、a 、b 分别表示系数矩阵,其中1(10.1;,1,2,...,)j ij i i a x x i i j n -==+=或1(,1,2,...,)1ij a i j n i j ==+-分别构成A 、B 对应右端项量分别a 、b 。

数值计算上机实习题目(matlab编程)

数值计算上机实习题目(matlab编程)

数值计算上机实习题目(matlab编程)非线性方程求根一、实验目的本次实验通过上机实习,了解迭代法求解非线性方程数值解的过程和步骤。

二、实验要求1、用迭代法求方程230x x e -=的根。

要求:确定迭代函数?(x),使得x=?(x),并求一根。

提示:构造迭代函数2ln(3)x ?=。

2、对上面的方程用牛顿迭代计算。

3、用割线法求方程3()310f x x x =--=在02x =附近的根。

误差限为410-,取012, 1.9x x ==。

三、实验内容1、(1)首先编写迭代函数,记为iterate.mfunction y=iterate(x)x1=g(x); % x 为初始值。

n=1;while(abs(x1-x)>=1.0e-6)&(n<=1000) % 迭代终止的原则。

x=x1;x1=g(x);n=n+1;endx1 %近似根n %迭代步数(2)后编制函数文件?(x),记为g.mfunction y=g(x)y=log(3*x.^2);(3)设初始值为0、3、-3、1000,观察初始值对求解的影响。

将结果记录在文档中。

>>iterate(0)>>iterate(3) 等等2、(1)首先编制牛顿迭代函数如下,记为newton.mfunction y=newton(x0)x1=x0-fc(x0)/df(x0); % 牛顿迭代格式n=1;while(abs(x1-x0)>=1.0e-6)&(n<=1000000) % 迭代终止的原则。

x0=x1;x1=x0-fc(x0)/df(x0);n=n+1;endx1 %近似根n %迭代步数(2)对题目中的方程编制函数文件,记为fc.mfunction y=fc(x)y=3*x.^2-exp(x)编制函数的导数文件,记为df.mfunction y=df(x)y=6*x-exp(x)(3)在MATLAB 命令窗计算,当设初始值为0时,newton(0);给定不同的初始值,观察用牛顿法求解时所需要的迭代步数,并与上面第一题的迭代步数比较。

Matlab第一次上机作业

Matlab第一次上机作业

输入: >>tic, n=9;[u,k]=xsj(n), toc,surf(u)
计算Байду номын сангаас果如下:
u=
0 0 0 0 0 0 0 0 0 0 0 0 0.0256 0.0413 0.0508 0.0560 0.0577 0.0560 0.0508 0.0413 0.0256 0 0 0.0413 0.0686 0.0859 0.0955 0.0986 0.0955 0.0859 0.0686 0.0413 0 0.0508 0.0859 0.1088 0.1216 0.1258 0.1216 0.1088 0.0859 0.0508 0 0 0.0560 0.0955 0.1216 0.1364 0.1412 0.1364 0.1216 0.0955 0.0560 0 0 0.0577 0.0986 0.1258 0.1412 0.1462 0.1412 0.1258 0.0986 0.0577 0 0 0.0560 0.0955 0.1216 0.1364 0.1412 0.1364 0.1216 0.0955 0.0560 0 0 0.0508 0.0859 0.1088 0.1216 0.1258 0.1216 0.1088 0.0859 0.0508 0 0 0.0413 0.0686 0.0859 0.0955 0.0986 0.0955 0.0859 0.0686 0.0413 0 0 0.0256 0.0413 0.0508 0.0560 0.0577 0.0560 0.0508 0.0413 0.0256 0 0 0 0 0 0 0 0 0 0 0 0 0
程序一: function [u,k]=xsbj(n) % xsbj:用块 Jacobi 迭代法求解线性方程组 A*u=f % u:方程组的解; k 迭代次数; n:非边界点数 % a:方程组系数矩阵 Aii 的下对角线元素;b:方程系数矩阵 Aii 的主对角线元素 % c:方程组系数矩阵 Aii 的上对角线元素;d:追赶法所求方程的右端向量 % e:允许误差界;er:迭代误差 f=2*1/(n+1)^(2)*ones(n+2,n+2); a=-1*ones(1,n);b=4*ones(1,n);c=-1*ones(1,n);u=zeros(n+2,n+2);e=0.000000001; for k=1:2000 er=0; ub=u; for j=2:n+1 d(1:n)=f(2:n+1,j)+ub(2:n+1,j-1)+ub(2:n+1,j+1); x=zg(a,b,c,d); u(2:n+1,j)=x'; er=er+norm(ub(:,j)-u(:,j),1); end if er/n^2<e,break; end end 程序二: function x=zg(a,b,c,d) % zg:用追赶法求解线性方程组 n=length(b); % LU 分解 u(1)=b(1); for k=2:n if u(k-1)==0,D=0,return; end l(k)=a(k)/u(k-1); u(k)=b(k)-l(k)*c(k-1); end % 追赶法求解之追过程,求解 Ly=d y(1)=d(1); for k=2:n y(k)=d(k)-l(k)*y(k-1); end % 追赶法求解之追过程,求解 Ux=y if u(n)==0,D=0,return;end x(n)=y(n)/u(n); for k=n-1:-1:1 x(k)=(y(k)-c(k)*x(k+1))/u(k); end 输入:

MATLAB上机内容及作业

MATLAB上机内容及作业

MATLAB上机内容及作业无约束优化求解函数fminsearch和fminunc求解无约束非线性优化问题的函数包括fminsearch函数和fminunc函数。

fminsearch和fminunc的函数相同,但fminunc函数可以在最优解处获得目标函数的梯度和Hessian矩阵值。

无约束优化数学模型为:minf(x)x∈rn求解无约束非线性优化问题的步骤为:第一步:先写目标函数的m文件;第二步是在命令窗口中调用相应的优化函数。

1.Fminsearch函数调用格式为[x,fval]=fminsearch(@myfun,x0)输出参数的含义:x:返回最优解的设计变量值;fval:在最优设计变量值时,目标函数的最小值;Exitflag:返回算法的终止标志。

在下列情况下,>0表示算法收敛到最优解;=0表示算法已达到最大迭代次数;<0表示算法不收敛。

output:返回优化算法信息的一个数据结构,有以下信息:输出Iteration表示迭代次数output Algorithm表示算法output Funccount表示函数求值的次数输入参数的含义:@Myfun:目标函数的m文件,前面加“@”或表示为“Myfun”,可以任意命名;X0:调用优化函数时,需要先给设计变量赋值;2、fminunc函数的调用格式[x,fval]=fminunc(@myfun,x0)grad:返回目标函数在最优解处的梯度信息;hessian:返回目标函数在最优解处的hessian矩阵信息。

其余含义同上。

3、实例已知某一优化问题的数学模型为:Minf(x)=3x12+2x1x2+x22x∈ r n由MATLAB程序编写的代码为:第一步:首先编写目标函数的.m文件,并保存为examplefsearch.m文件(先单击file菜单,后点击new命令中的m―file,即可打开m文件编辑窗口进行代码的编辑,在英文状态下输入程序代码),代码为:函数f=examplefsearch(x)f=3*x(1)^2+2*x(1)*x(2)+x(2)^2;1.0e-0.08*-0.79140.2260%分别为x1和x2的最优点的值(近似为0)Fval=1.5722e-016%,对应于最佳优势的最佳目标函数值(约为0)4。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

解得 x=0.8776 牛顿法求解:
建立第二个函数文件 function f2=f2(x) f2=15*x^2+12*x;
计算代码
x(1)=-1.7;jingdu=0.002; x(2)=x(1)-(f(x(1))/f2(x(1)));n=2;
while abs(x(n)-x(n-1))>jingdu x(n+1)=x(n)-(f(x(n))/f2(x(n))); n=n+1; end x
自定义计算文件
X = [0 pi/6 pi/4 pi/3 pi/2]; Y = [0 0.5 0.7071 0.8660 1]; x = linspace(0,pi,50); M = 1; [y, R] = lagrange(X, Y, x, M); y1 = sin(x); %画图 errorbar(x,y,R,'.k') hold on plot(X, Y, 'or', x, y, '*r', x, y1, '-b'); axis([-0.5,3.5,-1,1.2]);%把坐标边界加大一点,不然坐标点遮 住坐标轴了
end
A(i)=x^(i-1);
% 计算 G for j=1:n+1 for i=1:n+1 for k=1:m+1 B(k)=W(k)*subs(A(i),x,k)*subs(A(j),x,k); end G(i,j)=sum(B); end end G % 计算 d for j=1:n+1 for k=1:m+1 B(k)=W(k)*F(k)*subs(A(j),x,k); end d(j)=sum(B); end d=d' % 求出拟合曲线的系数 G=G^-1; C=G*d; S=0; for i=1:n+1 S=S+C(i)*x^(i-1); end % 画图 scatter(X,F,'*b'); hold on; ezplot(S,[0,6]); xlabel('x') ylabel('y') title('拟合曲线') end
end C = A(n, n); q1 = abs(q1*(z-X(n))); for k = (n-1):-1:1 C = conv(C, poly(X(k))); d = length(C); C(d) = C(d) + A(k,k);%在最后一维,也就是常数项加 上新的差商 end y(t) = polyval(C,z);%向量 y 是向量 x 处的插值,误差限 R,n 次牛顿插值多项式 L 及其系数向量 C end L = poly2sym(C); R(t) = M * q1 / c1;
上述代码插值部分和数值积分均参考自 CSDN 的几位知名博主, 大家可以自行查找。本文档旨在分享我的数值分析上机作业,不 做商用,故不与人产生任商业用途,转载请勿商用。想要系统 学习 matlab 软件,推荐飞天小苗苗的博客以及优酷她的教学视 频。
《数值计算方法》 上机报告
班级:机械*班 学号:171441**** 姓名:范涛
目 录 1. 非线性方程的数值解法 1.1 问题描述 1.2 基本原理和步骤 1.3 程序源代码 1.4 计算结果及分析 1.5 小结 2. 函数插值与曲线拟合 2.1 问题描述 2.2 基本原理和步骤 2.3 程序源代码 2.4 计算结果及分析 2.5 小结 3. 数值积分 3.1 问题描述 3.2 基本原理和步骤 3.3 程序源代码 3.4 计算结果及分析 3.5 小结
解得 x=0.8776 割线法求解: 计算代码
x(1)=-1.7;jingdu=0.002; x(2)=x(1)-(f(x(1))/f2(x(1)));n=2; while abs(x(n)-x(n-1))>jingdu x(n+1)=x(n)-(f(x(n))/(f(x(n))-f(x(n-1))))*(x(n)-x( n-1)); n=n+1; end x
解得 x=0.8776 1.4 计算结果分析 各种方法只要能够求解的情况下,多次求解就可以无限逼近所求解, 但是迭代法必须要求在一定范围内有极限, 而割线法要求一定范围内 必须为可切曲线,故有局限性 2.函数插值与曲线拟合 2.1 问题描述
用 Lagrange 插值来求 sinx 在某点的值,并估计其误差,已知 sin0° = 0, sin30° = 0.5, sin45° = 0.7071, sin60° = 0.8660, sin90° = 1.
解得 ans =18.849555921538759 复化三点式(辛普森公式)
function Sn = Sn(a,b,n) format long h = (b-a)/n; sum1 = 0; sum2 = 0; for i = 0:n-1 sum1 = sum1 + f(a+(i+1/2).*h); end for j = 1:n-1 sum2 = sum2 + f(a+j.*h); end Sn = h/6*(f(a)+4*sum1+2*sum2+f(b));
割线法:是利用牛顿迭代法的思想,在根的某个领域内,函数有直至 二阶的连续导数,并且不等于 0,则在领域内选取初值 x0,x1,迭代 均收敛。 1.3 程序源代码 建立被求解函数文件 function f=f(x) f=5*x^3+6*x^2-8; 二分法计算代码: a=-2;b=1;jingdu=0.002 while abs(a-b)>jingdu x=(a+b)/2;
c1 = c1 * j;
自定义计算文件
X = [0 pi/6 pi/4 pi/3 pi/2];%X 是 n+1 个节点(x_i,y_i)(i = 1,2, ... , n+1)横坐标向量,Y 是纵坐标向量 Y = [0 0.5 0.7071 0.8660 1]; x = linspace(0,pi,50); %x 是以向量形式输入的 m 个插值点,M
1.非线性方程的数值解法 1.1 令 f(x)=5*x^3+6*x^2-8=0,求根,x∈[-2,1],ε=0.002 1.2 基本原理和步骤 二分法:将[a,b]分为相等的 2 个小区间,计算小区间端点函数值, 找出新的有根区间。重复上述过程,直到找到满足精度要求的根。 迭代法:是取 x0 之后,在这个基础上,找到比 x0 更接近的方程的 跟,一步一步迭代,从而找到更接近方程根的近似跟。 牛顿法: 把非线性函数 f(x)=0 在 x0 处展开成泰勒级数取其线性 部分,作为非线性方程的近似方程, 则有 设 ,则其解为
legend('误差','样本点','拉格朗日插值估算','sin(x)'); title('拉格朗日插值法拟合函数');
牛顿插值法: 定义牛顿差值多项式函数
function[y,R,A,C,L] = newton(X,Y,x,M) n = length(X); m = length(x); for t = 1 : m z = x(t); A = zeros(n,n);%差商的矩阵 A A(:,1) = Y'; s = 0.0; p = 1.0; q1 = 1.0; c1 = 1.0; for j = 2 : n for i = j : n A(i,j) = (A(i,j-1) A(i-1,j-1))/(X(i)-X(i-j+1)); end q1 = abs(q1*(z-X(j-1)));
解得 ans =18.849555921538759 3.4 计算结果及分析 原函数需要多次积分能得到不定积分,应该是我的五次方对于我 的区间选择的影响较大,使得五次方之后最终结果前面的有效数 字接近,尝试把要求的函数降次积分之后返现结果误差较大,是 题目的问题,程序正确。 复化 Cotes 公式的代数精度最高, 复化 Simpson 其次, 复化梯形 公式的代数精度最低
2.2 基本原理和步骤 2.3 程序源代码 拉格朗日插值法: 拉格朗日插值函数文件
function [y, R] = lagrange(X, Y, x, M) n = length(X);m = length(x); for i = 1:m z = x(i); s = 0.0; for k = 1:n p = 1.0; q1 = 1.0; c1 = 1.0; for j = 1:n if j~=k p = p * (z - X(j)) / (X(k) - X(j)); end q1 = abs(q1 * (z - X(j))); c1 = c1 * j; end s = p * Y(k) + s; end y(i) = s; R(i) = M * q1 / c1; end
解得 ans =18.849555921538766 复化五点式(柯特斯公式)
function Cn = Cn(a,b,n) format long h = (b-a)/n;
sum1 = 0; sum2 = 0; for i = 0:n-1 sum1 = sum1 + 32*f(a+(i+1/4).*h)+12*f(a+(i+1/2).*h)+32*f(a+(i+3/4). *h); end for j = 1:n-1 sum2 = sum2 + 14*f(a+j.*h); end Cn = h/90*(7*f(a)+sum1+sum2+7*f(b));
命令行输入: X = [0 pi/6 pi/4 pi/3 pi/2];
F = [0 0.5 0.7071 0.8660 1]; W=[1 1 1 1 1]; S=mypolyfit(X,F,W,4,3)
相关文档
最新文档