数值分析作业
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章
1.题目:运用MATLAB编程实现牛顿迭代
2. 实验操作
1、打开MATLAB程序软件。
2、在MATLAB中编辑如下的M程序。
function [p1,err,k,y]=newton(f,df,p0,delta,max)
%f是要求根的方程(f(x)=0);
%df是f(x)的导数;
%p0是所给初值,位于x*附近;
%delta是给定允许误差;
%max是迭代的最大次数;
%p1是newton法求得的方程的近似解;
%err是p0的误差估计;
%k是迭代次数;
p0
for k=1:max
p1=p0-feval('f',p0)/feval('df',p0);
err=abs(p1-p0);
p0=p1;
k
p1
err
y=feval('f',p1)
{
x=a+(i+0.5)*h;
p=p+Rombf(x);
}
p=(y[0]+h*p)/2.0;
s=1.0;
for(k=1;k<=m;k++)
{
s=4.0*s;
q=(s*p-y[k-1])/(s-1.0);
y[k-1]=p;p=q;
}
ep=fabs(q-y[m-1]);
m=m+1;y[m-1]=q;n=n+n;h=h/2.0;
0.55511151231258
{
double Rombf();
int m,n,i,k;
double y[10],h,ep,p,x,s,q;
h=b-a;
y[0]=h*(Rombf(a)+Rombf(b))/2.0;
m=1;n=1;ep=eps+1.0;
while((ep>=eps)&&(m<=9))
{
p=0.0;
for(i=0;i<=n-1;i++)
>> b=[0.4127;1.7321;-0.8621];
>> x=GaJo_inv(A)*b
x =4.58668603133057
-0.63152317337598
2.73520013957385
>>A*x-b
ans =
1.0e-015 *
0.05551115123126
0.22204460492503
2.程序如下:
>> x=[19 25 31 38 44];
>> y=[19.0 32.3 49.0 73.3 97.8];
>> [p,v]=ZXRC_Poly(x.^2,y,1)
p =
0.05003512421916010.972578656906791
v =
0.122569200640555
3. 运行结果:
if (err<delta)|(y==0)|(k==max)
break;
end
e源自文库d
4、M文件2
function y=f(x)
y=x^3-3*x+2;
5、M文件3
function y=df(x)
y=3*x^2-3;
6、在程序窗口中,调用上面的M文件,对具体问题求解
>>newton('f','df',1.2,10^(-6),20)
k=13 p1=1.0000 err=2.6008e-005 y= 2.0293e-009
k=14 p1=1.0000 err=1.3004e-005 y=5.0732e-010
k=15 p1 =1.0000 err=6.5020e-006 y=1.2683e-010
k=16 p1 =1.0000 err=3.2510e-006 y=3.1708e-011
k =5 p1=1.0066 err=0.0066 y=1.3270e-004
k =6 p1=1.0033 err=0.0033 y=3.3211e-005
k =7 p1=1.0017 err=0.0017 y=8.3074e-006
k =8 p1=1.0008 err=8.3157e-004 y = 2.0774e-006
}
3.运行结果:
The result is:1.099
第五章
1.题目:用追赶法解三对角矩阵方程AX=b,其中:
2.程序如下:
>> a=-1*ones(1,5);
>> c=a;
>> b=2*ones(1,6);
>> f=[1 0 1 0 0 1];
>> [x]=ZhuiGan(a,b,c,f)’
x =
3.实验结果
p0 = 1.2000
k =1 p1=1.1030 err=0.0970 y=0.0329
k= 2 p1=1.0524 err=0.0507 y=0.0084
k =3 p1=1.0264 err=0.0260 y=0.0021
k =4 p1=1.0133 err=0.0131 y=5.2963e-004
1.57142857142857
2.14285714285714
2.71428571428571
2.28571428571429
1.85714285714286
1.42857142857143
第六章
1.题目:
解下列方程组
2.解答过程:
>>A=[0.6428 0.3475 -0.8468;0.3475 1.8423 0.4759;-0.8468 0.4759 1.2147];
a=0.972578656906791 b=0.0500351242191601
均方误差为: 0.122569200640555
第四章
1.题目:用龙贝格法计算积分: ,要求
2.程序如下:
#include<stdio.h>
#include<math.h>
double Romb(double a,double b,double eps)
}
return q;
}
double Rombf(double x)
{
double y;
y=1/x;
return y;
}
main()
{
double a=1;
double b=3;
double eps=1e-5;
double t=Romb(a,b,eps);
printf("The result is:%.3f\n",t);
k =9 p1=1.0004 err=4.1596e-004 y =5.1943e-007
k=10 p1=1.0002 err=2.0802e-004 y= 1.2987e-007
k=11 p1=1.0001 err=1.0402e-004 y =3.2468e-008
k=12 p1=1.0001 err=5.2014e-005 y=8.1170e-009
k=17 p1 =1.0000 err=1.6255e-006 y =7.9272e-012
k=18 p1 =1.0000 err =8.1279e-007 y= 1.9820e-012
ans = 1.0000
结果说明:经过18次迭代得到精确解为1,误差为8.1279e-007。
第三章
1.题目:
用最小二乘法求一个形如y=a+bx^2的经验公式,使他与下列数据相拟合,并求均方误差
1.题目:运用MATLAB编程实现牛顿迭代
2. 实验操作
1、打开MATLAB程序软件。
2、在MATLAB中编辑如下的M程序。
function [p1,err,k,y]=newton(f,df,p0,delta,max)
%f是要求根的方程(f(x)=0);
%df是f(x)的导数;
%p0是所给初值,位于x*附近;
%delta是给定允许误差;
%max是迭代的最大次数;
%p1是newton法求得的方程的近似解;
%err是p0的误差估计;
%k是迭代次数;
p0
for k=1:max
p1=p0-feval('f',p0)/feval('df',p0);
err=abs(p1-p0);
p0=p1;
k
p1
err
y=feval('f',p1)
{
x=a+(i+0.5)*h;
p=p+Rombf(x);
}
p=(y[0]+h*p)/2.0;
s=1.0;
for(k=1;k<=m;k++)
{
s=4.0*s;
q=(s*p-y[k-1])/(s-1.0);
y[k-1]=p;p=q;
}
ep=fabs(q-y[m-1]);
m=m+1;y[m-1]=q;n=n+n;h=h/2.0;
0.55511151231258
{
double Rombf();
int m,n,i,k;
double y[10],h,ep,p,x,s,q;
h=b-a;
y[0]=h*(Rombf(a)+Rombf(b))/2.0;
m=1;n=1;ep=eps+1.0;
while((ep>=eps)&&(m<=9))
{
p=0.0;
for(i=0;i<=n-1;i++)
>> b=[0.4127;1.7321;-0.8621];
>> x=GaJo_inv(A)*b
x =4.58668603133057
-0.63152317337598
2.73520013957385
>>A*x-b
ans =
1.0e-015 *
0.05551115123126
0.22204460492503
2.程序如下:
>> x=[19 25 31 38 44];
>> y=[19.0 32.3 49.0 73.3 97.8];
>> [p,v]=ZXRC_Poly(x.^2,y,1)
p =
0.05003512421916010.972578656906791
v =
0.122569200640555
3. 运行结果:
if (err<delta)|(y==0)|(k==max)
break;
end
e源自文库d
4、M文件2
function y=f(x)
y=x^3-3*x+2;
5、M文件3
function y=df(x)
y=3*x^2-3;
6、在程序窗口中,调用上面的M文件,对具体问题求解
>>newton('f','df',1.2,10^(-6),20)
k=13 p1=1.0000 err=2.6008e-005 y= 2.0293e-009
k=14 p1=1.0000 err=1.3004e-005 y=5.0732e-010
k=15 p1 =1.0000 err=6.5020e-006 y=1.2683e-010
k=16 p1 =1.0000 err=3.2510e-006 y=3.1708e-011
k =5 p1=1.0066 err=0.0066 y=1.3270e-004
k =6 p1=1.0033 err=0.0033 y=3.3211e-005
k =7 p1=1.0017 err=0.0017 y=8.3074e-006
k =8 p1=1.0008 err=8.3157e-004 y = 2.0774e-006
}
3.运行结果:
The result is:1.099
第五章
1.题目:用追赶法解三对角矩阵方程AX=b,其中:
2.程序如下:
>> a=-1*ones(1,5);
>> c=a;
>> b=2*ones(1,6);
>> f=[1 0 1 0 0 1];
>> [x]=ZhuiGan(a,b,c,f)’
x =
3.实验结果
p0 = 1.2000
k =1 p1=1.1030 err=0.0970 y=0.0329
k= 2 p1=1.0524 err=0.0507 y=0.0084
k =3 p1=1.0264 err=0.0260 y=0.0021
k =4 p1=1.0133 err=0.0131 y=5.2963e-004
1.57142857142857
2.14285714285714
2.71428571428571
2.28571428571429
1.85714285714286
1.42857142857143
第六章
1.题目:
解下列方程组
2.解答过程:
>>A=[0.6428 0.3475 -0.8468;0.3475 1.8423 0.4759;-0.8468 0.4759 1.2147];
a=0.972578656906791 b=0.0500351242191601
均方误差为: 0.122569200640555
第四章
1.题目:用龙贝格法计算积分: ,要求
2.程序如下:
#include<stdio.h>
#include<math.h>
double Romb(double a,double b,double eps)
}
return q;
}
double Rombf(double x)
{
double y;
y=1/x;
return y;
}
main()
{
double a=1;
double b=3;
double eps=1e-5;
double t=Romb(a,b,eps);
printf("The result is:%.3f\n",t);
k =9 p1=1.0004 err=4.1596e-004 y =5.1943e-007
k=10 p1=1.0002 err=2.0802e-004 y= 1.2987e-007
k=11 p1=1.0001 err=1.0402e-004 y =3.2468e-008
k=12 p1=1.0001 err=5.2014e-005 y=8.1170e-009
k=17 p1 =1.0000 err=1.6255e-006 y =7.9272e-012
k=18 p1 =1.0000 err =8.1279e-007 y= 1.9820e-012
ans = 1.0000
结果说明:经过18次迭代得到精确解为1,误差为8.1279e-007。
第三章
1.题目:
用最小二乘法求一个形如y=a+bx^2的经验公式,使他与下列数据相拟合,并求均方误差