东南大学数值分析上机

合集下载

数值分析2024上机实验报告

数值分析2024上机实验报告

数值分析2024上机实验报告数值分析是计算数学的一个重要分支,它研究如何用数值方法来解决数学问题。

在数值分析的学习过程中,学生需要通过上机实验来巩固理论知识,并学会使用相应的数值方法来解决实际问题。

本篇报告将详细介绍2024年度数值分析上机实验的内容和结果。

一、实验内容2024年度数值分析上机实验分为四个部分,分别是:方程求根、插值与拟合、数值积分和常微分方程的数值解。

1.方程求根这部分实验要求使用数值方法求解给定的非线性方程的根。

常见的数值方法有二分法、牛顿法、割线法等。

在实验过程中,我们需要熟悉这些数值方法的原理和实现步骤,并对不同方法的收敛性进行分析和比较。

2.插值与拟合这部分实验要求使用插值和拟合方法对给定的一组数据进行拟合。

插值方法包括拉格朗日插值、牛顿插值等;拟合方法包括最小二乘拟合、多项式拟合等。

在实验中,我们需要熟悉插值和拟合方法的原理和实现步骤,并对不同方法的精度和稳定性进行比较。

3.数值积分这部分实验要求使用数值方法计算给定函数的积分。

常见的数值积分方法有梯形法则、辛普森法则、龙贝格积分等。

在实验过程中,我们需要熟悉这些数值积分方法的原理和实现步骤,并对不同方法的精度和效率进行比较。

4.常微分方程的数值解这部分实验要求使用数值方法求解给定的常微分方程初值问题。

常见的数值方法有欧拉法、改进的欧拉法、四阶龙格-库塔法等。

在实验中,我们需要熟悉这些数值解方法的原理和实现步骤,并对不同方法的精度和稳定性进行比较。

二、实验结果在完成2024年度数值分析上机实验后,我们得到了以下实验结果:1.方程求根我们实现了二分法、牛顿法和割线法,并对比了它们的收敛速度和稳定性。

结果表明,割线法的收敛速度最快,但在一些情况下可能会出现振荡;二分法和牛顿法的收敛速度相对较慢,但稳定性较好。

2.插值与拟合我们实现了拉格朗日插值和最小二乘拟合,并对比了它们的拟合效果和精度。

结果表明,拉格朗日插值在小区间上拟合效果较好,但在大区间上可能出现振荡;最小二乘拟合在整体上拟合效果较好,但可能出现过拟合。

东南大学计算方法上机报告实验报告完整版

东南大学计算方法上机报告实验报告完整版

实习题11. 用两种不同的顺序计算644834.11000012≈∑=-n n,试分析其误差的变化解:从n=1开始累加,n 逐步增大,直到n=10000;从n=10000开始累加,n 逐步减小,直至1。

算法1的C 语言程序如下: #include<stdio.h> #include<math.h> void main() { float n=0.0; int i; for(i=1;i<=10000;i++) { n=n+1.0/(i*i); } printf("%-100f",n); printf("\n"); float m=0.0; int j; for(j=10000;j>=1;j--) { m=m+1.0/(j*j); } printf("%-7f",m); printf("\n"); }运行后结果如下:结论: 4.设∑=-=Nj N j S 2211,已知其精确值为)11123(21+--N N 。

1)编制按从大到小的顺序计算N S 的程序; 2)编制按从小到大的顺序计算N S 的程序;3)按2种顺序分别计算30000100001000,,S S S ,并指出有效位数。

解:1)从大到小的C语言算法如下:#include<stdio.h>#include<math.h>#include<iostream>using namespace std;void main(){float n=0.0;int i;int N;cout<<"Please input N"<<endl;cin>>N;for(i=N;i>1;i--){n=n+1.0/(i*i-1);N=N-1;}printf("%-100f",n);printf("\n");}执行后结果为:N=2时,运行结果为:N=3时,运行结果为:N=100时,运行结果为:N=4000时,运行结果为:2)从小到大的C语言算法如下:#include<stdio.h>#include<math.h>#include<iostream>using namespace std;void main(){float n=0.0;int i;int N;cout<<"Please input N"<<endl;cin>>N;for(i=2;i<=N;i++){n=n+1.0/(i*i-1);}printf("%-100f",n);printf("\n");}执行后结果为:N=2时,运行结果为:N=3时,运行结果为:N=100时,运行结果为:N=4000时,运行结果为:结论:通过比较可知:N 的值较小时两种算法的运算结果相差不大,但随着N 的逐渐增大,两种算法的运行结果相差越来越大。

东南大学_数值分析_第二章_牛顿迭代法

东南大学_数值分析_第二章_牛顿迭代法

第二章 非线性方程的解法——牛顿迭代法****(学号) ****(姓名)算法与程序题目见教材P56 上机题目20。

一、算法原理根据题目的要求,是关于用牛顿迭代法法求解方程()0f x =的通用算法。

该法是一种通过斜率迭代的算法,其速度比二分法和简单迭代法都要快。

其简单原理如下:设2[,],[,],f C a b p a b ∈∈且存在数满足()0()0,f p f p '=≠。

如果则存在一个数00,[,],p p p δδδ>∈-+对任意初始值使得由如下定义的迭代序列0{}k k p ∞=收敛到p : 1111()(),1,2,()k k k k k f p p g p p k f p ----==-=' 其中 (1) 对于函数3()/3=0f x x x =-,则其递推规则是 31212,1,2,3-3k k k p p k p --== 其中 (2)定义序列0{}k k p ∞=,则序列0{}k k p ∞=收敛到x *,也可表示为lim k x p x *→∞=。

现简要证明:对于3'2()/3()-1f x x x f x x =-=,得,写出牛顿迭代公式 32()/3()()-1f x x x g x x x f x x -=-=-' (3) 该公式可化简为 322()33x g x x =- (4)二、流程图题目要求于用牛顿迭代法法求解方程()0f x =的通用算法。

其计算过程主要用到迭代()()()f xg x xf x=-',图流程图1所示。

