雅可比法实验报告matlab,matlab实验1_MATELAB课程设计_doc_大学课件预览_高等教育资讯网...

一、课程所属类型及服务专业本课程是理工科专业课程,适用专业:信科,数本,工程类专业二、实验教学目的和要求

MATLAB是一种以数值计算和数据图示为主的计算机软件,并包含适应多个学科的专业软件包,以及完善程序开发功能。 本课程要求学生掌握MATLAB的数据类型、矩阵输入和操作方法、语法结构、函数的使用以及二维、三维绘图功能,并能够熟练地将MATLAB应用于学习中,解决相关课程中的复杂的数学计算问题。上机操作是本课程重要的教学环节,学生只有通过上机实习,才能领会MATLAB中众多功能,才能达到熟练应用的程度。本课程将一半的课时用于安排学生上机实习。

三、学时分配及实验项目表本课程实验共安排30学时,其中16学时为必选实验,14 学时为可选实验。

序号

实验项目

学时数

每组人数

实验类型

必选/可选

1

MATLAB基础知识

3

1

综合

必选

2

矩阵与数组

3

1

综合

必选

3

基本操作命令

3

1

综合

必选

4

高级操作命令

3

1

综合

必选

5

绘图功能

4

1

综合

可选

6

控制流语句

4

1

综合

必选

7

文件

4

1

综合

可选

8

MATLAB应用

6

1

综合

可选

四、实验课考核课内考查五、实验指导(参考)书实验报告

《MATLAB程序设计语言》,楼顺天,闫华梁,西安电子科技大学出版社,1997年

《科学计算与MATLAB语言》,刘卫国,2000年4月

《MATLAB命令大全》,姚东等,2000年6月。

六、实验项目信息

实验项目信息实验室名称:计算科学、数学建模 实验项目名称:Matlab语言及应用实验实验课程

Matlab语言及应用

课程代码

120415

实验类别

专业

实验依据

实验学时

30

实验类型

综合

实验专业

信科

每组人数

1

实验者

实验内容概述:学习使用Matlab,

本实验所需主要专用设备

设备名称

规格

数量/组

备注

计算机

P4 2.0G以上

1

实验3导数及偏导数计算

实验目的

1.进一步理解导数概念及其几何意义.

2.学习matlab的求导命令与求导法.

实验内容

1.学习matlab命令.

建立符号变量命令sym和syms调用格式:

x=sym(`x`),?建立符号变量x;

syms?x?y?z?,?建立多个符号变量x,y,z;

matlab求导命令diff调用格式:

diff(函数?)?,?求?的一阶导数?;?

diff(函数?,?n)?,?求?的n阶导数?(n是具体整数);?

diff(函数?,变量名?),求?对?的偏导数?;

diff(函数?,?变量名?,n)?,求?对?的n阶偏导数?;

matlab求雅可比矩阵命令jacobian,调用格式:

jacobian([函数?;函数?;?函数?],?[?])给出矩阵:

2.导数概念.?

导数是函数的变化率,几何意义是曲线在一点处的切线斜率.

(1)点导数是一个极限值.

例3.1.设?,用定义计算?.

解:?在某一点?的导数定义为极限:

我们记?,输入命令:

syms?h;limit((exp(0+h)-exp(0))/h,h,0)

得结果:ans=1.可知?

(2)导数的几何意义是曲线的切线斜率.

例3.2.画出?在?处(?)的切线及若干条割线,观察割线的变化趋势.

解:在曲线?上另取一点?,则?的方程是:

.即

取?,分别作出几条割线.

h=[3,2,1,0.1,0.01];a=(exp(h)-1)./h;x=-1:0.1:3;

plot(x,exp(x),’r’);hold?on

for?i=1:5;

plot(h(i),exp(h(i)),’r.’)

plot(x,a(i)*x+1)

end

axis?square

作出?在?处的切线?

plot(x,x+1,’r’)

从图上看,随着?与?越来越接近,割线?越来越接近曲线的割线.

3.求一元函数的导数.

(1)?的一阶导数.

例3.3.求?的导数.

解:打开matlab指令窗,输入指令:

dy_dx=diff(sin(x)/x).

得结果:

dy_dx=cos(x)/x-sin(x)/x^2.

matlab的函数名允许使用字母、空格、下划线及数字,不允许使用其他字符,在这里我们用dy_dx表示?.

例3.4.求?的导数.

解:?输入命令:

dy_dx=diff(log(sin(x))).

得结果:

dy_dx=cos(x)/sin(x).

在matlab中,函数?用log(x)表示,而log10(x)表示?.

例3.5.求?的导数.

解:?输入命令:dy_dx=diff((x^2+2*x)^20).

得结果:

