北科大工程数值上机实验.docx

上传人:b****3 文档编号:11205430 上传时间:2023-05-29 格式:DOCX 页数:35 大小:327.48KB
下载 相关 举报
北科大工程数值上机实验.docx_第1页
第1页 / 共35页
北科大工程数值上机实验.docx_第2页
第2页 / 共35页
北科大工程数值上机实验.docx_第3页
第3页 / 共35页
北科大工程数值上机实验.docx_第4页
第4页 / 共35页
北科大工程数值上机实验.docx_第5页
第5页 / 共35页
北科大工程数值上机实验.docx_第6页
第6页 / 共35页
北科大工程数值上机实验.docx_第7页
第7页 / 共35页
北科大工程数值上机实验.docx_第8页
第8页 / 共35页
北科大工程数值上机实验.docx_第9页
第9页 / 共35页
北科大工程数值上机实验.docx_第10页
第10页 / 共35页
北科大工程数值上机实验.docx_第11页
第11页 / 共35页
北科大工程数值上机实验.docx_第12页
第12页 / 共35页
北科大工程数值上机实验.docx_第13页
第13页 / 共35页
北科大工程数值上机实验.docx_第14页
第14页 / 共35页
北科大工程数值上机实验.docx_第15页
第15页 / 共35页
北科大工程数值上机实验.docx_第16页
第16页 / 共35页
北科大工程数值上机实验.docx_第17页
第17页 / 共35页
北科大工程数值上机实验.docx_第18页
第18页 / 共35页
北科大工程数值上机实验.docx_第19页
第19页 / 共35页
北科大工程数值上机实验.docx_第20页
第20页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

北科大工程数值上机实验.docx

《北科大工程数值上机实验.docx》由会员分享,可在线阅读,更多相关《北科大工程数值上机实验.docx(35页珍藏版)》请在冰点文库上搜索。

北科大工程数值上机实验.docx

北科大工程数值上机实验

 

《工程数值计算》

上机实验报告

 

姓名丁恒

班级机自1404

学号41440001

 

2017年10月

 

1数据的插值与回归

1.1种插值算法的实践

1.待定系数法多项式插值

程序:

图像:

2拉格朗日多项式插值

x

0

1

2

y

1.0000

2.7183

7.3891

程序:

%拉格朗日线性插值函数的构造比较

clear;

x0=0;y0=1;

x1=1;y1=2.7183;

x2=2;y2=7.3891;

x=0:

0.01:

2;

fori=1:

length(x)

ye(i)=exp(x(i));

L

(1)=(x1-x(i))*(x2-x(i))/((x1-x0)*(x2-x0));

L

(2)=(x0-x(i))*(x2-x(i))/((x0-x1)*(x2-x1));

L(3)=(x0-x(i))*(x1-x(i))/((x0-x2)*(x1-x2));

y(i)=y0*L

(1)+y1*L

(2)+y2*L(3);

end

plot(x,y,'k-',x,ye,'r-',x0,y0,'ro',x1,y1,'ro');

结果:

3、牛顿多项式

程序:

clear;

xi=[0;40;80;120;160;200;240;280;320;360];

yi=[50.3;51.4;32.7;9.22;6.22;14.7;23.6;32.5;41.4;50.3];

n=length(xi)

B=zeros(n,n);

B(1,:

)=yi';

fori=1:

n-1

forj=1:

n-i

B(i+1,j)=(B(i,j+1)-B(i,j))/(xi(i+j)-xi(j));

end

end

x=1:

1:

360;

fori=1:

length(x)

ye(i)=log(x(i));

y1(i)=B(1,1)+B(2,1)*(x(i)-xi

(1));

y2(i)=B(1,1)+B(2,1)*(x(i)-xi

(1))+B(3,1)*(x(i)-xi

(1))*(x(i)-xi

(2));

y3(i)=B(1,1)+B(2,1)*(x(i)-xi

(1))+B(3,1)*(x(i)-xi

(1))*(x(i)-xi

(2))+B(4,1)*(x(i)-xi

(1))*(x(i)-xi

(2))*(x(i)-xi(3));