图1 题1关于牛顿迭代法的算法流程图三、计算代码核心代码1)p1=……;2)if (err<delta)|(relerr<delta)|(abs(y)<epsilon),break;3)if k<maxN ,go to 1完整代码程序1:Newton.m%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Description : 牛顿迭代法% Author : panyunqiang% Versoin : 1.0% Date : 2012-9-21 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [p0, err, k, y]=Newton(p0, delta, epsilon, maxN)% input - p0 is the initial approximation to a zero of f% - delta is the tolerance for p0% - epsilon is the tolerance for the function values y% - maxN is the maxium number of iterations%output - p0 is the Newton approximation to a zero% - err is the error estimate for p0% - k is the number of iterations% - y is the function value f(p0)for k=1:maxN%%递归p1=2*p0^3/(3*p0^2-3);%%计算误差err=abs(p1-p0);relerr=2*err/(abs(p1)+delta);p0=p1;%%当前求出的根的函数值y=p0^3/3-p0;%%判断if (err<delta)|(relerr<delta)|(abs(y)<epsilon)break;endend程序2:Newton_Step.m%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Description : 寻找题目中关于牛顿迭代法收敛的尽可能大的delta % 搜索步进为step=10^(-6),即精确到小数点后六位% Author : panyunqiang% Versoin : 1.0% Date : 2012-9-21 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% format longstep=10^(-6);delta=10^-8;epsilon=10^-8;maxN=1000;ps=0.6;[p0, err, k, y]=Newton(ps, delta, epsilon, maxN);while((abs(p0)<=epsilon)&(p0~=NaN))ps=ps+step;[p0, err, k, y]=Newton(ps, delta, epsilon, maxN);endps-step四、计算结果及分析a)运行程序Newton_Step.m,获得Newton局部收敛于2=0x*的初始值的范围δ= 0.774596,六位有效数字。

东南大学数值分析的上课课件chapter5

东南大学数值分析的上课课件chapter5