dy_dx=20*(x^2+2*x)^19*(2*x+2).

注意?输入时应为2*x.

例3.6.求?的导数.

解:?输入命令:

dy_dx=diff(x^x).

得结果:

dy_dx?=x^x*(log(x)+1).

利用matlab?命令diff一次可以求出若干个函数的导数.

例3.7.求下列函数的导数:

1.?.

2.?.

3.?.

4.?.

解:?输入命令:

a=diff([sqrt(x^2-?2*x+5),cos(x^2)+2*cos(2*x),4^(sin(x)),

log(log(x))]).

得结果:

a=

[1/2/(x^2-2*x+5)^(1/2)*(2*x-2),-2*sin(x^2)*x-4*sin(2*x),?

4^sin(x)*cos(x)*log(4),1/x/log(x)].

dy1_dx=a(1)?.

dy1_dx=1/2/(x^2-2*x+5)^(1/2)*(2*x-2).

dy2_dx=a(2)?.

dy2_dx=-2*sin(x^2)*x-4*sin(2*x).

dy3_dx=a(3)?.

dy3_dx=4^sin(x)*cos(x)*log(4).

dy4_dx=a(4)?.

dy4_dx=1/x/log(x).

由本例可以看出,matlab函数是对矩阵或向量进行操作的,a(i)表示向量a的第i个分量.

(2)参数方程所确定的函数的导数.

设参数方程?确定函数?,则?的导数?.

例3.8.设?,求?.

解:?输入命令:

dx_dt=diff(a*(t-sin(t)));dy_dt=diff(a*(1-cos(t)));

dy_dx=dy_dt/dx_dt.

得结果:

dy_dx=sin(t)/(1-cos(t)).

其中分号的作用是不显示结果.

4.求多元函数的偏导数.

例3.9.设?u=?求?u的一阶偏导数.

解:?输入命令:

diff((x^2+y^2+z^2)^(1/2),?x).

得结果:

ans=1/(x^2+y^2+z^2)^(1/2)*x.

在命令中将末尾的x换成y将给出y的偏导数:

ans=1/(x^2+y^2+z^2)^(1/2)*y.

也可以输入命令:

jacobian((x^2+y^2+z^2)^(1/2),[x?y]).

得结果:

ans=[1/(x^2+y^2+z^2)^(1/2)*x,?1/(x^2+y^2+z^2)^(1/2)*y]

给出矩阵?.

例3.10.求下列函数的偏导数:

1.?.

2.?.

解:?输入命令:

