matlab(迭代法-牛顿插值)Word版

实验报告内容:
一:不动点迭代法解方程
二:牛顿插值法的MATLAB实现
完成日期:2012年6月21日星期四
数学实验报告一
日期:2012-6-21
所以,确定初值为x0=1
二:不断迭代
算法:
第一步:将f(x0)赋值给x1
第二步:确定x1-x0的绝对值大小,若小于给定的误差值,则将x1当做方程的解,否则回到第一步
编写计算机程序:
clear
f=inline('0.5*sin(x)+0.4');
x0=1;
x1=f(x0);
k=1;
while abs(x1-x0)>=1.0e-6
x0=x1;
x1=f(x0);
k=k+1;
fprintf('k=%.0f,x0=%.9f,x1=%.9f\n',k,x0,x1)
end
显示结果如下:
k=2,x0=0.820735492,x1=0.765823700
k=3,x0=0.765823700,x1=0.746565483
k=4,x0=0.746565483,x1=0.739560873
k=6,x0=0.736981783,x1=0.736027993 k=7,x0=0.736027993,x1=0.735674699 k=8,x0=0.735674699,x1=0.735543758 k=9,x0=0.735543758,x1=0.735495216 k=10,x0=0.735495216,x1=0.735477220 k=11,x0=0.735477220,x1=0.735470548 k=12,x0=0.735470548,x1=0.735468074 k=13,x0=0.735468074,x1=0.735467157 >>。

以下是程序运行截图:
数学实验报告之二
日期:2012-6-21
【编写主程序】
>> clear;clf
>> x=0:0.1:5;
>> y=sin(x);
>> [yhat,dy]=newtint(x,y,0.59)运行结果如下
yhat =
0.5564
dy =
-7.2731e-013
>>
所以:函数在0.59处的近似值为0.5564,误差为dy = -7.2731e-013
【实验结果】
函数在0.59处的近似值为0.5564
【误差分析】
误差为dy = -7.2731e-013
【心得体会】
总算明白了计算机解数学题目的原理是什么了,以前不懂,看到计算机解出一个一个的数学题就觉得非常神奇,老师担心人类不如计算机聪明担心有一天人类会被计算机取代。

但是,我现在不这样想了,计算机其实非常傻,只会按照人类给它设定的步骤去走,不是计算机神奇,而是人
(注:可编辑下载,若有不当之处,请指正,谢谢!)。

合集下载

牛顿插值MATLAB算法

牛顿插值MATLAB算法

MATLAB程序设计期中作业——编程实现牛顿插值成员:刘川(P091712797)签名_____汤意(P091712817)签名_____王功贺(P091712799)签名_____班级:2009信息与计算科学学院:数学与计算机科学学院日期:2012年05月02日牛顿插值的算法描述及程序实现一:问题说明在我们的实际应用中,通常需要解决这样的问题,通过一些已知的点及其对应的值,去估算另外一些点的值,这些数据之间近似服从一定的规律,于是,这就引入了插值法的思想。

插值法是利用函数f (x)在某区间中若干点的函数值,作出适当的特定函数,在这些点上取已知值,在区间的其他点上用这特定函数的值作为函数f (x)的近似值。

如果这特定函数是多项式,就称它为插值多项式。

利用插值基函数很容易得到拉格朗日插值多项式,公式结构紧凑,在理论分析中甚为方便,但当插值节点增减时全部插值基函数均要随之变化,整个公式也将发生变化,这在实际计算中是很不方便的,为了克服这一缺点,提出了牛顿插值。

二:算法分析newton 插值多项式的表达式如下:010011()()()()()n n n N x c c x x c x x x x x x -=+-+⋅⋅⋅+--⋅⋅⋅-其中每一项的系数c i 的表达式如下:12011010[,,,][,,,][,,,]i i i i i f x x x f x x x c f x x x x x -⋅⋅⋅-⋅⋅⋅=⋅⋅⋅=- 即为f (x)在点01,,,i x x x ⋅⋅⋅处的i 阶差商,([]()i i f x f x =,1,2,,i n =),由差商01[,,,]i f x x x ⋅⋅⋅的性质可知: ()01001[,,,]()i i i j j k j k k j f x x x f x x x ==≠⋅⋅⋅=-∑∏ 牛顿插值的程序实现方法:第一步:计算[][][][]001012012,,,,,,,n f x f x x f x x x f x x x x 、、、、。