y4(i)=B(1,1)+B(2,1)*(x(i)-xi

(1))+B(3,1)*(x(i)-xi

(1))*(x(i)-xi

(2))+B(4,1)*(x(i)-xi

(1))*(x(i)-xi

(2))*(x(i)-xi(3))+B(5,1)*(x(i)-xi

(1))*(x(i)-xi

(2))*(x(i)-xi(3))*(x(i)-xi(4));

end

plot(x,ye,'k-',x,y1,'r-',x,y2,'b-',x,y3,'g-',x,y4,'c-',xi,yi,'ro')

结果:

n=10

4、分段线性插值

程序:

clear;

xi=[0;40;80;120;160;200;240;280;320;360];

yi=[50.3;51.4;32.7;9.22;6.22;14.7;23.6;32.5;41.4;50.3];

%主程序

n=length(xi);

B=zeros(n,n);

B(1,:

)=yi';

fori=1:

n-1

forj=1:

n-i

B(i+1,j)=(B(i,j+1)-B(i,j))/(xi(i+j)-xi(j));

end

end

b=B(2:

end,1);

%x=-5:

0.1:

5;

x=2:

0.1:

10;

forj=1:

length(x)

Y(1,j)=B(1,1);

p(1,j)=1;

end

%牛顿插值

fori=1:

length(b)

forj=1:

length(x)

p(i+1,j)=p(i,j)*(x(j)-xi(i));

Y(i+1,j)=Y(i,j)+b(i)*p(i+1,j);

end

end

plot(xi,yi,'ko-',x,Y(4,:

),'r-');

结果:

5、分段三次厄米特插值

插值程序:

clear;

N=10;

fori=1:

N+1

xi(i)=-5+10*(i-1)/N;

yi(i)=xi(i)^4;

ypi(i)=4*xi(i)^3;

end

n=length(xi);

B=zeros(n,n);

B(1,:

)=yi';

fori=1:

n-1

forj=1:

n-i

B(i+1,j)=(B(i,j+1)-B(i,j))/(xi(i+j)-xi(j));

end

end

b=B(2:

end,1);

x=-5:

0.1:

5;

forj=1:

length(x)

Y(1,j)=B(1,1);

p(1,j)=1;

end

fori=1:

length(b)

forj=1:

length(x)

p(i+1,j)=p(i,j)*(x(j)-xi(i));

Y(i+1,j)=Y(i,j)+b(i)*p(i+1,j);

end

end

symsr

fori=1:

n-1

i

a=xi(i);

b=xi(i+1);

A(i,1)=(1+2*(r-a)/(b-a))*((r-b)/(a-b))^2;

A(i,2)=(1+2*(r-b)/(a-b))*((r-a)/(b-a))^2;

A(i,3)=(r-a)*((r-b)/(a-b))^2;

A(i,4)=(r-b)*((r-a)/(b-a))^2;

H(i,1)=A(i,1)*yi(i)+A(i,2)*yi(i+1)+A(i,3)*ypi(i)+A(i,4)*ypi(i+1);

end

Hr=vpa(collect(H),8);

fori=1:

length(Hr)

Ce(i,:

)=sym2poly(Hr(i));

end

fori=1:

length(x)

ye(i)=x(i)^4;

forj=1:

n-1

ifx(i)>=xi(j)&x(i)<=xi(j+1)

H3(i)=Ce(j,1)*x(i)^2+Ce(j,2)*x(i)+Ce(j,3);

end

end

end

plot(x,ye,'k-',x,H3,'r--');

结果:

1/6分段三次样条插值

程序:

clear;

xi=[0;40;80;120;160;200;240;280;320;360];

yi=[50.3;51.4;32.7;9.22;6.22;14.7;23.6;32.5;41.4;50.3];

yp_L=0.5;

yp_R=-0.5;

n=length(xi);

fori=1:

n-1

h(i)=xi(i+1)-xi(i);

end

d=zeros(n,1);

miu=zeros(n-2,1);

lam=zeros(n-2,1);

d

(1)=6/h

(1)*((yi

(2)-yi

(1))/h

(1)-yp_L);

d(n)=6/h(n-1)*(yp_R-(yi(n)-yi(n-1))/h(n-1));

fori=2:

n-1

miu(i-1)=h(i-1)/(h(i-1)+h(i));