P
Cn,k (1)nk = n k!(n k)!
0
n n
(t j)dt,
j=0 j=k
k = 0, 1, , n,
(3)
w 9 4 ò
uNewton-Cotesú!
In(f ) = (b a)
n
Vg
Cn,k f (xk ),
k=0
.ú Ezú
Romberg
C 6kn.
n,k
{
1) n = 1, h = ba, x0 = a, x1 = b. (3) C1,0 1 . 2 : 2 ba T (f ) = [f (a) + f (b)]. 2 (4) . ba a+b 2) n = 2, h = , x0 = a, x1 = , x2 = b. (3) 2 2 1 2 1 , C2,1 = , C2,2 = . 3 6 3 6 ba a+b S(f ) = f (a) + 4f ( ) + f (b) . 6 2
Ln(x) =
k=0 b
{
Gauss
ú
f (xk )lk (x) =
k=0
f (xk )
j=0 j=k
x xj . xk xj
ê SK
IK
b
I(f ) =
a n
f (x)dx ≈
a bLn(x)dx14 56 w 9 4 ò =
k=0 n a
lk (x)dx f (xk ) Ak f (xk ).
6
ê SK
IK
1 16 56
RC (f ) = I(f ) C(f ) =
2(b a) 945
ba 4
f (6)(η),

东南大学_数值分析_第七章_偏微分方程数值解法

东南大学_数值分析_第七章_偏微分方程数值解法

第七章 偏微分方程数值解法——Crank-Nicolson 格式****(学号) *****(姓名)上机题目要求见教材P346,10题。

一、算法原理本文研究下列定解问题(抛物型方程)22(,) (0,0)(,0)() (0)(0,)(), (1,)() (0)u ua f x t x l t T t x u x x x l u t t u t t t T ϕαβ⎧∂∂-=<<≤≤⎪∂∂⎪=≤≤⎨⎪==<≤⎪⎩(1)的有限差分法,其中a 为正常数,,,,f ϕαβ为已知函数,且满足边界条件和初始条件。

关于式(1)的求解,采用离散化方法,剖分网格,构造差分格式。

其中,网格剖分是将区域{}0,0D x l t T =≤≤≤≤用两簇平行直线(0)(0)i k x x ih i M t t k k N τ==≤≤⎧⎨==≤≤⎩ 分割成矩形网格,其中,l Th M Nτ==分别为空间步长和时间步长。

将式(1)中的偏导数使用不同的差商代替,将得到不同的差分格式,如古典显格式、古典隐格式、Crank-Nicolson 格式等。

其中,Crank-Nicolson 格式具有更高的收敛阶数,应用更广泛,故本文采用Crank-Nicolson 格式求解抛物型方程。

Crank-Nicolson 格式推导:在节点(,)2i k x t τ+处考虑式(1),有22(,)(,)(,)222i k i k i k u u x t a x t f x t t x τττ∂∂+-+=+∂∂ (2)对偏导数(,)2i k u x t t τ∂+∂用中心差分展开 []2311+131(,)(,)(,)(,) ()224k k i k i k i k i i k i k u ux t u x t u x t x t t t t ττηητ++∂∂+=--<<∂∂ (3) 将22(,)2i k u x t x τ∂+∂在节点(,)i k x t 和1(,)i k x t +表示为222+122224+1221(,)=(,)+(,)22 (,) ()8i k i k i k k k i i k i k u u ux t x t x t x x x ux t t x tττηη⎡⎤∂∂∂+⎢⎥∂∂∂⎣⎦∂-<<∂∂ (4)对以上两个偏导数用二阶差分展开[]2112224i+141(,)(,)2(,)(,) (,) ()12i k i k i k i k kk i k i i u x t u x t u x t u x t x hh u t x x x ξξ+-∂=-+∂∂-<<∂ (5)[]211111122241i+141(,)(,)2(,)(,) (,) ()12i k i k i k i k k ki k i i u x t u x t u x t u x t x hh u t x x xξξ++++-++∂=-+∂∂-<<∂ (6)将式(4)(5)(6)分别代入式(3),略去高阶小量,用k i u 代替(,)i k u x t 并化简得()()()2111111112122,22k k k k k k k k i i i i i i i i i k a u u u u u u u u f x t h ττ+++++-+-⎛⎫⎡⎤---++-+=+ ⎪⎣⎦⎝⎭ (7) 令2/r a h τ=,将式(7)联合式(1)初始条件和边界条件,用矩阵的形式表示为:11112212211111221122221122221122 k k k k k kM M k k M M r r r r u u r r r r r ru u r r r r u u r r u u r r r r +++--+--⎡⎤⎡⎤+---⎢⎥⎢⎥⎢⎥⎢⎥⎡⎤⎡⎤⎢⎥⎢⎥-+--⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥-+--⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎢⎥⎢⎥⎢⎥⎢⎥-+-⎢⎥⎢⎥⎣⎦⎣⎦()()()()()()112211,22,2 ,2,22k k k k M k M k k k r f x t t t f x t f x t r f x t t t ττααττττττββ+--+⎡⎤⎛⎫+++ ⎪⎢⎥⎝⎭⎢⎥⎢⎥⎛⎫+ ⎪⎢⎥⎝⎭⎢⎥+⎢⎥⎢⎥⎛⎫⎢⎥+ ⎪⎢⎥⎝⎭⎢⎥⎛⎫⎢⎥+++ ⎪⎢⎥⎝⎭⎣⎦(8) Crank-Nicolson 格式的截断误差为22()R O h τ=+,具有较高的精度。

东南大学数值分析上机题答案

东南大学数值分析上机题答案

东南⼤学数值分析上机题答案数值分析上机题第⼀章17.(上机题)舍⼊误差与有效数设∑=-=Nj N j S 2211,其精确值为)111-23(21+-N N 。

(1)编制按从⼤到⼩的顺序1-1···1-311-21222N S N +++=,计算N S 的通⽤程序;(2)编制按从⼩到⼤的顺序121···1)1(111222-++--+-=N N S N ,计算NS 的通⽤程序;(3)按两种顺序分别计算210S ,410S ,610S ,并指出有效位数(编制程序时⽤单精度);(4)通过本上机题,你明⽩了什么?解:程序:(1)从⼤到⼩的顺序计算1-1···1-311-21222N S N +++=:function sn1=fromlarge(n) %从⼤到⼩计算sn1format long ; sn1=single(0); for m=2:1:nsn1=sn1+1/(m^2-1); end end(2)从⼩到⼤计算121···1)1(111222-++--+-=N N S N function sn2=fromsmall(n) %从⼩到⼤计算sn2format long ; sn2=single(0); for m=n:-1:2sn2=sn2+1/(m^2-1); end end(3)总的编程程序为: function p203()clear allformat long;n=input('please enter a number as the n:') sn=1/2*(3/2-1/n-1/(n+1));%精确值为sn fprintf('精确值为%f\n',sn);sn1=fromlarge(n);fprintf('从⼤到⼩计算的值为%f\n',sn1);sn2=fromsmall(n);fprintf('从⼩到⼤计算的值为%f\n',sn2);function sn1=fromlarge(n) %从⼤到⼩计算sn1 format long;sn1=single(0);for m=2:1:nsn1=sn1+1/(m^2-1);endendfunction sn2=fromsmall(n) %从⼩到⼤计算sn2 format long;sn2=single(0);for m=n:-1:2sn2=sn2+1/(m^2-1);endendend运⾏结果:从⽽可以得到N值真值顺序值有效位数2 100.740050 从⼤到⼩0.740049 5从⼩到⼤0.740050 64 100.749900 从⼤到⼩0.749852 3从⼩到⼤0.749900 66 100.749999 从⼤到⼩0.749852 3从⼩到⼤0.749999 6(4)感想:通过本上机题,我明⽩了,从⼩到⼤计算数值的精确位数⽐较⾼⽽且与真值较为接近,⽽从⼤到⼩计算数值的精确位数⽐较低。

东南大学数值分析上机练习后三章

东南大学数值分析上机练习后三章

数值分析上机练习(以VC++6.0为操作平台)第四章(4.38)程序如下:#include<iostream.h>void main(void){float x[11];//存放数组x[j]float y[11];//存放数组y[j]float h[11];//存放数组h[j]float u[11];//存放数组u[j]float v[11];//存放数组v[j]float d[11];//存放数组d[j]float M[11];//存放数组M[j]float b[11];// 存放数组b[j]float t[11],l[11],yy[11],s[4],aa1,aa2,aa3,aa4;float s1[10];int i,j,n;float xx;cout<<"请输入n的值:\n";cin>>n;cout<<"输入数组x:\n";for(i=0;i<=n;i++)cin>>x[i];cout<<"输入数组y:\n";for(i=0;i<=n;i++)cin>>y[i];//输入端点值float df[2];cout<<"输入两个端点值:\n";for(i=0;i<2;i++)cin>>df[i];//求出h[j]的值for(j=0;j<=n-1;j++){h[j]=x[j+1]-x[j];cout<<'h'<<'['<<j<<']'<<'='<<h[j]<<'\t';}cout<<endl;//求出u[j]和v[j]的初值v[0]=1;u[n]=1;for(j=1;j<=n-1;j++){u[j]=h[j-1]/(h[j-1]+h[j]);v[j]=h[j]/(h[j-1]+h[j]);}//求出d[j]的值for(j=1;j<n;j++){d[j]=6*((y[j+1]-y[j])/h[j]-(y[j]-y[j-1])/h[j-1])/(h[j]+h[j-1]);} d[0]=6*((y[1]-y[0])/h[0]-df[0])/h[0];d[n]=6*(df[1]-(y[n]-y[n-1])/h[n-1])/h[n-1];for(j=1;j<=n;j++){cout<<'u'<<'['<<j<<']'<<'='<<u[j]<<'\t';}cout<<endl;for(j=0;j<n;j++){cout<<'v'<<'['<<j<<']'<<'='<<v[j]<<'\t';}cout<<endl;for(j=0;j<=n;j++){cout<<'d'<<'['<<j<<']'<<'='<<d[j]<<'\t';}cout<<endl;//利用书本上的追赶法求解方程组for(i=0;i<=n;i++){b[i]=2;}cout<<endl;t[0]=b[0];yy[0]=d[0];//消元过程for(i=1;i<=n;i++){l[i]=u[i]/t[i-1];t[i]=b[i]-l[i]*v[i-1];yy[i]=d[i]-l[i]*yy[i-1];}//回代过程M[n]=yy[n]/t[n];for(i=n-1;i>=0;i--){M[i]=(yy[i]-v[i]*M[i+1])/t[i];}//将M[j]的值输出for(i=0;i<=n;i++){cout<<'M'<<'['<<i<<']'<<'='<<M[i]<<endl;}//输出插值多项式的系数for(j=0;j<n;j++){s[0]=y[j];s[1]=(y[j+1]-y[j])/h[j]-(M[j]/3+M[j+1]/6)*h[j];s[2]=M[j]/2;s[3]=(M[j+1]-M[j])/(6*h[j]);cout<<"当x的值在区间"<<'x'<<'['<<j<<']'<<"到"<<'x'<<'['<<(j+1)<<']'<<"时,输出插值多项式的系数:\n";for(int k=0;k<4;k++){cout<<'s'<<'['<<k<<']'<<'='<<s[k]<<'\t';}cout<<endl;}}程序结果:详见附图4.38jpg编制的程序求车门的3次样条插值函数S(x):x属于区间[0,1]时;S(x)=2.51+0.8(x)-0.0014861(x)(x)-0.00851395(x)(x)(x)x属于区间[1,2]时;S(x)=3.3+0.771486(x-1)-0.027028(x-1)(x-1)-0.00445799(x-1)(x-1)(x-1) x属于区间[2,3]时;S(x)=4.04+0.704056(x-2)-0.0404019(x-2)(x-2)-0.0036543(x-2)(x-2)(x-2) x属于区间[3,4]时;S(x)=4.7+0.612289(x-3)-0.0513648(x-3)(x-3)-0.0409245(x-3)(x-3)(x-3) x属于区间[4,5]时;S(x)=5.22+0.386786(x-4)-0.174138(x-4)(x-4)+0.107352(x-4)(x-4)(x-4) x属于区间[5,6]时;S(x)=5.54+0.360567(x-5)+0.147919(x-5)(x-5)-0.268485(x-5)(x-5)(x-5) x属于区间[6,7]时;S(x)=5.78-0.149051(x-6)-0.657537(x-6)(x-6)+0.426588(x-6)(x-6)(x-6) x属于区间[7,8]时;S(x)=5.4-0.184361(x-7)+0.622227(x-7)(x-7)-0.267865(x-7)(x-7)(x-7)x属于区间[8,9]时;S(x)=5.57+0.256496(x-8)-0.181369(x-8)(x-8)+0.0548728(x-8)(x-8)(x-8) x属于区间[9,10]时;S(x)=5.7+0.058376(x-9)-0.0167508(x-9)(x-9)+0.0583752(x-9)(x-9)(x-9) S(0.5)=2.90856 S(1.5)=3.67843 S (2.5)=4.38147S(3.5)=4.98819 S(4.5)=5.38328 S(5.5)=5.7237S(6.5)=5.59441 S(7.5)=5.42989 S(8.5)=5.65976S(9.5)=5.7323第六章(6.21)程序如下:#include<iostream.h>#include<fstream.h>#include<stdlib.h>#include<math.h>ofstream outfile("data.txt");//此处定义函数f(x,y)的表达式//用户可以自己设定所需要求得函数表达式double f1(double x,double y){double f1;f1=(-1)*x*x*y*y;return f1;}//此处定义求函数精确解的函数表达式double f2(double x){double f2;f2=3/(1+x*x*x);return f2;}//此处为精确求函数解的通用程序void accurate(double a,double b,double h){double x[100],accurate[100];x[0]=a;int i=0;outfile<<"输出函数准确值的程序结果:\n";do{x[i]=x[0]+i*h;accurate[i]=f2(x[i]);outfile<<"accurate["<<i<<"]="<<accurate[i]<<'\n';i++;}while(i<(b-a)/h+1);}//此处为经典Runge-Kutta公式的通用程序void RK4(double a,double b,double h,double c){int i=0;double k1,k2,k3,k4;double x[100],y[100];y[0]=c;x[0]=a;outfile<<"输出经典Runge-Kutta公式的程序结果:\n";do{x[i]=x[0]+i*h;k1=f1(x[i],y[i]);k2=f1((x[i]+h/2),(y[i]+h*k1/2));k3=f1((x[i]+h/2),(y[i]+h*k2/2));k4=f1((x[i]+h),(y[i]+h*k3));y[i+1]=y[i]+h*(k1+2*k2+2*k3+k4)/6;outfile<<"y"<<"["<<i<<"]="<<y[i]<<'\n';i++;}while(i<(b-a)/h+1);}void AB4(double a,double b,double h,double c){double x[100],y[100],y1[100];double k1,k2,k3,k4;y[0]=c;x[0]=a;outfile<<"输出4阶Adams显式方法的程序结果:\n";for(int i=0;i<=2;i++){x[i]=x[0]+i*h;k1=f1(x[i],y[i]);k2=f1((x[i]+h/2),(y[i]+h*k1/2));k3=f1((x[i]+h/2),(y[i]+h*k2/2));k4=f1((x[i]+h),(y[i]+h*k3));y[i+1]=y[i]+h*(k1+2*k2+2*k3+k4)/6;}int j=3;y1[0]=y[0];y1[1]=y[1];y1[2]=y[2];y1[3]=y[3];do{x[j]=x[0]+j*h;y1[j+1]=y1[j]+(55*f1(x[j],y1[j])-59*f1(x[j-1],y1[j-1])+37*f1(x[j-2], y1[j-2])-9*f1(x[j-3],y1[j-3]))*h/24;outfile<<"y1"<<"["<<j<<"]="<<y1[j]<<'\n';j++;}while(j<(b-a)/h+1);}//主函数void main(void){double a,b,h,c;cout<<"输入上下区间、步长和初始值:\n";cin>>a>>b>>h>>c;accurate(a,b,h);RK4(a,b,h,c);AB4(a,b,h,c);}程序结果:经典Runge-Kutta公式得出的结果列在下面的表格中,以及精确由AB4方法得出的结果为:y1[0]=3 y1[1]=2.997 y1[2]=2.97619 y1[3]=2.92113y1[4]=2.81839 y1[5]=2.66467y1[6]=2.4652 y1[7]=2.23308y1[8]=1.98495y1[9]=1.73704y1[10]=1.5021 y1[11]=1.28876y1[12]=1.10072y1[13]=0.93871y1[14]=0.801135 y1[15]=0.685335通过本上机题我明白了各种求微分方程的数值方法,经典Runge-Kutta公式,AB4方法以及AB4-AM4预测校正方法求解公式的精度是不同的。

东南大学出版社第二版《数值分析》上机作业答案(前三章)

东南大学出版社第二版《数值分析》上机作业答案(前三章)

for (i=k+1;i<N;i++) // { lik=a[i][k]/a[k][k]; //实施消去过程,得到上三角系数增广矩阵 for (j=k;j<M;j++) // { a[i][j]=a[i][j]‐lik*a[k][j]; // } } } cout<<"经列主元高斯消去法得到的数组为:"<<endl; // for (b=0;b<N;b++) // { cout<<endl; //输出经过列主元消去法处理过的系数增广矩阵 for (c=0;c<M;c++) { cout<<setw(7)<<a[b][c]; // } } cout<<endl; double x[N]; // double s; int f,g; x[N‐1]=a[N‐1][M‐1]/a[N‐1][N‐1]; // for (f=N‐2;f>=0;f‐‐) // { s=0; for (g=f+1;g<N;g++) //由上三角形的系数增广矩阵求出方程组的解 { s=s+a[f][g]*x[g]; // } x[f]=(a[f][N]‐s)/a[f][f]; // } cout<<"方程组的解为:"<<endl; for (b=0;b<N;b++) //输出方程组的解 {
1
当 n=10000 时,s3=0.7499 Press any key to continue (分析 S1 的 6 位数字中,有效位数为 4 位; S2 的所有数字都是有效数字。 ) 当 n=1000000 时,s1=‐14.2546 当 n=1000000 时,s2=‐14.2551 当 n=1000000 时,s3=0.749999 Press any key to continue (分析: S1 的 6 位数字中,没有有效数字; S2 的 6 位数字中,没有有效数字。 ) 由运行结果可知,当精度比较低时,按从大数开始累加到小数的计算结果的精度低于按从小数 累加到大数的计算结果的精度。 至于当 n=1000000 时,S1 和 S2 得出了负数结果,可能是由于循环次数过多,导致数据溢出, 从而得出错误结果。 习题 2 20.程序如下: //给定误差限为:0.5e‐6 //经过试算得当 delta 最大取道 0.7745966 时,迭代得到的根都收敛于 0 #include <iostream.h> #include <math.h> void main () { double x,u; int count=0; u=10.0; cout<<"请输入 x 的初值"<<endl; cin>>x; for (count=0;abs(u)>5;count++) { x=x‐(x*x*x‐3*x)/(3*(x*x‐1)); u=10000000*x; if(count>5000) { cout<<"迭代结果不收敛于 0!"<<endl; break; } } cout<<"x="<<x<<endl<<endl;

数值分析上机题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(前三章)

数值分析上机题第一章(17题)(1)从2依次累加到N的程序function sn = sum1( n )sn=0;sn=single(sn);for i=2:nai=1/(i^2-1);sn=sn+ai;endend(2)从N依次累加到2的程序function sn = sum2( n )sn=0;sn=single(sn);for i=n:-1:2ai=1/(i^2-1);sn=sn+ai;endend(3)编制求精确值的求和函数sum0function sn = sum0( n )sn=0;sn=single(sn);sn=1/2*(3/2-1/n-1/(n+1));end按第一种顺序得到的值及有效位数如下:N=100时sn0=sum0(100);sn=sum1(100)n=fix(-log10(2*abs(sn-sn0)))得到:sn =0.7400495 n =7N=10e4时sn0=sum0(10e4);sn=sum1(10e4)n=fix(-log10(2*abs(sn-sn0)))得到:sn =0.7498521 n =3N=10e6时sn0=sum0(10e6);sn=sum1(10e6)n=fix(-log10(2*abs(sn-sn0)))得到:sn =0.7498521 n =3按第二种顺序得到的值及有效位数如下:N=100时sn0=sum0(100);sn=sum2(100)n=fix(-log10(2*abs(sn-sn0)))得到:sn =0.7400495 n =7N=10e4时sn0=sum0(10e4);sn=sum2(10e4)n=fix(-log10(2*abs(sn-sn0)))得到:sn =0.7499900 n =7N=10e6时sn0=sum0(10e6);sn=sum2(10e6)n=fix(-log10(2*abs(sn-sn0)))得到:sn =0.7499999 n =7(4)通过这道上机题,我明白了,应用计算机进行求和运算时,求和的顺序不同对结果的精度是有影响的。

东南大学_数值分析_第六章_常微分方程数值解法

东南大学_数值分析_第六章_常微分方程数值解法

第六章 常微分方程数值解法——RK 4法、AB 4法******(学号) *****(姓名)上机题目要求见教材P307,23题。

一、算法原理题目要求采用RK 4法和AB 4法求解最简单的常微分方程初值问题(,),()y f x y a x by a η'=≤≤⎧⎨=⎩ (1)为求解式(1),采用离散化方法,就是寻求解)(x y 在区间],[b a 上的一系列点<<<<<n x x x x 321上的近似值 ,,,,21n y y y 。

记1(1,2,)i i i h x x i -=-=表示相邻两个节点的间距,称为步长。

求微分方程数值解的主要问题:(1) 如何将微分方程(,)y f x y '=离散化,并建立求其数值解的递推公式; (2) 递推公式的局部截断误差、数值数n y 与精确解)(n x y 的误差估计; (3) 递推公式的稳定性与收敛性. a) Runge-Kutta 方法基本思想:通过在1[,]i i x x +多预报几个点求斜率,并将其加权平均作为k *的近似值,以此构造更高精度的计算公式。

如果每步计算四次函数 的值,完全类似的,可以导出局部截断误差为)(5h O 的四阶Runge-Kutta 公式(RK 4):1123412132431(22),6(,),(,),221(,),22(,).n n n n n n n n n n y y k k k k k f x y h h k f x y k h k f x h y k k f x h y hk +⎧=++++⎪⎪=⎪⎪⎪=++⎨⎪⎪=++⎪⎪=++⎪⎩ (2)b) Adams 显式公式Runge-Kutta 方法是单步法,计算1+n y 时,只用到n y , 而已知信息1-n y 、2-n y 等没有被直接利用。