拉格朗日插值和牛顿插值matlab

拉格朗日插值和牛顿插值matlab

拉格朗⽇插值和⽜顿插值matlab1. 已知函数在下列各点的值为0.20.40.60.8 1.00.980.920.810.640.38⽤插值法对数据进⾏拟合,要求给出Lagrange插值多项式和Newton插值多项式的表达式,并计算插值多项式在点的值。

程序:x=[0.2 0.4 0.6 0.8 1.0];y=[0.98 0.92 0.81 0.64 0.38];x0=[0.2 0.28 0.44 0.76 1 1.08];[f,f0]=Lagrange(x,y,x0)function [f,f0] = Lagrange(x,y,x0)%求已知数据点的Lagrange插值多项式f,并计算插值多项式f在数据点x0的函数值f0syms t;n = length(x);f = 0.0;for i = 1:nl = y(i);for j = 1:i-1l = l*(t-x(j))/(x(i)-x(j));end;for j = i+1:nl = l*(t-x(j))/(x(i)-x(j));end;f = f + l;simplify(f);if(i==n)f0 = subs(f,'t',x0);f = collect(f);f = vpa(f,6);endend结果:>> Untitled3f =- 0.520833*t^4 + 0.833333*t^3 - 1.10417*t^2 + 0.191667*t + 0.98f0 =[ 49/50, 60137/62500, 56377/62500, 42497/62500, 19/50, 15017/62500]⽜顿:%y为对应x的值,A为差商表,C为多项式系数,L为多项式%X为给定节点,Y为节点值,x为待求节点function[y,A,C,L] = newton(X,Y,x,M)n = length(X);m = length(x);for t = 1 : mz = x(t);A = zeros(n,n);A(:,1) = Y';s = 0.0; p = 1.0; q1 = 1.0; c1 = 1.0;for j = 2 : nfor i = j : nA(i,j) = (A(i,j-1) - A(i-1,j-1))/(X(i)-X(i-j+1));endq1 = abs(q1*(z-X(j-1)));c1 = c1 * j;endC = A(n, n); q1 = abs(q1*(z-X(n)));for k = (n-1):-1:1C = conv(C, poly(X(k)));d = length(C);C(d) = C(d) + A(k,k);endy(t) = polyval(C,z);endL = poly2sym(C);x=[0.2 0.4 0.6 0.8 1.0];y=[0.98 0.92 0.81 0.64 0.38];x0=[0.2 0.28 0.44 0.76 1 1.08];m=1;[y,A,C,L]=newton(x,y,x0,m)结果:y =0.9800 0.9622 0.9020 0.6800 0.3800 0.2403A =0.9800 0 0 0 00.9200 -0.3000 0 0 00.8100 -0.5500 -0.6250 0 00.6400 -0.8500 -0.7500 -0.2083 00.3800 -1.3000 -1.1250 -0.6250 -0.5208C =-0.5208 0.8333 -1.1042 0.1917 0.9800L =- (25*x^4)/48 + (5*x^3)/6 - (53*x^2)/48 + (23*x)/120 + 49/502. 在区间上分别取,⽤两组等距节点对Runge函数作多项式插值(Lagrange插值和Newton插值均可),要求对每个值,分别画出插值多项式和函数的曲线。

牛顿插值法matlab

牛顿插值法matlab

牛顿插值法matlab
牛顿插值法是一种基于牛顿多项式的插值方法,它要求给定的插值点必须满足某种差分公式,且牛顿插值法的误差收敛速度非常快。

牛顿插值法的Matlab实现分为以下几步:
1.给定插值点和插值函数的值。

2.确定多项式的阶数n。

3.根据牛顿插值法,构造一个n×n矩阵A,其中Aij等于第i个点处对x的第j次导数。

4.构造一个n×1矩阵B,其中Bi等于第i个点处的函数值。

5.通过消元法求解矩阵方程组Ax=B,从而求出牛顿插值法的系数。

6.应用求出的系数,构造出牛顿插值多项式。

7.根据牛顿插值多项式进行插值计算。

