同济大学数值分析报告matlab编程题总汇编

同济大学数值分析报告matlab编程题总汇编
同济大学数值分析报告matlab编程题总汇编

MATLAB 编程题库 1.下面的数据表近似地满足函数2

1cx

b

ax y ++=,请适当变换成为线性最小二乘问题,编程求最好的系数c b a ,,,并在同一个图上画出所有数据和函数图像.

625

.0718.0801.0823.0802

.0687

.0606

.0356

.0995.0628.0544.0008.0213.0362.0586.0931.0i

i y x ----

解:

x=[-0.931 -0.586 -0.362 -0.213 0.008 0.544 0.628 0.995]'; y=[0.356 0.606 0.687 0.802 0.823 0.801 0.718 0.625]'; A=[x ones(8,1) -x.^2.*y]; z=A\y;

a=z(1); b=z(2); c=z(3); xh=-1:0.1:1;

yh=(a.*xh+b)./(1+c.*xh.^2); plot(x,y,'r+',xh,yh,'b*')

2.若在Matlab工作目录下已经有如下两个函数文件,写一个割线法程序,求出这两个函数

10 的近似根,并写出调用方式:

精度为10

解:

>> edit gexianfa.m

function [x iter]=gexianfa(f,x0,x1,tol)

iter=0;

while(norm(x1-x0)>tol)

iter=iter+1;

x=x1-feval(f,x1).*(x1-x0)./(feval(f,x1)-feval(f,x0));

x0=x1;x1=x;

end

>> edit f.m

function v=f(x)

v=x.*log(x)-1;

>> edit g.m

function z=g(y)

z=y.^5+y-1;

>> [x1 iter1]=gexianfa('f',1,3,1e-10)

x1 =

1.7632

iter1 =

6

>> [x2 iter2]=gexianfa('g',0,1,1e-10)

x2 =

0.7549

iter2 =

8

3.使用GS 迭代求解下述线性代数方程组:

1231231

2

3

521242103103

x x x x x x x x x

解:

>> edit gsdiedai.m

function [x iter]=gsdiedai(A,x0,b,tol) D=diag(diag(A)); L=D-tril(A); U=D-triu(A); iter=0; x=x0;

while((norm(b-A*x)./norm(b))>tol) iter=iter+1; x0=x;

x=(D-L)\(U*x0+b); end

>> A=[5 2 1;-1 4 2;1 -3 10]; >> b=[-12 10 3]'; >>tol=1e-4; >>x0=[0 0 0]';

>> [x iter]=gsdiedai(A,x0,b,tol); >>x x =

-3.0910 1.2372 0.9802 >>iter iter = 6

4.用四阶Range-kutta 方法求解下述常微分方程初值问题(取步长h=0.01)

,

(1)2

x

dy

y e xy dx

y

解:

>> edit ksf2.m

function v=ksf2(x,y) v=y+exp(x)+x.*y;

>> a=1;b=2;h=0.01; >> n=(b-a)./h; >> x=[1:0.01:2]; >>y(1)=2;

>>fori=2:(n+1)

k1=h*ksf2(x(i-1),y(i-1));

k2=h*ksf2(x(i-1)+0.5*h,y(i-1)+0.5*k1); k3=h*ksf2(x(i-1)+0.5*h,y(i-1)+0.5*k2); k4=h*ksf2(x(i-1)+h,y(i-1)+k3); y(i)=y(i-1)+(k1+2*k2+2*k3+k4)./6; end >>y

调用函数方法

>> edit Rangekutta.m

function [x y]=Rangekutta(f,a,b,h,y0) x=[a:h:b]; n=(b-a)/h; y(1)=y0; fori=2:(n+1)

k1=h*(feval(f,x(i-1),y(i-1)));

k2=h*(feval(f,x(i-1)+0.5*h,y(i-1)+0.5*k1)); k3=h*(feval(f,x(i-1)+0.5*h,y(i-1)+0.5*k2)); k4=h*(feval(f,x(i-1)+h,y(i-1)+k3)); y(i)=y(i-1)+(k1+2*k2+2*k3+k4)./6; end

>> [x y]=Rangekutta('ksf2',1,2,0.01,2); >>y

5.取0.2h =,请编写Matlab 程序,分别用欧拉方法、改进欧拉方法在12x ≤≤上求解初值问题。

3,(1)0.4

dy y

x dx x y

解:

>> edit Euler.m

function [x y]=Euler(f,a,b,h,y0) x=[a:h:b]; n=(b-a)./h; y(1)=y0; fori=2:(n+1)

y(i)=y(i-1)+h*feval(f,x(i-1),y(i-1)); end

>> edit gaijinEuler.m

function[x y]=gaijinEuler(f,a,b,h,y0) x=[a:h:b]; n=(b-a)./h; y(1)=y0; fori=2:(n+1)

y1=y(i-1)+h*feval(f,x(i-1),y(i-1)); y2=y(i-1)+h*feval(f,x(i),y1); y(i)=(y1+y2)./2; end

>> edit ksf3.m

function v=ksf3(x,y) v=x.^3-y./x;

>>[x y]=Euler('ksf3',1,2,0.2,0.4) x =

1.0000 1.2000 1.4000 1.6000 1.8000

2.0000 y =

0.4000 0.5200 0.7789 1.2165 1.8836 2.8407

>> [x y]=gaijinEuler('ksf3',1,2,0.2,0.4) x =

1.0000 1.2000 1.4000 1.6000 1.8000

2.0000 y =

0.4000 0.5895 0.9278 1.4615 2.2464 3.3466

6.请编写复合梯形积分公式的Matlab程序,计算下面积分的近似值,区间等分20

n=。编写辛普森积分公式的Matlab程序,计算下面积分的近似值,区间等分10

n=。

1

2 01

1

dx

x 、

1

1

sin x

dx

x

解:

>> edit tixingjifen.m

function s=tixingjifen(f,a,b,n)

x=linspace(a,b,(n+1));

y=zeros(1,length(x));

y=feval(f,x)

h=(b-a)./n;

s=0.5*h*(y(1)+2*sum(y(2:n))+y(n+1));

end

>> edit simpson.m

function I=simpson(f,a,b,n)

h=(b-a)/n;

x=linspace(a,b,2*n+1);

y=feval(f,x);

I=(h/6)*(y(1)+2*sum(y(3:2:2*n-1))+4*sum(y(2:2:2*n))+y(2*n+1));

>> edit ksf4.m

function v=ksf4(x)

v=1./(x.^2+1);

>>tixingjifen('ksf4',0,1,20)

ans =

0.7853

>>simpson('ksf4',0,1,10)

ans =

0.7854

>> edit ksf5.m

function v=ksf5(x)

if(x==0)

v=1;

else

v=sin(x)./x;

end

(第二个函数‘ksf5’调用求积函数时,总显示有错误:“NaN”,还没调试好。见谅!)

相关主题
相关文档
最新文档