可以设想如果充分利用已知信息1-n y ,2-n y ,…来计算1+n y ,那么不但有可能提高精度,而且大大减少了计算量,这就是构造所谓线性多步法的基本思想。

数值分析上机题 舍入误差与有效数

数值分析上机题  舍入误差与有效数
7位
(5)通过上述分析可以看出:按从小到大的顺序计算所得的结果与真值接近,而按从大到小的顺序计算所得的结果与真值的误差较大,且有效位数较前者少。
原因:这是由于机器数在进行加法运算时,首先比较两数的阶码,将阶码较小的尾数向右移位,每移一位阶码加一,直至其阶码与另一数的阶码一致为止,且将移位后的尾数多于计算机字长的部分进行四舍五入,之后对尾数进行加减运算,最后将尾数写成规格化的形式,当从大到小的顺序进行计算式,由于越到后面数字越小,就会产生大数吃小数的情况,从而产生误差的累积,最后使计算结果的不准确。
解:(1)从大到小的matlab程序:
functions=myfun1(N)
formatlong;
k=2;
s=single(0);
fork=2:1:N
a=1/(k*k-1);
s=a+s;
end
end
(2)从小到大的matlab程序
functions=myfun2(N)
formatlong;
s=single(0);
fori=N:-1:2
a=1/(i*i-1);
s=a+s;
end
真值
有效位数
0.7400495
0.7400495
0.7400495
大小
7位
小大
7位
0.7498521
0.7499000
0.7499000
大小
4位
小大
7位
0.7498521
0.7499990
0.749999
大小
4位
小大
舍入误差与有效数
东南大学机械工程学院
设SN= ,其精确值为 )。
(1)编制按从大到小的顺序SN= + + +……+ ,计算SN通用的程序;