matlab(迭代法_牛顿插值)

matlab(迭代法_牛顿插值)

实验报告内容:一:不动点迭代法解方程二:牛顿插值法的MA TLAB实现完成日期:2012年6月21日星期四数学实验报告一日期:2012-6-21hold on>> fplot(g,[-2,2])>> fplot(f,[-2,2])>> hold off>> grid输出结果如下所示:所以,确定初值为x0=1二:不断迭代算法:第一步:将f(x0)赋值给x1第二步:确定x1-x0的绝对值大小,若小于给定的误差值,则将x1当做方程的解,否则回到第一步编写计算机程序:clearf=inline('0.5*sin(x)+0.4');x0=1;x1=f(x0);k=1;while abs(x1-x0)>=1.0e-6x0=x1;x1=f(x0);k=k+1;fprintf('k=%.0f,x0=%.9f,x1=%.9f\n',k,x0,x1)end显示结果如下:k=2,x0=0.820735492,x1=0.765823700k=3,x0=0.765823700,x1=0.746565483k=4,x0=0.746565483,x1=0.739560873k=5,x0=0.739560873,x1=0.736981783k=6,x0=0.736981783,x1=0.736027993k=7,x0=0.736027993,x1=0.735674699k=8,x0=0.735674699,x1=0.735543758k=9,x0=0.735543758,x1=0.735495216k=10,x0=0.735495216,x1=0.735477220k=11,x0=0.735477220,x1=0.735470548k=12,x0=0.735470548,x1=0.735468074k=13,x0=0.735468074,x1=0.735467157>>。

牛顿迭代法Matlab程序

牛顿迭代法Matlab程序

牛顿迭代法Matlab程序(带下山因子)本文程序可用于求解线性和非线性方程组,在使用牛顿迭代法的同时,加入了下山因子,加入下山因子后,对于初值的选取更为宽泛。

使用方法:请将本文function所定义的函数存为m 文件,将matlab路径改为存储newton函数的路径,然后参照本文例子的格式定义变量、表达式、初值、收敛阈值、迭代次数后,输入X=newton(f,x,x0,esp,N) 即可求解。

%%%%%%%%%%%%%%%%%%%% 例子syms x1 x2 x3%定义变量名称f1=x1+x2+x3+3;f2=2*x1-x2-x3;f3=x1+2*x2-2*x3-3;%定义方程表达式(方程全都移到等号左边的表达式)f=[f1;f2;f3];x=[x1;x2;x3];x0=[0;0;0];%设定初值esp=[0.00001;0.00001;0.00001];%阈值N=1000;%迭代次数X=newton(f,x,x0,esp,N)%求解%%%%真值为-1 0 -2 %%%%%%%%%%%%%%%%%%%%function x1=newton(f,x,x0,esp,N)%此函数用于解非线性方程,方法为牛顿下山法。

R=jacobian(f,x);ph=size(f,1);ty(1:ph,1)=1;coo=1;while abs(coo-1)<1e-6%这代表coo==1 coo=0;R1=subs(R,x,x0);%%%f1=subs(f,x,x0);x1=x0-ty.*(R1\f1);f11=subs(f,x,x1);f12=double(f1);f112=double(f11);for i=1:size(f12,1);j=i;clcjif abs(f112(i))>abs(f12(i))ty(i)=ty(i)/2;coo=1;endendendfor i=1:NclciR1=subs(R,x,x0);%%%f1=subs(f,x,x0);x1=x0-ty.*(R1\f1);xx=abs(x1-x0);if xx<espbreakelsex0=x1;endend。

MATLAB牛顿迭代法

MATLAB牛顿迭代法

1。

定义函数function y=f(x)y=f(x);%函数f(x)的表达式endfunction z=h(x)z=h(x);%函数h(x)的表达式end2.主程序x=X;%迭代初值i=0;%迭代次数计算while i〈= 100%迭代次数x0=X-f(X)/h(X);%牛顿迭代格式if abs(x0—X)>0。