diff(atan(y/x).

得结果:

ans=-y/x^2/(1+y^2/x^2).

输入命令:

diff(atan(y/x),?y).

得结果:

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

输入命令:

diff(x^y,?x).

得结果:

ans=x^y*y/x.

输入命令:

diff(x^y,?y).

得结果:

ans=x^y*log(x).

使用jacobian命令求偏导数更为方便.

输入命令:

jacobian([atan(y/x),x^y],[x,y]).

得结果:

ans=[?-y/x^2/(1+y^2/x^2),1/x/(1+y^2/x^2)]

[x^y*y/x,x^y*log(x)].

5.求高阶导数或高阶偏导数.

例3.11.设?,求?.

解:输入指令:

diff(x^2*exp(2*x),x,20).

得结果:

ans?=

99614720*exp(2*x)+20971520*x*exp(2*x)+1048576*x^2*exp(2*x)

例3.12.设?,求?.

解:输入命令:

diff(x^6-3*y^4+2*x^2*y^2,x,2)

可得到?:

ans=30*x^4+4*y^2.

将命令中最后一个x换为y得?:

ans=-36*y^2+4*x^2.

输入命令:

diff(diff(x^6-3*y^4+2*x^2*y^2,x),y)

可得?:

ans=8*x*y

同学们可自己计算?比较它们的结果.

注意命令:diff(x^6-3*y^4+2*x^2*y^2,x,y),是对y求偏导数,不是求?.

6.求隐函数所确定函数的导数或偏导数

例3.13.设?,求?

解:?,先求?,再求?.

输入命令:

df_dx=diff(log(x)+exp(-y/x)-exp(1),x)

得到?:

df_dx=1/x+y/x^2*exp(-y/x).

输入命令:

df_dy=diff(log(x)+exp(-y/x)-exp(1),y)

得到?:

df_dy=-1/x*exp(-y/x)

输入命令:

dy_dx=-df_dx/df_dy

可得所求结果:

dy_dx=-(-1/x-y/x^2*exp(-y/x))*x/exp(-y/x).

例3.14.设?,求?

解:?

输入命令:

a=jacobian(sin(x*y)+cos(y*z)+tan(z*x),[x,y,z])

可得矩阵?

a=

[cos(x*y)*y+(1+tan(z*x)^2)*z,cos(x*y)*x-sin(y*z)*z,

-sin(y*z)*y+(1+tan(z*x)^2)*x].

输入命令:

dz_dx=-a(1)/a(3)

得:

dz_dx=

(-cos(x*y)*y-(1+tan(z*x)^2)*z)/(-sin(y*z)*y+(1+tan(z*x)^2)*x)

输入命令:

dz_dy=-a(2)/a(3)

得:

dz_dy=

(-cos(x*y)*x+sin(y*z)*z)/(-sin(y*z)*y+(1+tan(z*x)^2)*x)

实验7 矩阵与线性方程组

实验目的:

1.掌握matlab求矩阵的秩命令.

2.掌握matlab求方阵的行列式命令.

3.理解逆矩阵概念,掌握matlab求逆矩阵命令.

4.会用matlab求解线性方程组.

实验内容:

1.矩阵的秩.

指令rank(A)将给出矩阵A的秩.

例1:a=[3?2?-1?-3?-2;2?-1?3?1?-3;7?0?5?-1?-8]

a?=

32-1-3-2

2-131-3

705-1-8

rank(a)

ans?=

2

2.方阵的行列式.

指令det(A)给出方阵A的行列式.

例2:

b=[1?2?3?4;2?3?4?1;3?4?1?2;4?1?2?3];

det(b)

ans?=

160

det(b')

ans?=

160

c=b;c(:,1)=2*b(:,1);

det(c)

ans?=

320

det(b(:,[3?2?1?4]))

ans?=

-160

d=b;d(2,:);

det(d)

ans?=

160

你能解释上例中的运算结果吗?在这里我们实际上验证了行列式的性质.

3.逆矩阵

指令inv(A)给出方阵A的逆矩阵,如果A不可逆,则inv(A)给出的矩阵的元素都是Inf.

例3:设?,求?的逆矩阵.

解:输入指令:

A=[1?2?3;2?2?1;3?4?3];

B=inv(A)

B?=

1.00003.0000-2.0000

-1.5000-3.00002.5000

1.00001.0000-1.0000

还可以用伴随矩阵求逆矩阵,打开m文件编辑器,建立一个名为companm的M-文件文件内容为:

function?y=companm(x)

[n,m]=size(x);

y=[];

for?j=1:n;

a=[];

for?i=1:n;

x1=det(x([1:i-1,i+1:n],[1:j-1,j+1:n]))*(-1)^(i+j);

a=[a,x1];

end

y=[y;a];

end

利用该函数可以求出一个矩阵的伴随矩阵.

输入命令:

C=1/det(A)*companm(A)

C?=

1.00003.0000-2.0000

-1.5000-3.00002.5000

1.00001.0000-1.0000

利用初等变换也可以求出逆矩阵,构造n行2n列的矩阵(A?E),并进行行初等变换,当把A变为单位矩阵时,E就变成了A的逆矩阵.利用matlab命令rref可以求出矩阵的行简化阶梯形.输入命令:

D=[A,eye(3)]

D?=

123100

221010

343001

rref(D)

ans?=

1.0000001.00003.0000-2.0000

01.00000-1.5000-3.00002.5000

001.00001.00001.0000-1.0000

线性方程组?的求解是用矩阵除来完成的,?,当?且?可逆时,给出唯一解.这时矩阵除?相当于?;当?时,矩阵除给出方程的最小二乘解;当?时,矩阵除给出方程的最小范数解.

例4:解方程组:?

解:输入命令:

a=[1?-1?1?2;1?1?-2?1;1?1?1?0;1?0?1?-1];

b=[1;1;2;1];

x=a\b

x?=

0.8333

0.7500

0.4167

0.2500

输入命令:

z=inv(a)*b

z?=

0.8333

0.7500

0.4167

0.2500

例5:解方程组:?

解:方程的个数和未知数不相等,用消去法,将增广矩阵化为行简化阶梯形,如果系数矩阵的秩不等于增广矩阵的秩,则方程组无解;如果系数矩阵的秩等于增广矩阵的秩,则方程组有解,方程组的解就是行简化阶梯形所对应的方程组的解.输入命令:

a=[2?1?1?-1?-2?2;1?-1?2?1?-1?4;2?-3?4?3?-1?8];

rref(a)

ans?=

100000

010-1-10

0010-12

由结果看出,?,?为自由未知量,方程组的解为:

例6:解方程组:?

解:输入命令:

a=[1?-1?-1?1;1?-1?1?-3;1?-1?0?-1;1?-1?-2?3];

rref(a)

ans?=

1-10-1

001-2

0000

0000

由结果看出,?,?为自由未知量,方程组的解为:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值