当前位置:文档之家› matlab(迭代法_牛顿插值)

matlab(迭代法_牛顿插值)

2 3
f [x , x , x ]
1 2 3
f [x , x , x , x ]
0 1 2 3
4
f (x )
k
f [x , x ]
3 4
f [x , x , x ]
2 3 4
f [x , x , x ]
1 2 3
f [x , x , x , x , x ]
0 1 2 3 4
则由差商表示的牛顿插值公式为Βιβλιοθήκη 牛顿插值法的流程图开始
输入 n 分别输入 n+1 个输入各节点
i=0
N
i<n Y j=i i=i+1
j<n? N Y j=j+1 Y i>1 N
yij
y i-1j - y i-1,j-1 x j x j i
yij
y i-1j - y i-1,j-1 x j x j 1
输入 yij i=1;t=1; N= y00
我们定义牛顿插值公式为
N ( x) f ( x ) f [ x , x ]( x x ) f [ x , x , x ]( x x )( x x )
n 0 0 1 0 0 1 2 0 1
f [ x , x , , x ]( x x )( x x ) ( x x )
所以,确定初值为 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=5,x0=0.739560873,x1=0.736981783
【实验结果】 最终试验的原方程 X=0.5*sin(x)+0.4 X= 0.735467157 【误差分析】 总共迭代十三次 迭代误差为 1.0*10^-6
在区间[-2,2]区间上的根为
【心得体会】 总算明白了计算机解数学题目的原理是什么了,以前不懂,看到计算机解出一个一个的数 学题就觉得非常神奇,老师担心人类不如计算机聪明担心有一天人类会被计算机取代。但是,我现 在不这样想了,计算机其实非常傻,只会按照人类给它设定的步骤去走,不是计算机神奇,而是人 类非常神奇,竟然想到这样一个一个巧夺天工的巧妙方法。
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 >>。。 。 以下是程序运行截图:
【实验目的】 熟练掌握 MATLAB 掌握不动点迭代法的原理
【实验原理与数学模型】 对于方程 x=f(x),取一个初值 x0 代入 f(x),算得 x1=f(x0),再计算 x2=f(x1) ,。,这 。。 样依次类推得到一个迭代格式 Xk+1=f(Xk) , k=0,1,2,3… 从而得到一个序列 {Xk} ,k=0,1,2,3… 通常称该序列为迭代序列,f(x) 称为迭代函数, x0 称为迭代初值。 如果有迭代格式所产生的迭代序列 {Xk} 收敛,容易证明在收敛的情况下,迭代序列的极限 就是 x=f(x) 方程的实根。
【实验结果】 函数在 0.59 处的近似值为 0.5564 【误差分析】 误差为 dy = -7.2731e-013
【心得体会】 总算明白了计算机解数学题目的原理是什么了,以前不懂,看到计算机解出一个一个的数 学题就觉得非常神奇,老师担心人类不如计算机聪明担心有一天人类会被计算机取代。但是,我现 在不这样想了,计算机其实非常傻,只会按照人类给它设定的步骤去走,不是计算机神奇,而是人 类非常神奇,竟然想到这样一个一个巧夺天工的巧妙方法。
【实验过程记录】 【编写 M 文件】 function [yhat,dy]=newtint(x,y,xhat) %牛顿插值法,xhat 为指定的 X 点,yhat 为相应的值,dy 为误 差 n=length(y); if length(x)~=n error('x and y ...') end c=y(:); for j=2:n %计算差商矩阵的对角元素 for i=n:-1:j c(i)=(c(i)-c(i-1))/(x(i)-x(i-j+1)); end end yhat=c(n); for i=(n-1):-1:1 yhat=yhat.*(xhat-x(i))+c(i); end if nargout>1 yn2=c(n-1); for i=n-2:-1:1 yn2=yn2.*(xhat-x(i))+c(i); end dy=yhat-yn2; if nargout>2 cout=c; end End
【实验具体内容】 运用不动点迭代法求解开普勒方程 X=0.5*sin(x)+0.4 在[-2,2]上的解
【实验过程记录】 一:确定初值 编写下列程序,画出函数 g=x 和 f=0.58*sin(x)+0.4,确定其交点大概位置 >> clear;clc; clf; >> f=inline('0.5*sin(x)+0.4'); >> g=inline('x') hold on >> fplot(g, [-2,2]) >> fplot(f, [-2,2]) >> hold off >> grid 输出结果如下所示:
由于牛顿插值法太过天马行空,太神奇,在此次试验中借鉴了网上最先进的算法,才把牛顿 插值法表示出来,哎,牛顿是个天才,那些把牛顿插值法编写出来的更是天才,在以上的算法中, 运用到了秦九韶算法, 并将原来复杂的矩阵计算化简为矩阵对角元素的计算,大大简化了计算的复 杂度。 作为把秦九韶算法抛到九霄云外的我,感到十分的汗颜。 对于人类的奇思妙想,我震惊不已,每每看到此处,总是心头没来由地发颤。 【教师评语】
实验报告内容: 一:不动点迭代法解方程 二:牛顿插值法的 MATLAB 实现
完成日期:2012 年 6 月 21 日星期四
数学实验报告一
日期:2012-6-21 班级 实验 名称 新能源 11 姓名 王志红 学号
2110310021
用不动点迭代法解方程
【问题背景描述】 天文学中有一类著名的方程——开普勒方程 x=q*sinx+a (0<q<1,a 为常数) 开普勒方程是用来确定行星在其运行轨道上的位置的。 如何求解该方程并使其解达到一定精度呢?
0 1 n 0 1 n 1
由此,我们可以得到一张差商表如下:
x x x x x x
k
f (x )
k
一阶差商
二阶差商
三阶差商
四阶差商
0
f (x )
k
1
f (x )
k
f [x , x ]
0 1
2
f (x )
k
f [x , x ]
1 2
f [x , x , x ]
0 1 2
3
f (x )
k
f [x , x ]
【编写主程序】 >> 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
N n ( x) f [ xn ] f [ xn , xn 1 ](x xn ) f [ xn , xn 1 , xn 2 ](x xn )(x xn 1 )(x xn 2 ) f [ xn , xn 1 ,, x0 ](x xn ) ( x x1 )
【教师评语】
数学实验报告之二
日期:2012-6-21 班级 实验 名称 新能源 11 姓名 牛顿插值法 王志红 学号
2110310021
【问题背景描述】 由于拉格朗日插值法涉及到复杂的矩阵运算, 牛顿提出一种不需要进行矩阵计算的多项式插值 方法,大大简化了运算复杂度。
【实验目的】 熟练掌握 MATLAB 掌握牛顿插值法的原理 【实验原理与数学模型】
t=t*(x- xi 1 )
输出 n 的值 N i<n+1 Y
N=N+ tyii
i=i+1
【实验具体内容】 已知某个函数在某些有限点的具体数值,要求该函数在指定点的近似值,并计算误差。 例如: 现在已知 F(X)=SIN(X)在 X=0:0.1:5 这 51 个点的具体数值,但是不知道其他点的值,现在 要求该函数在 X=0.59 的函数值,并计算误差
相关主题