lam(i-1)=1-miu(i-1);

d(i)=6/(h(i-1)+h(i))*((yi(i+1)-yi(i))/h(i)-(yi(i)-yi(i-1))/h(i-1));

end

M=zeros(n,n);

M(1,1)=2;

M(1,2)=1;

M(n,n-1)=1;

M(n,n)=2;

fori=2:

n-1

M(i,i)=2;

M(i,i-1)=miu(i-1);

M(i,i+1)=lam(i-1);

end

Sm=inv(M)*d;

symsr

fori=1:

n-1

S(i)=(xi(i+1)-r)^3/(6*h(i))*Sm(i)+(r-xi(i))^3/(6*h(i))*Sm(i+1)+((yi(i+1)-yi(i))/h(i)-h(i)/6*(Sm(i+1)-Sm(i)))*(r-xi(i))+yi(i)-h(i)^2/6*Sm(i);

end

Sr=vpa(collect(S),8);

fori=1:

length(Sr)

Se(i,:

)=sym2poly(Sr(i));

end

x=0:

360;

fori=1:

length(x)

forj=1:

n-1

ifx(i)>=xi(j)&x(i)<=xi(j+1)

S3(i)=Se(j,1)*x(i)^3+Se(j,2)*x(i)^2+Se(j,3)*x(i)+Se(j,4);

end

end

end

plot(xi,yi,'ko-',x,S3,'b-');

结果:

1.2MATLAB内部插值函数的应用

2.interp1函数

程序:

clear;

X=[0;40;80;120;160;200;240;280;320;360];

Y=[50.3;51.4;32.7;9.22;6.22;14.7;23.6;32.5;41.4;50.3];

xi=0:

360;

yi1=interp1(X,Y,xi,'*nearst');

yi2=interp1(X,Y,xi,'*linear');

yi3=interp1(X,Y,xi,'*spline');

yi4=interp1(X,Y,xi,'*cubic');