01;%收敛判断X=x0;else breakendi=i+1;endfprintf(’\n%s%.4f\t%s%d’,'X=’,X,’i=’,i) %输出结果牛顿迭代法(matlab)来源:徐力的日志背景:牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(Newton—Raphson m ethod),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法.设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0)+f’(x0)(x—x0),求出L与x轴交点的横坐标x1 = x 0—f(x0)/f'(x0),称x1为r的一次近似值。

过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐标x2 = x1—f(x1)/f'(x1),称x2为r的二次近似值。

重复以上过程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f’(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式.现用牛顿迭代法(matlab)求方程x^3-2x-1=0的根(—1)。

主函数:function[x,k]=Newtondd(f,x0,e)%%牛顿迭代法,求f(x)=0在某个范围内的根。

%%f为f(x),x0为迭代初值,e为迭代精度。

k为迭代次数x_a=x0;x_b=x_a—subs(f,x_a)/subs(diff(f),x_a);k=1;while abs(x_a-x_b)〉e,k=k+1;x_a=x_b;x_b=x_a-subs(f,x_a)/subs(diff(f),x_a); endx=x_b;运行:>〉syms x;>> f=(x^3-2*x—1)。

牛顿插值法matlab程序例题

牛顿插值法是一种常用的数值分析方法,用于构造一个多项式函数,以便在给定的数据点上进行插值。

这个主题在数学和工程领域中有着广泛的应用,特别是在数据拟合和函数逼近方面。

牛顿插值法的核心思想是通过不断地添加新的数据点来构造一个多项式,并利用已知数据点来确定多项式的系数,从而实现对未知数据点的插值预测。

在Matlab中,实现牛顿插值法并不困难,我们可以利用已有的函数和工具来简化计算过程。

下面,我们将通过一个具体的例题来讲解如何使用Matlab编写牛顿插值法的程序,并分析其结果。

我们需要明确牛顿插值法的数学原理。

给定n个互不相同的节点\(x_0, x_1, ... , x_n\),以及在这些节点上的函数值\(f(x_0), f(x_1), ... , f(x_n)\),我们希望构造一个n次插值多项式p(x),满足p(x_i) = f(x_i),i=0,1,...,n。

牛顿插值多项式的一般形式为:\[p(x) = a_0 + a_1(x - x_0) + a_2(x - x_0)(x - x_1) + ... + a_n(x -x_0)(x - x_1)...(x - x_{n-1})\]其中,\[a_i\]表示插值多项式的系数。

通过牛顿插值法的迭代过程,可以逐步求解出这些系数,进而得到插值多项式的表达式。

接下来,我们将以一个具体的例题来演示如何在Matlab中实现牛顿插值法。

假设我们有如下的数据点和函数值:\(x = [1, 2, 3, 4]\)\(f(x) = [1, 4, 9, 16]\)我们希望利用这些数据点来构造一个插值多项式,并在给定的区间上进行插值计算。

在Matlab中,可以通过interp1函数来进行插值计算,该函数支持多种插值方法,包括牛顿插值法。

下面是一个简单的Matlab程序示例:```matlabx = [1, 2, 3, 4];y = [1, 4, 9, 16];xi = 2.5;yi = interp1(x, y, xi, 'spline');disp(['在x=',num2str(xi),'处的插值结果为:',num2str(yi)]);```在这段代码中,我们首先定义了给定的数据点x和对应的函数值y,然后利用interp1函数对x=2.5处的插值结果进行计算。

牛顿法matlab程序及例题

牛顿法matlab程序及例题牛顿法是一种求解非线性方程的优秀方法,其基本思想是利用切线逼近非线性方程的根,逐步逼近准确解。

下面我们介绍牛顿法的matlab程序及例题。

【程序】function [x_iter,k]=newton(f,df,x0,tol,maxit)%牛顿法%输入:f-目标函数,df-目标函数的导函数,x0-初始值,tol-误差限,maxit-最大迭代次数%输出:x_iter-迭代结果,k-迭代次数k=0;x_iter=x0;err=tol+1;while(err>tol && k<maxit)x=x_iter;x_iter=x-f(x)/df(x);err=abs(x_iter-x);k=k+1;endif(k==maxit)fprintf('未收敛');elsefprintf('迭代次数:%d',k);end【例题】example:求解非线性方程f(x)=x^3-5x^2+3x+7=0,初始值为x0=2,精度为1e-6。

解法:首先求导得df(x)=3x^2-10x+3,然后代入程序:>> f=@(x)x^3-5*x^2+3*x+7;>> df=@(x)3*x^2-10*x+3;>> [x_iter,k]=newton(f,df,2,1e-6,100);>> x_iterans =4.3793>> kk =5故该非线性方程的根为x=4.3793,迭代次数为5次。

【总结】通过以上例题,我们可以发现牛顿法是一种十分有效的求解非线性方程的方法,其程序简洁高效,对于复杂的非线性方程求解也能得到较好的结果。

因此在实际应用中,我们可以采用牛顿法来求解非线性方程,提高计算效率和精度。

(完整word版)牛顿法的MATLAB实现

牛顿法的MATLAB实现摘要:性能学习是神经网络中的一类很重要的学习规则,其旨在找到一个最优点来提高网络的性能。

牛顿法是一种基于二阶泰勒级数的算法,逐步迭代来实现进一步的极小化,最后找到最优点。

本文采用MATLAB 编程来实现牛顿法,并通过具体的例子进行分析计算。

关键字:牛顿法;MATLABRealise Newton’s Method by using MatlabAbstract: Performance learning is one of important learning rules in neural network ,which aims to find an optimal point to improve the performance of neural network.Newton's method is a kind of algorithm which based on second-order Taylor series, the iteration step by step to achieve further minimization, and finally find the most advantage.In this paper,by using the matlab, Newton's method is easily to realize and it also gives a demonstration to analyse and calculation.Key words: Newton’s method; MATLAB0 引言神经网络作为一门新兴的学科,在短短的数十年内已经被运用于多种学科领域,大量的有关神经网络机理、模型以及算法分析等方面的文章如雨后春笋般涌现。

MATLAB是一种强大的工程计算和仿真软件,其基本上可以实现神经网络的各种设计方法和算法。

matlab牛顿迭代法求方程组的根

MATLAB(矩阵实验室)是一种用于数学计算、绘图等的高度工程化的软件评台。

利用MATLAB进行牛顿迭代法求解方程组的根是一种常见的数值分析方法。

本文将介绍如何使用MATLAB进行牛顿迭代法求解方程组的根,并给出具体的代码实现。

1. 理论基础牛顿迭代法是一种求解方程根的常用数值方法。

对于一般的方程组F(X)=0,牛顿迭代法的迭代公式如下:X(k+1)=X(k)−(∂F/∂X)^(-1)·F(X(k))其中,X(k)表示第k次迭代的解,∂F/∂X表示F对X的雅可比矩阵,^(-1)代表矩阵的逆运算。

2. MATLAB代码实现以下是使用MATLAB进行牛顿迭代法求解方程组的一般代码实现:```matlabfunction [x, numIter] = newtonMethod(F, J, x0, tol, maxIter)F为方程组F(X)=0的函数句柄J为方程组F(X)的雅可比矩阵的函数句柄x0为初始解向量tol为迭代精度maxIter为最大迭代次数x = x0;numIter = 0;while norm(F(x)) > tol numIter < maxIterx = x - J(x) \ F(x); 使用MATLAB的\表示矩阵的逆运算numIter = numIter + 1;endend```3. 示例下面以一个二元非线性方程组为例,演示如何使用上述MATLAB代码进行牛顿迭代法求解方程组的根。

考虑方程组:F1(x1, x2) = x1^2 + x2^2 - 25 = 0F2(x1, x2) = x1*x2 - 9 = 0对应的雅可比矩阵为:J(x)=[2x1, 2x2; x2, x1]下面是具体的MATLAB代码实现:```matlab定义方程组F和雅可比矩阵JF = (x) [x(1)^2 + x(2)^2 - 25; x(1)*x(2) - 9];J = (x) [2*x(1), 2*x(2); x(2), x(1)];设置初始解向量、迭代精度和最大迭代次数x0 = [1; 1];tol = 1e-6;maxIter = 100;调用newtonMethod函数进行求解[x, numIter] = newtonMethod(F, J, x0, tol, maxIter);显示结果disp(['解向量为:', num2str(x')]);disp(['迭代次数为:', num2str(numIter)]);```4. 结论本文介绍了使用MATLAB进行牛顿迭代法求解方程组的方法,并给出了具体的代码实现和示例。

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