matlab课后知识题目解析第四章
- 格式:doc
- 大小:1.55 MB
- 文档页数:29
matlab第四章课后作业解答第四章习题解答1、求下列多项式的所有根,并进行验算。
(3)267235865x x x x-+-(4)4)32(3-+x 解:>> p=zeros(1,24); >> p(1)=5;p(17)=-6;p(18)=8;p(22)=-5; >> root=roots(p)root =0.97680.9388 + 0.2682i0.9388 - 0.2682i0.8554 + 0.5363i0.8554 - 0.5363i0.6615 + 0.8064i0.6615 - 0.8064i0.3516 + 0.9878i0.3516 - 0.9878i-0.0345 + 1.0150i-0.0345 - 1.0150i-0.4609 + 0.9458i-0.4609 - 0.9458i-0.1150 + 0.8340i-0.1150 - 0.8340i-0.7821 + 0.7376i-0.7821 - 0.7376i-0.9859 + 0.4106i-0.9859 - 0.4106i-1.0416-0.7927>> polyval(p,root)ans =1.0e-012 *-0.07120.0459 - 0.0081i0.0459 + 0.0081i-0.0419 + 0.0444i-0.0419 - 0.0444i0.0509 + 0.0929i0.0509 - 0.0929i-0.2059 + 0.0009i-0.2059 - 0.0009i-0.0340 + 0.0145i-0.0340 - 0.0145i0.1342 + 0.0910i0.1342 - 0.0910i0.0025 + 0.0027i0.0025 - 0.0027i-0.0077 + 0.4643i-0.0077 - 0.4643i-0.3548 - 0.1466i-0.3548 + 0.1466i-0.0251-0.0073(4) >> p1=[2 3];>> p=conv(conv(p1,p1),p1)-[0 0 0 4]; >> root=roots(p)root =-1.8969 + 0.6874i-1.8969 - 0.6874i-0.7063>> polyval(p,root)ans =1.0e-014 *-0.7105 - 0.6217i-0.7105 + 0.6217i6、求解下列方程组在区域1,0<<βα内的解-=+=.sin 2.0cos 7.0,cos 2.0sin 7.0βαββαα 解:以初值)5.0,5.0(),(00=βα进行求解>> fun=inline('[0.7*sin(x(1))+0.2*cos(x(2))-x(1),0.7*cos(x(1))-0.2*sin(x(2))-x(2)]');>> [x,f,h]=fsolve(fun,[0.5 0.5])Optimization terminated: first-order optimality is less than options.TolFun.x =0.5265 0.5079f =1.0e-007 *-0.1680 -0.2712h =1因而,该方程组的近似根为5079.0,5265.0==βα。
a=input('请输入一个4位数:');while (a<1000|a>9999)a=input('输入错误,请重新输入一个4位数:'); endb=fix(a/1000);c=rem(fix(a/100),10);d=rem(fix(a/10),10);e=rem(a,10);b=b+7;c=c+7;d=d+7;e=e+7;b=rem(b,10);c=rem(c,10);d=rem(d,10);e=rem(e,10);g=b;b=d;d=g;g=c;c=e;e=g;a=1000*b+100*c+10*d+e;disp(['加密后:',num2str(a)])逻辑表达式法:a=input('请输入a: ');b=input('请输入b: ');c=input('请输入c: ');x=0.5:1:5.5;x1=(x>=0.5&x<1.5);x2=(x>=1.5&x<3.5);x3=(x>=3.5&x<=5.5);y1=a.*(x.^2)+b.*x+c;y2=a*(sin(b)^c)+x;y3=log(abs(b+c./x));y=y1.*x1+y1.*x2+y3.*x3; disp(y)if语句法:a=input('请输入a: ');b=input('请输入b: ');c=input('请输入c: ');for x=0.5:1:5.5if x>=0.5 & x<1.5y=a.*(x.^2)+b.*x+c elseif x>=1.5 & x<3.5西安建筑科技大学陈y=a*(sin(b)^c)+xelseif x>=3.5 & x<5.5y=log(abs(b+c./x))endendswitch语句法:a=input('请输入a: ');b=input('请输入b: ');c=input('请输入c: ');for x=0.5:1:5.5switch floor(x/0.5)case {1,2}y=a.*(x.^2)+b.*x+c;case {3,4,5,6}y=a*(sin(b)^c)+x;case {7,8,9,10}y=log(abs(b+c./x));enddisp(y)end3.x=fix(rand(1,20)*89)+10;x1=mean(x);n=find(rem(x,2)==0 & x<x1);disp(['小于平均数的偶数是:',num2str(x(n))]);4.(1)A=input('请输入20个数的一个行向量:');a=A(1);b=A(1);for m=Aif a>=ma=m;elseif b<=mb=m;endenddisp(['最小数是:',num2str(a)])disp(['最大数是:',num2str(b)])(2)A=input('请输入20个数的一个行向量:');西安建筑科技大学陈maxval=max(A)minval=min(A)5.s=0;for a=0:63c=2^a;s=s+c;enddisp(['2的0次方到63次方的和是:',num2str(s)])k=0:63n=2.^ks=sum(n)6.(1)sum1=0;for n=1:100x=(-1)^(n+1)*(1/n);sum1=sum1+x;enddisp(['当n取100时: sum=',num2str(sum1)])sum2=0;for n=1:1000x=(-1)^(n+1)*(1/n);sum2=sum2+x;enddisp(['当n取1000时: sum=',num2str(sum2)])sum3=0;for n=1:10000x=(-1)^(n+1)*(1/n);sum3=sum3+x;enddisp(['当n取10000时:sum=',num2str(sum3)])(2)sum1=0;n1=0;for n=1:2:100x=(-1)^n1*(1/n);sum1=sum1+x;西安建筑科技大学陈n1=n1+1;enddisp(['当n取100时: sum=',num2str(sum1)])sum2=0;n2=0;for n=1:2:1000x=(-1)^n2*(1/n);sum2=sum2+x;n2=n2+1;enddisp(['当n取1000时: sum=',num2str(sum2)])sum3=0;n3=0;for n=1:2:10000x=(-1)^n3*(1/n);sum3=sum3+x;n3=n3+1;enddisp(['当n取10000时:sum=',num2str(sum3)])(3)sum1=0;for n=1:100x=1/(4^n);sum1=sum1+x;enddisp(['当n取100时: sum=',num2str(sum1)])sum2=0;for n=1:1000x=1/(4^n);sum2=sum2+x;enddisp(['当n取1000时: sum=',num2str(sum2)])sum3=0;for n=1:10000x=1/(4^n);sum3=sum3+x;enddisp(['当n取10000时:sum=',num2str(sum3)])西安建筑科技大学陈(4)sum1=1;for n=1:100x=4*n*n/(2*n-1)/(2*n+1);sum1=sum1*x;enddisp(['当n取100时: sum=',num2str(sum1)])sum2=1;for n=1:1000x=4*n*n/(2*n-1)/(2*n+1);sum2=sum2*x;enddisp(['当n取1000时: sum=',num2str(sum2)])sum3=1;for n=1:10000x=4*n*n/(2*n-1)/(2*n+1);sum3=sum3*x;enddisp(['当n取10000时:sum=',num2str(sum3)])7.函数文件function f=fibnacci(n)if n==1 | n==2f=1;elsef=fibnacci(n-1)+fibnacci(n-2); end命令文件:shulie=[];for k=1:nshulie=[shulie fibnacci(k)]; endshulie8.function [f1,f2]=juzhenji(x1,x2)f1=x1*x2;f2=x1.*x2;命令文件:西安建筑科技大学陈clear alla=input('请输入一个矩阵:');b=input('请再输入一个矩阵:(注意:两矩阵要可以相乘)'); [f1,f2]=juzhenji(a,b);disp(f1)disp(f2)9.function sum=qiuhe(n,m)if n<=1sum=0;elsesum=n^m+qiuhe(n-1,m);end命令文件:clear ally=qiuhe(100,1)+qiuhe(50,2)+qiuhe(10,-1);disp(y)10.s=0;a=[12,13,14;15,16,17;18,19,20;21,22,23];for k=afor j=1:4if rem(k(j),2)~=0 s=s+k(j);endendendss =108(2)global xx=1:2:5;y=2:2:6;sub(y);xyfunction fun=sub(z) global xz=3*x;x=x+z;西安建筑科技大学陈x =4 12 20y =2 4 6。
%Exerc ise 1(1)r oots([1 11])%Exer cise1(2)roots([3 0 -4 0 2 -1])%Exerc ise 1(3)p=zero s(1,24);p([1 17 1822])=[5 -6 8 -5];ro ots(p)%E xerci se 1(4)p1=[2 3];p2=conv(p1,p1);p3=co nv(p1, p2);p3(end)=p3(en d)-4; %原p3最后一个分量-4r oots(p3)%Exer cise2fun=inli ne('x*log(sqrt(x^2-1)+x)-sqrt(x^2-1)-0.5*x');fzer o(fun,2)%Exer cise3fun=inli ne('x^4-2^x');fplot(fun,[-2 2]);gr id on;fze ro(fu n,-1),fzer o(fun,1),f minbn d(fun,0.5,1.5)%Exe rcise 4fu n=inl ine('x*sin(1/x)','x');fp lot(f un, [-0.10.1]);x=z eros(1,10);fori=1:10, x(i)=fz ero(f un,(i-0.5)*0.01);end;x=[x,-x]%Ex ercis e 5f un=in line('[9*x(1)^2+36*x(2)^2+4*x(3)^2-36;x(1)^2-2*x(2)^2-20*x(3);16*x(1)-x(1)^3-2*x(2)^2-16*x(3)^2]','x');[a,b,c]=fso lve(f un,[0 0 0])%E xerci se 6fun=@(x)[x(1)-0.7*si n(x(1))-0.2*cos(x(2)),x(2)-0.7*cos(x(1))+0.2*sin(x(2))]; [a,b,c]=fsolv e(fun,[0.5 0.5])%E xerci se 7clear; clo se; t=0:p i/100:2*pi;x1=2+sqr t(5)*cos(t); y1=3-2*x1+sq rt(5)*sin(t);x2=3+s qrt(2)*cos(t);y2=6*sin(t);pl ot(x1,y1,x2,y2); gri d on; %作图发现4个解的大致位置,然后分别求解y1=fsolv e('[(x(1)-2)^2+(x(2)-3+2*x(1))^2-5,2*(x(1)-3)^2+(x(2)/3)^2-4]',[1.5,2])y2=fsolv e('[(x(1)-2)^2+(x(2)-3+2*x(1))^2-5,2*(x(1)-3)^2+(x(2)/3)^2-4]',[1.8,-2])y3=fsol ve('[(x(1)-2)^2+(x(2)-3+2*x(1))^2-5,2*(x(1)-3)^2+(x(2)/3)^2-4]',[3.5,-5])y4=fso lve('[(x(1)-2)^2+(x(2)-3+2*x(1))^2-5,2*(x(1)-3)^2+(x(2)/3)^2-4]',[4,-4])%Exerc ise 8(1)c lear;fun=inlin e('x.^2.*(x.^2-x-2)');fp lot(f un,[-2 2]);grid on;%作图观察x(1)=-2;x(2)=fminb nd(fu n,-1,-0.5);x(4)=fmi nbnd(fun,1,2);fun2=inlin e('-x.^2.*(x.^2-x-2)');x(3)=f minbn d(fun2,-0.5,0.5);x(5)=2feval(fun,x)%答案: 以上x(2)(4)是局部极小,x(1)(3)(5)是局部极大,从最后一句知道x(1)全局最大, x(4)最小。
《MATLAB 原理及应用》实验报告三.课后练习题答案1.为 ⎪⎩⎪⎨⎧<-=>+=01001x x x xx x y 编写赋值程序。
程序如下:①建立如下的M 文件:x=input('x=');%让用户通过键盘输入数值、字符串或表达式if x>0y=x+1;elseif x==0y=x;else x<0y=x-1;e nd程序执行结果如下>> kh1 %在当前工作目录下,文件名为“kh.1.m ” x=1>> yy =22.使用for ... end循环的array向量编程求出1+3+5...+100 的值程序如下:sum=0;>> for k=1:2:100sum=sum+k;end>> sumsum =25003.计算1+3+5...+100 的值,当和大于1000时终止计算。
程序如下:sum=0;for m=1:2:100; %建立1 3 5….100的向量if sum<=1000 %如果sum小于1000则可以继续加sum=sum+m; %累加elsebreak; %若sum的结果不符合条件就跳出整个循环endend结果为:sum =1024k =653.1计算从1开始多少个自然数之和超过100。
程序如下:>> sum=0;n=0;>> while sum<=100n=n+1;sum=sum+n;end结果为:n =14sum =1054.求1!+2!+3!+……+8!的值程序如下:n=1;sum=1;for m=2:8; %循环7次使得得到各次阶乘n=n*m;sum=sum+n; %累加end结果为:sum =462335.写程序,判断一年是否为闰年,符合下面两条件之一:(1990~2014)A、能被4整除,不能被100整除B、能被400整除程序如下count=0;for y=1990:2014;if((rem(y,4)==0&rem(y,100)~=0)|(rem(y,4)==0&rem(y,400)~=0));count=count+1;endend结果为:count =5。
第四章 线性代数问题的计算机求解一、实验内容:题目1.Jordan 矩阵是矩阵分析中一类很实用的矩阵,其一般形式为J= ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡--ααα 000010001-,例如J1= ⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡-----5000015000015000015000015 试利用diag()函数给出构造J1的语句。
【分析】该题为对角矩阵的问题。
对J 要利用diag()能够构造对角矩阵和次对角矩阵的性质。
J1只需对角矩阵和次对角矩阵相加即可。
这里需要对diag()函数的调用。
如A=diag(V)---已知向量生成对角矩阵,A=diag(V,k)—生成主对角线上第k 条对角线为V 的矩阵(其中k 可为正负)【解答】:输入如下语句:>>J1=diag([-5 -5 -5 -5 -5])+diag([1 1 1 1],1) 按ENTER 键,显示如下: J1=-5 1 0 0 0 0 -5 1 0 0 0 0 -5 1 0 0 0 0 -5 1 0 0 0 0 -5题目5.试求出Vandermonde 矩阵A=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡11111234234234234234ee e e d d d d c c c c b b b ba a a a ,的行列式,并以最简的形式显示结果。
【求解】该问题有两个知识点。
一个构造是Vandermonde 矩阵,另一个是求矩阵的行列式。
前者可以利用书中编写的面向符号矩阵的vander()函数构造出Vandermonde 矩阵。
需要用到V=vander(C)来调用。
后者可以用MATLAB 的det()函数来求解,他会自动采用解析解法求出其行列式的值。
需要注意运用det()的前提是符号矩阵,本题中A 已是符号矩阵,所以不用转换。
最后,用simple()函数简化一下即可。
【解答】:(1)构造矩阵:输入如下语句:>>syms a b c d e; A=vander([a b c d e])按ENTER 键,显示如下: A=[ a^4, a^3, a^2, a, 1] [ b^4, b^3, b^2, b, 1] [ c^4, c^3, c^2, c, 1] [ d^4, d^3, d^2, d, 1] [ e^4, e^3, e^2, e, 1](2)以最简单的形式输出行列式: 输入如下语句:>>det(A),simple(ans) 按ENTER 键,显示如下: ans=(c-d)*(b-d)*(b-c)*(a-d)*(a-c)*(a-b)*(-d+e)*(e-c)*(e-b)*(e-a)15. 试求出线性代数方程组X ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡6246551223177967=⎥⎦⎤⎢⎣⎡21301012,并验证解的正确性 【分析】:该题为线性方程的计算机求解问题。
matlab1-4章作业及复习思考(1)第⼀章1.Matlab的⽂件有那些类型,各类型⽂件的作⽤是什么?答:M⽂件——在MATLAB命令窗⼝中键⼊⽂件名,可以执⾏M⽂件中的规定的计算任务或某种功能;MAT⽂件——是MATLAB的⼆进制数据⽂件,⽤于保存所使⽤的数据,是MATLAB 特有的数据存储格式;MEX⽂件——是经过MATLAB编译系统编译的⼆进制⽂件,可以被直接调⼊MATLAB系统中运⾏;图形⽂件——⽤来存储由MATLAB得到的图形⽂件。
2.说明两种M⽂件的异同答:共同点:在MATLAB命令窗⼝中键⼊⽂件名,可以执⾏M⽂件中的规定的计算任务或某种功能。
区别⼀:程序M⽂件中创建的变量都是MATLAB⼯作空间中的变量,⼯作空间的其他程序或函数可以共享;⽽函数M⽂件中创建的所有变量除了全程变量外,均为局限于函数运⾏空间内的局部变量;——类似于主程序区别⼆:函数M⽂件可以使⽤传递参数,所以函数M⽂件的调⽤式中可以有输⼊参数和输出参数,⽽程序M⽂件则没有这种功能。
——类似于函数3.如何查看Matlab的帮助答:(1) 单击MATLAB主窗⼝⼯具栏中的Help按钮。
(2) 在命令窗⼝中输⼊helpwin、helpdesk或doc。
(3) 选择Help菜单中的“MATLABHelp”选项。
MATLAB帮助命令包括help、lookfor以及模糊查询获得帮助:1、help 显⽰所有的帮助⽬录2、help ⽬录名(3) help命令名或函数名或符号第⼆章1矩阵元素的输⼊有那些⽅法?在MATLAB语⾔中,矩阵可以⽤⼏种不同的⽅式输⼊:(1) 以直接列出元素的形式输⼊;(2) 通过语句和函数产⽣;(3) 建⽴在M⽂件中;(4) 从外部的数据⽂件中装⼊;2掌握格式化输⼊数据的⽅法3总结MATLAB中⽤到的各种符号的含义及其⽤法。
矩阵转置: ⽤符号' 来表⽰,对复数矩阵,符号' 完成共扼转置。
要完成⾮共扼转置,则应使⽤“.'”或conj(z')矩阵加减:符号+和-是加减运算符。
第1章 MATLAB概论1.1与其他计算机语言相比较,MATLAB语言突出的特点是什么?MATLAB具有功能强大、使用方便、输入简捷、库函数丰富、开放性强等特点。
1.2 MATLAB系统由那些部分组成?MATLAB系统主要由开发环境、MATLAB数学函数库、MATLAB语言、图形功能和应用程序接口五个部分组成。
1.3 安装MATLAB时,在选择组件窗口中哪些部分必须勾选,没有勾选的部分以后如何补安装?在安装MATLAB时,安装内容由选择组件窗口中个复选框是否被勾选来决定,可以根据自己的需要选择安装内容,但基本平台(即MATLAB选项)必须安装。
第一次安装没有选择的内容在补安装时只需按照安装的过程进行,只是在选择组件时只勾选要补装的组件或工具箱即可。
1.4 MATLAB操作桌面有几个窗口?如何使某个窗口脱离桌面成为独立窗口?又如何将脱离出去的窗口重新放置到桌面上?在MATLAB操作桌面上有五个窗口,在每个窗口的右上角有两个小按钮,一个是关闭窗口的Close按钮,一个是可以使窗口成为独立窗口的Undock按钮,点击Undock按钮就可以使该窗口脱离桌面成为独立窗口,在独立窗口的view菜单中选择Dock ……菜单项就可以将独立的窗口重新防止的桌面上。
1.5 如何启动M文件编辑/调试器?在操作桌面上选择“建立新文件”或“打开文件”操作时,M文件编辑/调试器将被启动。
在命令窗口中键入edit命令时也可以启动M文件编辑/调试器。
1.6 存储在工作空间中的数组能编辑吗?如何操作?存储在工作空间的数组可以通过数组编辑器进行编辑:在工作空间浏览器中双击要编辑的数组名打开数组编辑器,再选中要修改的数据单元,输入修改内容即可。
1.7 命令历史窗口除了可以观察前面键入的命令外,还有什么用途?命令历史窗口除了用于查询以前键入的命令外,还可以直接执行命令历史窗口中选定的内容、将选定的内容拷贝到剪贴板中、将选定内容直接拷贝到M文件中。
第4章 MATLAB程序流程控制习题4一、选择题1.下列关于脚本文件和函数文件的描述中不正确的是()。
AA.函数文件可以在命令行窗口直接运行B.去掉函数文件第一行的定义行可转变成脚本文件C.脚本文件可以调用函数文件D.函数文件中的第一行必须以function开始2.下列程序的输出结果是()。
Dy=10;if y==10y=20;elseif y>0y=30enddisp(y)A.1 B.30 C.10 D.203.有以下语句:a=eye(5);for n=a(2:end,:)for循环的循环次数是()。
CA.3 B.4 C.5 D.104.设有程序段k=10;while kk=k-1end则下面描述中正确的是()。
AA.while循环执行10次B.循环是无限循环C.循环体语句一次也不执行D.循环体语句执行一次5.有以下程序段:x=reshape(1:12,3,4);m=0;n=0;for k=1:4if x(:,k)<=6m=m+1;elsen=n+1;endend则m和n的值分别是()。
CA.6 6 B.2 1 C.2 2 D.1 26.调用函数时,如果函数文件名与函数名不一致,则使用()。
A A.函数文件名B.函数名C.函数文件名或函数名均可D.@函数名7.如果有函数声明行为“function [x,y,z]=f1(a,b,c)”,则下述函数调用格式中错误的是()。
BA.x=f1(a,b,c) B.[x,y,z,w]=f1(a,b,c)C.[x,b,z]=f1(a,y,c) D.[a,b]=f1(x,y,z)8.执行语句“fn=@(x) 10*x;”,则fn是()。
AA.匿名函数B.函数句柄C.字符串D.普通函数9.执行下列语句后,变量A的值是()。
D>> f=@(x,y) log(exp(x+y));>> A=f(22,3);A.22,3B.22 C.3 D.2510.程序调试时用于设置断点的函数是()。
习题4.1绘制图形)y t--=8t)(tsin(21e≤t并在横轴标注Time纵0≤轴标注“amplitude”,图形的标题为Decaying-oscillating Exponential t=0:0.1:8;y=1-2*exp(-t).*sin(t);plot(t,y,'k')grid ontitle('Decaying-oscillating Exponential')xlabel('Time');ylabel('amplitude')4.2绘制如下函数图形并加上适当的修饰3008.0)309.0cos(5)(22.0≤≤+︒-=--t e t e t y ttt=0:0.1:30;y=5*exp(-0.2*t).*cos(0.9*t-pi/6); plot(t,y,'r:')4.3在同一张图中绘制下列函数曲线100625.0)24083.2cos(23.1)(625.0)(≤≤+︒+==t t t z t yt=0:0.1:10;y=0.625;z=1.23*cos(2.83*t+4*pi/3)+0.625;plot(t,y,'r:')hold onplot(t,z,'b:')text(0,(0.625-1.23*0.5),'这是z(t=0)的位置')text(10,4*pi/3,'这是z(t=10)的位置')4.4对应于250≤≤t 区间内,在同一图中绘制下列函数曲线tt t te t e t y e t y et y ----+︒-===25.1)128554.0cos(02.2)(02.2)(25.1)(3.033.021t=0:0.1:25;y1=1.25*exp(-t);y2=2.02*exp(-0.3*t);y3=2.02*exp(-0.3*t).*cos(0.554*t-128)+1.25*exp(-t);plot(t,y1,'k')hold onplot(t,y2,'b')hold on plot(t,y3,'r')4.5已知椭圆的长、短轴分别为a=4,b=2,用“小红点线”画椭圆 {)cos()sin(t a x t b y ==t=0:pi/100:2*pi;a=4;b=2;x=a.*cos(t);y=b.*sin(t);plot(x,y,'r.')4.6在同一图形框中绘制两个子图,分别显示下列曲线x=0:0.01:10;y1=sin(2*x).*sin(3*x);y2=0.4*x;subplot(1,2,1),plot(x,y1,'r'),title('y1')subplot(1,2,2),plot(x,y2,'b'),title('y2')4.7试将图形分割成3个子图,并分别绘制lgx在100≤区间内对数坐0≤t标、x半对数坐标和y半对数坐标的函数曲线,并加上适当的图形修饰。
第4章数值运算习题4及解答1 根据题给的模拟实际测量数据的一组t和y(t)试用数值差分diff或数值梯度gradient指令计算y (t),然后把y(t)和y (t)曲线绘制在同一张图上,观察数值求导的后果。
(模拟数据从prob_data401.mat 获得) 〖目的〗强调:要非常慎用数值导数计算。
练习mat数据文件中数据的获取。
实验数据求导的后果把两条曲线绘制在同一图上的一种方法。
〖解答〗(1)从数据文件获得数据的指令假如prob_data401.mat 文件在当前目录或搜索路径上clearload prob_data401.mat(2 )用diff求导的指令dt=t (2)-t(1);yc=diff(y)/dt; %注意yc的长度将比y短1plot(t,y,'b',t(2:e nd),yc,'r')grid on(3 )用grade nt求导的指令(图形与上相似)dt=t (2)-t(1);yc=gradie nt(y)/dt;plot(t,y,'b',t,yc,'r')grid on1说明〗不到万不得已,不要进行数值求导。
假若一定要计算数值导数,自变量增量以dt要取得比原有数据相对误差高1、2个量级上。
求导会使数据中原有的噪声放大。
2 采用数值计算方法,画出y(x):千dt在[0,10]区间曲线,并计算y(4.5)。
〖提示〗指定区间内的积分函数可用cumtrapz 指令给出。
y(4.5)在计算要求不太高的地方可用find指令算得。
泪的〗指定区间内的积分函数的数值计算法和cumtrapz 指令。
find指令的应用。
〖解答〗dt=1e-4;t=0:dt:10; t=t+(t==O)*eps;f=si n( t)./t; s=cumtrapz(f)*dt;plot(t,s,'Li neWidth',3)ii=fi nd(t==4.5);s45=s(ii)s45 =1.6541s=trapz(exp(si n(x)43))*dxs =求函数f (x)e sin x的数值积分 f (x)dx,并请米用符号计算尝试复算1提示〗数值积分均可尝试。
第4章数值运算习题 4 及解答1 根据题给的模拟实际测量数据的一组t和)(t y试用数值差分diff或数值梯度gradient指令计算)(t y',然后把)(t y和)(t y'曲线绘制在同一张图上,观察数值求导的后果。
(模拟数据从prob_data401.mat获得)〖目的〗●强调:要非常慎用数值导数计算。
●练习mat数据文件中数据的获取。
●实验数据求导的后果●把两条曲线绘制在同一图上的一种方法。
〖解答〗(1)从数据文件获得数据的指令假如prob_data401.mat文件在当前目录或搜索路径上clearload prob_data401.mat(2)用diff求导的指令dt=t(2)-t(1);yc=diff(y)/dt; %注意yc的长度将比y短1plot(t,y,'b',t(2:end),yc,'r')grid on(3)用gradent 求导的指令(图形与上相似)dt=t(2)-t(1); yc=gradient(y)/dt; plot(t,y,'b',t,yc,'r') grid on〖说明〗● 不到万不得已,不要进行数值求导。
● 假若一定要计算数值导数,自变量增量dt 要取得比原有数据相对误差高1、2个量级以上。
● 求导会使数据中原有的噪声放大。
2 采用数值计算方法,画出dt ttx y x⎰=0sin )(在]10 ,0[区间曲线,并计算)5.4(y 。
〖提示〗● 指定区间内的积分函数可用cumtrapz 指令给出。
● )5.4(y 在计算要求不太高的地方可用find 指令算得。
〖目的〗● 指定区间内的积分函数的数值计算法和cumtrapz 指令。
● find 指令的应用。
〖解答〗dt=1e-4;t=0:dt:10;t=t+(t==0)*eps;f=sin(t)./t;s=cumtrapz(f)*dt; plot(t,s,'LineWidth',3) ii=find(t==4.5);s45=s(ii)s45 =3 求函数xexf3sin)(=的数值积分⎰=π) (dx xfs,并请采用符号计算尝试复算。
〖提示〗●数值积分均可尝试。
●符号积分的局限性。
〖目的〗●符号积分的局限性。
〖解答〗dx=pi/2000;x=0:dx:pi;s=trapz(exp(sin(x).^3))*dx s = 5.1370符号复算的尝试syms xf=exp(sin(x)^3); ss=int(f,x,0,pi)Warning: Explicit integral could not be found. > In sym.int at 58 ss =int(exp(sin(x)^3),x = 0 .. pi)4 用quad 求取dx x exsin 7.15⎰--ππ的数值积分,并保证积分的绝对精度为910-。
〖目的〗● quadl ,精度可控,计算较快。
● 近似积分指令trapz 获得高精度积分的内存和时间代价较高。
〖解答〗%精度可控的数值积分fx=@(x)exp(-abs(x)).*abs(sin(x)); format longsq=quadl(fx,-10*pi,1.7*pi,1e-7) sq =1.08784993815498%近似积分算法x=linspace(-10*pi,1.7*pi,1e7); dx=x(2)-x(1);st=trapz(exp(-abs(x)).*abs(sin(x)))*dx st =1.08784949973430%符号积分算法y='exp(-abs(x))*abs(sin(x))' si=vpa(int(y,-10*pi,1.7*pi),16) y =exp(-abs(x))*abs(sin(x)) si =1.0878494994129115 求函数5.08.12cos 5.1)5(sin )(206.02++-=t t t e t t f t 在区间]5,5[-中的最小值点。
〖目的〗● 理解极值概念的邻域性。
● 如何求最小值。
● 学习运用作图法求极值或最小值。
● 感受符号法的局限性。
〖解答〗(1)采用fminbnd 找极小值点在指令窗中多次运行以下指令,观察在不同数目子区间分割下,进行的极小值搜索。
然后从一系列极小值点中,确定最小值点。
clearft=@(t)sin(5*t).^2.*exp(0.06*t.*t)+1.8*abs(t+0.5)-1.5*t.*cos(2*t); disp('计算中,把[ -5,5] 分成若干搜索子区间。
')N=input(' 请输入子区间数 N ,注意使N>=1 ?');%该指令只能在指令窗中运行 t t=linspace(-5,5,N+1); f or k=1:N[tmin(k),fobj(k)]=fminbnd(ft,tt(k),tt(k+1));e nd[fobj,ii]=sort(fobj); %将目标值由小到大排列 t min=tmin(ii);%使极小值点做与目标值相应的重新排列fobj,tmin(2)最后确定的最小值点在10,,2,1 =N 的不同分割下,经观察,最后确定出最小值点是 -1.28498111480531 相应目标值是-0.18604801006545(3)采用作图法近似确定最小值点(另一方法)(A )在指令窗中运行以下指令: clearft=@(t)sin(5*t).^2.*exp(0.06*t.*t)+1.8*abs(t+0.5)-1.5*t.*cos(2*t);t=-5:0.001:5;ff=ft(t);plot(t,ff)grid on,shg(B)经观察后,把最小值附近邻域放到足够大,然后运行以下指令,那放大图形被推向前台,与此同时光标变为“十字线”,利用它点击极值点可得到最小值数据[tmin2,fobj2]=ginput(1)tmin2 =-1.28500000993975fobj2 =-0.18604799369136出现具有相同数值的刻度区域表明已达最小可分辨状态(4)符号法求最小值的尝试syms tfts=sin(5*t)^2*exp(0.06*t*t)-1.5*t*cos(2*t)+1.8*abs(t+0.5);dfdt=diff(fts,t); %求导函数tmin=solve(dfdt,t) %求导函数的零点fobj3=subs(fts,t,tmin) %得到一个具体的极值点 tmin =-.60100931947716486053884417850955e-2 fobj3 =.89909908144684551670208797723124〖说明〗● 最小值是对整个区间而言的,极小值是对邻域而言的。
● 在一个区间中寻找最小值点,对不同子区间分割进行多次搜索是必要的。
这样可以避免把极小值点误作为最小值点。
最小值点是从一系列极小值点和边界点的比较中确定的。
● 作图法求最小值点,很直观。
假若绘图时,自变量步长取得足够小,那么所求得的最小值点有相当好的精度。
● 符号法在本例中,只求出一个极值点。
其余很多极值点无法秋初,更不可能得到最小值。
6 设0)0(,1)0(,1)(2)(3)(22===+-dtdy y t y dt t dy dt t y d ,用数值法和符号法求5.0)(=t t y 。
〖目的〗● 学习如何把高阶微分方程写成一阶微分方程组。
● ode45解算器的导数函数如何采用匿名函数形式构成。
● 如何从ode45一组数值解点,求指定自变量对应的函数值。
〖解答〗(1)改写高阶微分方程为一阶微分方程组令dtt dy t y t y t y )()(),()(21==,于是据高阶微分方程可写出 ⎪⎩⎪⎨⎧++-==1)(3)(2)()()(21221t y t y dtt dy t y dt t dy(2)运行以下指令求y(t)的数值解format long ts=[0,1]; y0=[1;0];dydt=@(t,y)[y(2);-2*y(1)+3*y(2)+1];%<4>%匿名函数写成的ode45所需得导数函数[tt,yy]=ode45(dydt,ts,y0);y_05=interp1(tt,yy(:,1),0.5,'spline'), %用一维插值求y(0.5)y_05 =0.78958020790127(3)符号法求解syms t;ys=dsolve('D2y-3*Dy+2*y=1','y(0)=1,Dy(0)=0','t')ys_05=subs(ys,t,sym('0.5'))ys =1/2-1/2*exp(2*t)+exp(t)ys_05 =.78958035647060552916850705213780〖说明〗●第<4>条指令中的导数函数也可采用M函数文件表达,具体如下。
function S=prob_DyDt(t,y)S=[y(2);-2*y(1)+3*y(2)+1];7 已知矩阵A=magic(8),(1)求该矩阵的“值空间基阵”B ;(2)写出“A的任何列可用基向量线性表出”的验证程序(提示:利用rref检验)。
〖目的〗●体验矩阵值空间的基向量组的不唯一性,但它们可以互为线性表出。
●利用rref检验两个矩阵能否互为表出。
〖解答〗(1)A的值空间的三组不同“基”A=magic(8); %采用8阶魔方阵作为实验矩阵[R,ci]=rref(A);B1=A(:,ci) %直接从A中取基向量B2=orth(A) %求A值空间的正交基[V,D]=eig(A);rv=sum(sum(abs(D))>1000*eps); %非零特征值数就是矩阵的秩B3=V(:,1:rv) %取A的非零特征值对应的特征向量作基B1 =64 2 39 55 5417 47 4640 26 2732 34 3541 23 2249 15 148 58 59B2 =-0.3536 0.5401 0.3536-0.3536 -0.3858 -0.3536-0.3536 -0.2315 -0.3536-0.3536 0.0772 0.3536-0.3536 -0.0772 0.3536-0.3536 0.2315 -0.3536-0.3536 0.3858 -0.3536-0.3536 -0.5401 0.3536B3 =0.3536 0.6270 0.39130.3536 -0.4815 -0.24580.3536 -0.3361 -0.10040.3536 0.1906 -0.04510.3536 0.0451 -0.19060.3536 0.1004 0.33610.3536 0.2458 0.48150.3536 -0.3913 -0.6270(2)验证A的任何列可用B1线性表出B1_A=rref([B1,A]) %若B1_A矩阵的下5行全为0,%就表明A可以被B1的3根基向量线性表出B1_A =1 0 0 1 0 0 1 1 0 0 10 1 0 0 1 0 3 4 -3 -4 70 0 1 0 0 1 -3 -4 4 5 -70 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0B2_A=rref([B2,A])B2_A =Columns 1 through 71.0000 0 0 -91.9239 -91.9239 -91.9239 -91.9239 0 1.0000 0 51.8459 -51.8459 -51.8459 51.8459 0 0 1.0000 9.8995 -7.0711 -4.2426 1.4142 0 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 0Columns 8 through 11-91.9239 -91.9239 -91.9239 -91.923951.8459 -51.8459 -51.8459 51.8459-1.4142 4.2426 7.0711 -9.89950 0 0 00 0 0 00 0 0 00 0 0 00 0 0 0B3_A=rref([B3,A])B3_A =Columns 1 through 71.0000 0 0 91.9239 91.9239 91.9239 91.9239 0 1.0000 0 42.3447 -38.1021 -33.8594 29.6168 0 0 1.0000 12.6462 -16.8889 -21.1315 25.3741 0 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 0Columns 8 through 1191.9239 91.9239 91.9239 91.923925.3741 -21.1315 -16.8889 12.646229.6168 -33.8594 -38.1021 42.34470 0 0 00 0 0 00 0 0 00 0 0 00 0 0 0〖说明〗●magic(n)产生魔方阵。