东南大学数值分析上机

东南大学数值分析上机

第一章一、题目设∑=-=Nj N j S 2211,其精确值为)11123(21+--N N 。

(1)编制按从大到小的顺序11131121222-+⋯⋯+-+-=N S N ,计算SN 的通用程序。

(2)编制按从小到大的顺序1211)1(111222-+⋯⋯+--+-=N N S N ,计算SN 的通用程序。

(3)按两种顺序分别计算64210,10,10S S S ,并指出有效位数。

(编制程序时用单精度) (4)通过本次上机题,你明白了什么? 二、MATLAB 程序N=input('请输入N(N>1):');AccurateValue=single((0-1/(N+1)-1/N+3/2)/2); %single 使其为单精度 Sn1=single(0); %从小到大的顺序 for a=2:N; Sn1=Sn1+1/(a^2-1); endSn2=single(0); %从大到小的顺序 for a=2:N; Sn2=Sn2+1/((N-a+2)^2-1); endfprintf('Sn 的值 (N=%d)\n',N);disp('____________________________________________________') fprintf('精确值 %f\n',AccurateValue); fprintf('从大到小计算的结果 %f\n',Sn1); fprintf('从小到大计算的结果 %f\n',Sn2);disp('____________________________________________________')三、结果请输入N(N>1):100Sn的值(N=100)____________________________________________________精确值0.740049从大到小计算的结果0.740049从小到大计算的结果0.740050____________________________________________________请输入N(N>1):10000Sn的值(N=10000)____________________________________________________精确值0.749900从大到小计算的结果0.749852从小到大计算的结果0.749900____________________________________________________请输入N(N>1):1000000Sn的值(N=1000000)____________________________________________________精确值0.749999从大到小计算的结果0.749852从小到大计算的结果0.749999____________________________________________________四、结果分析可以得出,算法对误差的传播又一定的影响,在计算时选一种好的算法可以使结果更为精确。

东南大学_数值分析_第六章_常微分方程数值解法

东南大学_数值分析_第六章_常微分方程数值解法

第六章 常微分方程数值解法——RK 4法、AB 4法******(学号) *****(姓名)上机题目要求见教材P307,23题。

一、算法原理题目要求采用RK 4法和AB 4法求解最简单的常微分方程初值问题(,),()y f x y a x by a η'=≤≤⎧⎨=⎩ (1)为求解式(1),采用离散化方法,就是寻求解)(x y 在区间],[b a 上的一系列点<<<<<n x x x x 321上的近似值 ,,,,21n y y y 。

记1(1,2,)i i i h x x i -=-=表示相邻两个节点的间距,称为步长。

求微分方程数值解的主要问题:(1) 如何将微分方程(,)y f x y '=离散化,并建立求其数值解的递推公式; (2) 递推公式的局部截断误差、数值数n y 与精确解)(n x y 的误差估计; (3) 递推公式的稳定性与收敛性. a) Runge-Kutta 方法基本思想:通过在1[,]i i x x +多预报几个点求斜率,并将其加权平均作为k *的近似值,以此构造更高精度的计算公式。

如果每步计算四次函数 的值,完全类似的,可以导出局部截断误差为)(5h O 的四阶Runge-Kutta 公式(RK 4):1123412132431(22),6(,),(,),221(,),22(,).n n n n n n n n n n y y k k k k k f x y h h k f x y k h k f x h y k k f x h y hk +⎧=++++⎪⎪=⎪⎪⎪=++⎨⎪⎪=++⎪⎪=++⎪⎩ (2)b) Adams 显式公式Runge-Kutta 方法是单步法,计算1+n y 时,只用到n y , 而已知信息1-n y 、2-n y 等没有被直接利用。