plot(X,Y,'ro',xi,yi1,'--',xi,yi2,'-',xi,yi3,'m:

')

结果:

3.Spline函数

程序:

clear;

X=[0;40;80;120;160;200;240;280;320;360];

Y=[50.3;51.4;32.7;9.22;6.22;14.7;23.6;32.5;41.4;50.3];

xi=0:

360;

yi=spline(X,Y,xi);

plot(X,Y,'o',xi,yi,'r-')

结果:

4.Ppval函数

求20度、60度、100度处的函数值

程序:

clear;

xi=[0;40;80;120;160;200;240;280;320;360];

yi=[50.3;51.4;32.7;9.22;6.22;14.7;23.6;32.5;41.4;50.3];

p=csape(xi,yi,'variational');

x=[20,60,100];

ppval(p,x)

结果:

ans=

52.585144.269819.5631

1.3回归算法的实践

1、一维线性回归算法

问题:

x

1

2

3

4

y

2

2.5

3.33

4.25

程序:

%最小二乘法(线性拟合)

clear;

xi=[1;2;3;4];

yi=[2;2.5;3.33;4.25];

symsc1c2

n=length(xi);

fori=1:

n

eb(i)=c1*xi(i)+c2-yi(i);

end

J=0;

fori=1:

n

J=J+eb(i)^2;

end

J1=collect(J,c1);

J2=collect(J,c2);

diff(J,c1)

diff(J,c2)

x=1:

0.01:

4;

fori=1:

length(x)

y(i)=0.758*x(i)+1.125;

Y(i)=1/x(i)+x(i);

end

plot(xi,yi,'ko',x,y,'r-',x,Y,'m-')

结果:

1.4MATLAB内部回归函数的应用

1、polyfit和polyval函数

程序:

clear;

X=[0;40;80;120;160;200;240;280;320;360];

Y=[50.3;51.4;32.7;9.22;6.22;14.7;23.6;32.5;41.4;50.3];

p2=polyfit(X,Y,2);

p3=polyfit(X,Y,3);

p5=polyfit(X,Y,5);

xi=[20,60,100,140];

yi2=polyval(p2,xi)

yi3=polyval(p3,xi)

yi5=polyval(p5,xi)

结果:

yi2=

47.610733.125722.745816.4708

yi3=

48.030831.806921.088515.4088

yi5=

56.554242.129819.82757.2451

2数值积分与数值微分

2.1数值积分算法的实践

1、梯形公式、辛普森公式和科特斯公式

程序:

clear;

xi=0:

5:

30;

F=[0.09.013.014.010.512.05.0];

du=[0.501.400.750.901.301.481.50];

f=F.*cos(du);

C=zeros(3,4);

C(1,1)=1/2;C(1,2)=1/2;

C(2,1)=1/6;C(2,2)=2/3;C(2,3)=1/6;

C(3,1)=1/8;C(3,2)=3/8;C(3,3)=3/8;C(3,4)=1/8;

a=0;

b=30;

%梯形公式

n=length(xi);

T=0;

fori=1:

(n-1)

T=T+5*0.5*(f(i)+f(i+1));

end

%辛普森公式

fori=1:

(n-2)

s(i)=C(2,1)*f(i)+C(2,2)*f(i+1)+C(2,3)*f(i+2);

end

X=0;

fori=1:

((n-1)/2)

X=X+10*s(2*i-1);

end

%柯特斯公式

fori=1:

(n-3)

k(i)=C(3,1)*f(i)+C(3,2)*f(i+1)+C(3,3)*f(i+2)+C(3,4)*f(i+3);

end

K=0;

fori=1:

((n-1)/3)

K=K+15*k(3*i-2);

end

结果:

T=

119.0892

>>X

X=

117.1271

>>K

K=

117.3265

2.2MATLAB内部数值积分函数的应用

分别用梯形公式和辛普森公式求函数y=4/(1+x^2)在[0,1]区间内的积分

1、quad函数、Trapz函数

y=4./(1+x.^2)

程序:

clear;

x=0:

0.01:

1;

y=4./(1+x.^2);

%梯形公式

z1=trapz(x,y);

%辛普森公式

z2=quad('4./(1+x.^2)',0,1);

z1=vpa(z1,8)

z2=vpa(z2,8)

结果:

z1=

3.141576

z2=

3.1415927

2.3数值微分算法的实践

1、对

求差商

程序:

不同步长对差商求导

clear;

h=zeros(17,1);

h

(1)=0.05;

a0=1;

d0=1/(3*a0^(2/3));

n=length(h);

fori=2:

n

h(i)=h(i-1)/5;

end

fori=1:

n

a(i)=a0-h(i);

b(i)=a0+h(i);

c(i)=(b(i)^(1/3)-a(i)^(1/3))/(b(i)-a(i));

e(i)=c(i)-d0;

er(i)=abs(e(i))/d0;

cp(i)=1/(a(i)^(2/3)+b(i)^(2/3)+(a(i)*b(i))^(1/3));

ep(i)=cp(i)-d0;

erp(i)=abs(ep(i))/d0;

d(i)=d0;

end

subplot(2,1,1);

semilogx(h,c,'r-',h,d,'ko-');

subplot(2,1,2);

semilogx(h,er,'b-');

figure;

subplot(2,1,1);

semilogx(h,cp,'r-',h,d,'ko-');

subplot(2,1,2);

semilogx(h,erp,'b-');

结果:

2、对

求差商

程序:

%不同步长对差商求导

clear;

h=zeros(17,1);

h

(1)=0.05;

a0=1;

d0=3*a0^2;

n=length(h);

fori=2:

n

h(i)=h(i-1)/5;

end

fori=1:

n

a(i)=a0-h(i);

b(i)=a0+h(i);

c(i)=(b(i)^3-a(i)^3)/(b(i)-a(i));

e(i)=c(i)-d0;

er(i)=abs(e(i))/d0;

cp(i)=a(i)^2+b(i)^2+a(i)*b(i);

ep(i)=cp(i)-d0;

erp(i)=abs(ep(i))/d0;

d(i)=d0;

end

subplot(2,1,1);

semilogx(h,c,'r-',h,d,'ko-');

subplot(2,1,2);

semilogx(h,er,'b-');

figure;

subplot(2,1,1);

semilogx(h,cp,'r-',h,d,'ko-');

subplot(2,1,2);

semilogx(h,erp,'b-');

结果:

有上述结果知:

若步长h越小,截断误差越小,结果越精确

(1)当

,会由于截断误差而造成失真

(2)当

,则不会造成失真

2.4MATLAB内部数值微分函数的应用

diff函数的应用:

比较不同方法求得f(x)的导数

程序:

%数值微分函数的调用比较

x=-3:

0.1:

3;

f=inline('sqrt(x.^3++2*x.^2-x+12)+(x+5).^(1/6)+5*x+2');

g=inline('(3*x.^2+4*x-1)./(2*sqrt(x.^3++2*x.^2-x+12))+1/6./(x+5).^(5/6)+5');

p=polyfit(x,f(x),5);

dp=polyder(p);

dpx=polyval(dp,x);

dx=diff(f([x,3.1]))/0.1;

gx=g(x);

plot(x,g(x),'r-',x,dpx,'bo',x,dx,'g--')

结果:

 

3方程与方程组的求解

3.1线性方程组的求解

1、克莱姆法

程序:

%克莱姆法求解线性方程组

A=[223;477;-245];

b=[3;1;-7];

x=inv(A)*b

结果:

x=

2

-2

1

2、数值迭代法

程序:

%Jaboci迭代

A=[223;477;-245];

b=[3;1;-7];

n=length(b);

N=200;

H=zeros(N,n);

eb=1e-3

fori=1:

n

x(1,i)=0;

end

fori=1:

N

i

forj=1:

n

fork=1:

n

ifj~=k

H(i,j)=H(i,j)+A(j,k)*x(i,k);

end

end

x(i+1,j)=(b(j)-H(i,j))/A(j,j);

end

e(i)=abs(x(i+1,1)-x(i,1));

ife(i)

break

end

end

x

结果:

i=

20

x=000

1.50000.1429-1.4000

3.45710.6857-0.9143

2.1857-0.9184-0.5657

3.2669-0.54040.2090

1.7269-1.93290.3391

2.9243-1.18310.8371

1.4274-2.36530.7162

2.7910-1.38901.0632

1.2942-2.51520.8276

2.7738-1.42431.1298

1.2295-2.57200.8489

2.7986-1.40861.1494

1.1845-2.60580.8464

2.8362-1.38041.1584

1.1427-2.63630.8388

2.8781-1.34891.1661

1.0998-2.66790.8304

2.9223-1.31591.1742

1.0546-2.70120.8217

2.9687-1.28151.1829

结论:

数值迭代不收敛。

3.2非线性方程的求解

1、roots函数

程序:

%非线性方程的求根

p=[123];

roots(p)

结果:

ans=

-1.0000+1.4142i

-1.0000-1.4142i

2、fsolve函数

程序:

functionF=fun(x)

globalpr

F=p*sin(x)-r;

end

%非线性方程的求根

clear;

globalpr

p=3;

r=2;

x=fsolve(@fun,0);

结果:

x=

0.7297

3、fzero函数

程序:

functiony=fun1(x)

y=exp(-x)-sin(pi/2*x);

end%非线性方程的求根

clear;

x=fzero(@fun1,0);

结果:

x=

0.4436

3.3非线性方程的求解

1、

程序:

%非线性方程组求解的应用

clear;

[x,y]=solve('x^2+x*y+y-3=0','x^2-4*x+3=0')

结果:

x=1

3

y=

1

-3/2

4微分方程的求解

初始条件:

程序:

sgm=10;

b=2.666667;

r=28;

x0=6;

y0=5;

z0=5;

T=20;

dt=0.005;

n=T/dt;

t=0:

dt:

20;

x

(1)=x0;

y

(1)=y0;

z

(1)=z0;

fori=1:

n

x(i+1)=x(i)+(-sgm*x(i)+sgm*y(i))*dt;

y(i+1)=y(i)+(r*x(i)-y(i)-x(i)*z(i))*dt;

z(i+1)=z(i)+(-b*z(i)+x(i)*y(i))*dt;

end

plot(x,y,'r-',x,z,'b-')

 

结果:

初始条件:

结果:

4.1R-K算法及实践

程序:

%四阶R-K的应用

xi=0:

0.2:

1;

yi

(1)=1;

n=length(xi);

h=(xi(n)-x

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 职业教育 > 职业技术培训

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2