哈工大MATLAB选修课第二次matlab作业

更新时间:2023-10-31 14:50:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1. 表1 用三次样条方法插值计算0-90 度内整数点的sin 值和0-75 度内整数点的 正切值,然后用5 次多项式拟合方法计算相同的函数。

a(度) 0 15 30 45 60 75 90 Sin(a) 0 0.2588 0.5000 0.7071 0.8660 0.9659 1.0000 tan(a) 0 0.2679 0.5774 1.0000 1.7320 3.732

解:分别对应的程序如下: 正弦函数:

x = pi*(0:90)/180; y = sin(x);

xx = pi*(0:.25:90)/180; yy = spline(x,y,xx); plot(x,y,'o',xx,yy)

正切函数:

x = pi*(0:75)/180; y = tan(x);

xx = pi*(0:.25:75)/180; yy = spline(x,y,xx);

plot(x,y,'o',xx,yy)

正弦拟合:

figure

x=pi*(0:15:90)/180;

y=[0,0.2588,0.5,0.7071,0.866,0.9659,1.0]; xx=pi*(1:0.05:90)/180; p2=polyfit(x,y,5); yy=polyval(p2,xx); plot(x,y,'-ro',xx,yy);

正切拟合:

figure

x=pi*(0:15:75)/180;

y=[0,0.2679,0.5774,1,1.732,3.732]; xx=pi*(1:0.05:75)/180; p2=polyfit(x,y,5); yy=polyval(p2,xx); plot(x,y,'-ro',xx,yy);

legend('描点显示','五次拟合')

2. 采用最近点法、线性法和3 次样条法插值计算1-100 整数间平方根

n 1 4 9 16 25 36 49 64 81 100 Sqtr(n)1 2 3 4 5 6 7 8 9 10 解:程序如下:

x=[1,4,9,16,25,36,49,64,81,100]; y=[1,2,3,4,5,6,7,8,9,10]; xx=1:100;

yy=interp1(x,y,xx) subplot(2,2,1)

plot(x,y,'-ro',xx,yy,'dr'); title('线性法'); subplot(2,2,2);

y2=interp1(x,y,xx,'nearest'); plot(x,y,'-ro',xx,y2,'dr'); title('最近点法') subplot(2,2,3);

y3=interp1(x,y,xx,'spline'); plot(x,y,'-ro',xx,y3,'dr'); title('3次样条法')

仿真的结果:

3. 已知p(x)=2x^4-3x^3+5x+13,求p(x)的全部根,由方程p(x)=0 的根构造

一个多项式f(x),并和p(x)比较。 解:

程序如下:

P=[2,-3,0,5,13]; Y=poly2str(P,'X');

K=roots(P); L=poly(K);

F=poly2str(L,'x');

原函数Y,运行后得到根K,用根构造的函数F为如下:

4. 有两个多项式p(x)=2x^4-3x^3+5x+13;q(x)=x^2+5x+8, 求p(x),p(x)q(x) 和

p(x)/q(x)的导数

4. 有两个多项式p(x)=2x^4-3x^3+5x+13;q(x)=x^2+5x+8, 求p(x),p(x)q(x) 和 p(x)/q(x)的导数。

解:对应的程序如下: P=[2,-3,0,5,13]; Q=[1,5,8]; format rat

K1=polyder(P); K2=polyder(P,Q); [p,q]=polyder(P,Q); Dzi=poly2str(p,'x'); Dmu=poly2str(q,'x'); D1=poly2str(K1,'x'); D2=poly2str(K2,'x');

Dzi为P/Q导数的分子,Dmu为P/Q导数的分母; D1为P的导数,D2为P*Q的导数,运行的结果如下:

5. 求解恰定方程组,采用左除法、求逆法、lu 和qr 分解法

2x+3y+5z=10 3x+7y+4z=3 x-7y+z=5

程序如下:

A=[2,3,5;3,7,4;1,-7,1]; b=[10;3;5]; det(A); rank(A); x=A\\b;;

Xx=inv(A)*b; [L,U]=lu(A); [Q,R]=qr(A); X=U\\(L\\b); X1=R\\(Q\\b);

相应的仿真的结果如下:x代表左除法,Xx代表求逆法,X表示LU法,X1表示QR分解法:

6. 求解超定方程组,采用采用左除法、求逆法和最小二乘法

2x-4y+10z=22 6x+5y-4z=32 5x-y+33z=10 x+4y-76z=33

对应的程序如下:

A=[2,-4,10;6,5,-4;5,-1,33;1,4,-76]; b=[22;32;10;33]; x=A\\b;

Xx=pinv(A)*b;

X1=lsqnonneg(A,b); 运行的结果如下:

程序如下:

z1=fzero('x^41+x^3+1',-1); z2=fzero('x-sin(x)./x',0.5);

z3=fzero('3*x+sin(x)-exp(x)',1.5);

结果如下:

(1)的函数为 function q=myfun(p) x=p(1); y=p(2);

q(1)=x^2+y^2-9; q(2)=x+y-1; 再输入:

x=fsolve('myfun',[3,0]',optimset('Display','off')) 显示的结果如下:

(2)的函数如下:

function q=fun1(p) x=p(1); y=p(2); z=p(3);

q(1)=sin(x)+y^2+log(z)-7; q(2)=3*x+2.^y-z^3+1; q(3)=x+y+z-5; End

再输入:

x=fsolve('fun1',[1,1,1]',optimset('Display','off'))

显示的结果如下:

(1)建立函数:

function yp=fun2(t,y) %建立相应的函数 yp=-(1.2+sin(10*t))*y; end

再在命令窗口输入: t0=0; tf=5;

y0=1;

[t,y]=ode23('fun2',[t0,tf],y0); %求数值解 [t,y]

得倒最后的结果为:

最终t=5,y=0.0025 (2)

函数如下:

function dy=zzd(t,y)

dy=zeros(2,1); dy(1)=dy(2);

dy(2)=(2-2.*t.*dy(1)-3.*y(1))./(1+t.^2); end

再在命令窗口输入:

[t,y]=ode23(@zzd,[0 5],[0 1]),[t,y] 显示的结果为:

(1) 函数:

function f=fe(x)

f=1./((x-0.3)^2+0.01)-1./((x-0.9)^2+0.04)-6; End

再输入:K=quad('fe',0,1) 得到如下结果:

(2) 函数为:

function f=fsk(t)%创建一个新函数

f=sqrt(cos(t.*t)+4*sin((2.*t).^2)+1) ;%函数的表达式 End

再输入:

L=quad('fsk',0,2*pi); 得到如下结果:

(1)函数如下: function f=fxy(x,y) global ki;

ki=ki+1; %ki用于统计被积函数的调用次数 f=exp(-(x.^2+y.^2)); end

再输入: global ki;

ki=0;

I=dblquad('fxy',0,1,0,1) 显示的结果就为该积分:

(2)函数为: function f=fzz(x,y) global ki;

ki=ki+1; %ki用于统计被积函数的调用次数 f=cos(x+y); end

再输入: global ki; ki=0;

I=dblquad('fzz',0,pi,0,pi) ki

得到的显示的积分结果为:

本文来源:https://www.bwwdw.com/article/ffd2.html

Top