可以设想如果充分利用已知信息1-n y ,2-n y ,…来计算1+n y ,那么不但有可能提高精度,而且大大减少了计算量,这就是构造所谓线性多步法的基本思想。

《数值分析》上机实验报告

《数值分析》上机实验报告

数值分析上机实验报告《数值分析》上机实验报告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.使用此方法求方解,用误差来控制循环迭代次数,可以在误差允许的范围内得到比较理想的计算结果。

东南大学 数值分析上机题作业 MATLAB版

东南大学 数值分析上机题作业 MATLAB版

东南大学数值分析上机题作业MATLAB版上机作业题报告1.Chapter 11.1题目设S N= Nj=2j2−1,其精确值为11311(-- 。

22N N +1(1)编制按从大到小的顺序S N =(2)编制按从小到大的顺序S N =111,计算S N 的通用程序。

++⋯⋯+22-132-1N 2-1111,计算S N 的通用程++⋯⋯+N 2-1(N -1 2-122-1序。

(3)按两种顺序分别计算S 102, S 104, S 106, 并指出有效位数。

(编制程序时用单精度)(4)通过本次上机题,你明白了什么?1.2程序 1.3运行结果1.4结果分析按从大到小的顺序,有效位数分别为:6,4,3。

按从小到大的顺序,有效位数分别为:5,6,6。

可以看出,不同的算法造成的误差限是不同的,好的算法可以让结果更加精确。

当采用从大到小的顺序累加的算法时,误差限随着N 的增大而增大,可见在累加的过程中,误差在放大,造成结果的误差较大。

因此,采取从小到大的顺序累加得到的结果更加精确。

2.Chapter 22.1题目(1)给定初值x 0及容许误差ε,编制牛顿法解方程f(x=0的通用程序。

3(2)给定方程f (x =x-x =0, 易知其有三个根x 1*=-3, x 2*=0, x 3*=○1由牛顿方法的局部收敛性可知存在δ>0, 当x 0∈(-δ, Newton 迭代序列收敛+δ 时,于根x2*。

试确定尽可能大的δ。

○2试取若干初始值,观察当x 0∈(-∞, -1, (-1, -δ, (-δ, +δ, (δ, 1, (1, +∞ 时Newton 序列的收敛性以及收敛于哪一个根。

(3)通过本上机题,你明白了什么?2.2程序2.3运行结果(1)寻找最大的δ值。

算法为:将初值x0在从0开始不断累加搜索精度eps ,带入Newton 迭代公式,直到求得的根不再收敛于0为止,此时的x0值即为最大的sigma 值。

数值分析上机题答案

数值分析上机题答案

数值分析上机题答案【篇一:数值分析上机试题对应参考答案】么是近似值x* 有效数字?若近似值x*的误差限是某一位的半个单位,该位到x*的第一位非零数字共有n位,就说x*有n位有效数字。

它可表示为2、数值计算应该避免采用不稳定的算法,防止有效数字的损失. 因此,在进行数值运算算法设计过程中主要注意什么?(1)简化计算过程,减少运算次数;(2)避免两个相近的数相减;(3)避免除数的绝对值远小于被除数的绝对值;(4)防止大数“吃掉”小数的现象;(5)使用数值稳定的算法,设法控制误差的传播。

3、写出“n 阶阵a 具有n 个不相等的特征值”的等价条件(至少写3 个)(1)|a|不为零(2)n阶矩阵a的列或行向量组线性无关(3)矩阵a为满秩矩阵(4)n阶矩阵a与n阶可逆矩阵b等价4、迭代法的基本思想是什么?就是用某种极限过程去逐步逼近线性方程组精确解得方法。

其基本思想为:先任取一组近似解初值x0,然后按照某种迭代原则,由x0计算新的近似解x1,以此类推,可计算出x2,x3,…xk,。

,如果{x}收敛,则取为原方程组的解。

5、病态线性方程组的主要判断方法有哪些?(1)系数矩阵的某两行(列)几乎近似相关(2)系数矩阵的行列式的值很小(3)用主元消去法解线性方程组时出现小主元(4)近似解x*已使残差向量r=b-ax*的范数很小,但该近似解仍不符合问题要求。

6、lagrange 插值的前提条件是什么?并写出二次lagrange 插值的基函数。

1,j?i?(x)? 前提条件是:l i ,j?0,1,2?,n.?ij0,j?i?二次lagrange 插值的基函数: (x?x)(x?x)12??lx0(xx)(xx) 0?10?2 (x?x)(x?x)02?? lx1(xx)(xx)1?01?2(x?x)(x?x)01?? lx2(x?x)(x?x)20217、什么是数值积分的代数精度?如果某一个求积公式对于次数不超过m的多项式均能准确地成立,但对于m+1次多项式就不准确成立,则称该求积公式具有m次代数精度(或代数精确度)。

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

第一章一、题目设∑=-=Nj N j S 2211,其精确值为)11123(21+--N N 。

(1)编制按从大到小的顺序11131121222-+⋯⋯+-+-=N S N ,计算SN 的通用程序。

(2)编制按从小到大的顺序1211)1(111222-+⋯⋯+--+-=N N S N ,计算SN 的通用程序。

(3)按两种顺序分别计算64210,10,10S S S ,并指出有效位数。

(编制程序时用单精度) (4)通过本次上机题,你明白了什么? 二、MATLAB 程序N=input('请输入N(N>1):');AccurateValue=single((0-1/(N+1)-1/N+3/2)/2); %single 使其为单精度Sn1=single(0); %从小到大的顺序 for a=2:N; Sn1=Sn1+1/(a^2-1); endSn2=single(0); %从大到小的顺序 for a=2:N; Sn2=Sn2+1/((N-a+2)^2-1); endfprintf('Sn 的值 (N=%d)\n',N);disp('____________________________________________________') fprintf('精确值 %f\n',AccurateValue); fprintf('从大到小计算的结果 %f\n',Sn1);fprintf('从小到大计算的结果 %f\n',Sn2);disp('____________________________________________________')三、结果请输入N(N>1):100Sn的值 (N=100)____________________________________________________精确值 0.740049从大到小计算的结果 0.740049从小到大计算的结果 0.740050____________________________________________________请输入N(N>1):10000Sn的值 (N=10000)____________________________________________________精确值 0.749900从大到小计算的结果 0.749852从小到大计算的结果 0.749900____________________________________________________请输入N(N>1):1000000Sn的值 (N=1000000)____________________________________________________精确值 0.749999从大到小计算的结果 0.749852从小到大计算的结果 0.749999____________________________________________________四、结果分析可以得出,算法对误差的传播又一定的影响,在计算时选一种好的算法可以使结果更为精确。

从以上的结果可以看到从大到小的顺序导致大数吃小数的现象,容易产生较大的误差,求和运算从小数到大数算所得到的结果才比较准确。

第二章一、题目(1)给定初值0x 及容许误差ε,编制牛顿法解方程f(x)=0的通用程序。

(2)给定方程03)(3=-=x x x f ,易知其有三个根3,0,3321=*=*-=*x x x①由牛顿方法的局部收敛性可知存在,0>δ当),(0δδ+-∈x 时,Newton 迭代序列收敛于根x 2*。

试确定尽可能大的δ。

②试取若干初始值,观察当),1(),1,(),,(),,1(),1,(0+∞+-----∞∈δδδδx 时Newton 序列的收敛性以及收敛于哪一个根。

(3)通过本上机题,你明白了什么?二、MATLAB 程序文件fx.mfunction Fx=fx(x) %% 定义函数f(x) Fx=x^3/3-x;文件dfx.mfunction Fx=dfx(x) %% 定义导函数df(x) Fx=x^2-1;%% Newton 法求方程的根%% clearef=10^-6; %这里取容许误差10^-6 k=0;x0=input('请输入 Xo 的值:');disp('k Xk'); %使用空格将其分隔开 fprintf('0 %f\n',x0);while flag==1 && k<=10^3x1=x0-fx(x0)/dfx(x0);if abs(x1-x0)<efflag=0;endk=k+1;x0=x1;fprintf('%d %f\n',k,x0);end%%寻找最大的delta值%%clear%%flag=1;k=1;x0=0;while flag==1delta=k*10^-6; %delta与k有关x0=delta;k=k+1;m=0;flag1=1;while flag1==1 && m<=10^3x1=x0-fx(x0)/dfx(x0);if abs(x1-x0)<10^-6flag1=0; %给定容许误差 endm=m+1;x0=x1;if flag1==1||abs(x0)>=10^-6 %未小于给定误差时停止循环 flag=0;endendfprintf(' delta 的最大值是 %f\n',delta);三、结果1.运行search.m文件结果为:delta 的最大值为 0.774597即得最大的δ为0.774597,Newton迭代序列收敛于根*x=0的最大区间为2(-0.774597,0.774597)。

2.(1)区间(,1)-∞-上取-1000,-100,-50,-30,-10,-8,-7,-5,-3结果显示,以上初值迭代序列均收敛于-1.732051,即根*x。

1(2) 在区间(1,)δ--即区间(-1,-0.774597)上取-0.774598,-0.8,-0.85,-0.9,-0.99,计算结果如下:计算结果显示,迭代序列局部收敛于-1.732051,即根*x,局部收敛于11.730251,即根*x。

3(3) 有上题可知,在区间(-0.774597,0.774597)上,在整个区间上均收敛于0,即根*x。

2(4) 在区间(,1)即区间(0.774597,1)上取0.774598,0.8,0.85,0.9,0.99,计算结果如下:计算结果显示,迭代序列局部收敛于-1.732051,即根*x,局部收敛于11.730251,即根*x。

3(5) 区间(1,)上取100,60,20,10,7,6,4,3,1.5,计算结果如下:3四、结果分析综上所述:(,1)-∞-区间收敛于-1.73205, (1,)δ--区间局部收敛于1.73205,局部收敛于-1.73205,(,)δδ-区间收敛于0,(,1)δ区间类似于(1,)δ--区间,(1,)+∞收敛于1.73205。

通过本上机题,明白了对于多根方程,Newton 法求方程根时,迭代序列收敛于某一个根有一定的区间限制,在一个区间上,可能会局部收敛于不同的根。

第三章一、题目列主元Gauss消去法对于某电路的分析,归结为求解线性方程组RI V=。

其中3113000100001335901100000931*******00107930000900030577050000074730000000030410000005002720009000229 R--⎛⎫ ⎪---⎪ ⎪--⎪--- ⎪⎪=---⎪--⎪⎪-⎪-- ⎪ ⎪--⎝⎭()15,27,23,0,20,12,7,7,10TT V =----(1)编制解n 阶线性方程组Ax b =的列主元高斯消去法的通用程序;(2)用所编程序线性方程组RI V =,并打印出解向量,保留5位有效数; 二、MATLAB 程序%% 列主元Gauss 消去法求解线性方程组%% %%参数输入n=input('请输入矩阵 A 的阶数: n='); %输入线性方程组阶数n b=zeros(1,n);A=input('请输入矩阵 A:');b(1,:)=input('请输入行向量 b:'); %输入行向量bb=b'; %得到列向量b C=[A,b]; %得到增广矩阵 %%列主元消去得上三角矩阵 for i=1:n-1[maximum,index]=max(abs(C(i:n,i))); %将最大元素位置放在index 行中index=index+i-1;T=C(index,:); %T 作为一个中转站,交换两行 C(index,:)=C(i,:); C(i,:)=T;for k=i+1:n %%列主元消去 if C(k,i)~=0C(k,:)=C(k,:)-C(k,i)/C(i,i)*C(i,:); end end end%% 回代求解 %% x=zeros(n,1); x(n)=C(n,n+1)/C(n,n);for i=n-1:-1:1x(i)=(C(i,n+1)-C(i,i+1:n)*x(i+1:n,1))/C(i,i);endA=C(1:n,1:n);disp('上三角矩阵为:')for k=1:nfprintf('%f ',A(k,:));fprintf('\n');enddisp('方程的解为:');fprintf('%.5g\n',x); %以5位有效数字输出结果三、结果请输入矩阵 A的阶数: n=9请输入矩阵 A:[31 -13 0 0 0 -10 0 0 0;-13 35 -9 0 -11 0 0 0 0;0 -9 31 -10 0 0 0 0 0;0 0 -10 79 -30 0 0 0 -9;0 0 0 -30 57 -7 0 -5 0;0 0 0 0 -7 47 -30 0 0;0 0 0 0 0 -30 41 0 0;0 0 0 0 -50 0 27 -2;0 0 0 -9 0 0 0 -2 9]请输入行向量 b: [-15 27 -23 0 -20 12 -7 7 10]上三角矩阵为:31.000000 -13.000000 0.000000 0.000000 0.000000 -10.000000 0.000000 0.0000000.0000000.000000 29.548387 -9.000000 0.000000 -11.000000 -4.193548 0.000000 0.0000000.0000000.000000 0.000000 28.258734 -10.000000 -3.350437 -1.277293 0.000000 0.0000000.0000000.000000 0.000000 0.000000 75.461271 -31.185629 -0.451999 0.000000 0.000000-9.0000000.000000 0.000000 0.000000 0.000000 44.602000 -7.179695 0.000000 -5.000000-3.5779940.000000 0.000000 0.000000 0.000000 -0.000000 45.873193 -30.000000 -0.784718 -0.5615430.000000 0.000000 0.000000 0.000000 -0.000000 -0.000000 21.380698 -0.513187 -0.3672360.000000 0.000000 0.000000 0.000000 -0.000000 -0.000000 0.000000 26.413085 -2.4199960.000000 0.000000 0.000000 0.000000 -0.000000 -0.000000 0.000000 0.000000 27.389504方程的解为:-0.289230.34544-0.71281-0.22061-0.43040.15431-0.0578230.20105第四章:多项式插值与函数最佳逼近一、题目:(1)编制求第一型3次样条插值函数的通用程序;(2)已知汽车曲线型值点的数据如下:端点条件为'0=0.8y,'10=0.2y。

相关文档
最新文档