admin 管理员组文章数量: 1087139
2024年2月19日发(作者:网页设计作品分析)
科学计算与数据处理实验报告
学
号
实验基于MATLAB的科学计算实验
姓 名
名称
实验目的
实验方案
1,分别用不同的方法举例创建一维数组。
2,用不同的方法创建高维数组。
3,分别用zeros,ones,eye,magic,randn创建全0数组,全1数组,单位数组,魔方数组,随机数组。
4,建立一个矩阵,分别用diag,fliplr,flipud,rot90,tril,triu命令举例求出矩阵的对角,转置,翻转,旋转,下三角,上三角矩阵。
5,创建一个字符数组,用deblank,strtrim,strrep,strread,strtok命令对字符数组进行运算,根据求出结果的特点,可知道这些命令的功能。
6,创建一个二维构架数组student,属性有name,sex,number,height四个,分别用fieldnames、getfield、setfield对数组进行操作,根据不同的结果可知道命令的功能。
7,建立两个数组,分别对数组进行表一的基本操作,查看运行结果。
8,建立一个矩阵,分别对该矩阵用norm、cond、det、rank、eig、null、chol、lu、qr、svd命令进行操作,查看运行结果,即可得到这些命令的功能。
9,对diff、gradient、roots、fzero、fsolve、fminbnd、fminsearch、fminunc、quadl这些命令分别举例,根据运行结果,即可知道这些命令的用法。
10,对(1)中的表达式用命令simple进行处理,即可得化简的表达式;对(2)中的方程式用solve命令处理,即可得到该方程的解。
1,(1)直接输入法:
c=[2,3,4]
c =
2 3 4
>> c=[2 3 4]
c =
1、 掌握MATLAB中数组的创建和操作方法
2、 掌握MATLAB中常用的数值计算方法
3、 掌握MATLAB中常用的符号计算方法
实验记录
2 3 4
(2) 步长生成法:
a=(1:3:30)
a =
1 4 7 10 13 16 19 22 25 28
(3)定数线性采样法:
B=linspace(1,30,3)
B =
1.0000 15.5000 30.0000
(4)定数对数采样法:
b=logspace(1,2,5)
b =
10.0000 17.7828 31.6228 56.2341 100.0000
2,(1)直接输入法:
c=[2,4;2,3]
c =
2 4
2 3
>> c=[2 4;2 3]
c =
2 4
2 3
(2)下标法:
>> for i=1:2
for j=1:2
for k=1:2
A(i,j,k)=i+j+k;
end
end
end
>> A(:,:,:)
ans(:,:,1) =
3 4
4 5
ans(:,:,2) =
4 5
5 6
(3)低维数组法:
>> d1=[1,2,3;4,5,6;7,8,9];
>> d2(:,:,1)=d1;
>> d2(:,:,2)=2*d1;
>> d2(:,:,3)=3*d1;
>> d2
d2(:,:,1) =
1 2 3
4 5 6
7 8 9
d2(:,:,2) =
2 4 6
8 10 12
14 16 18
d2(:,:,3) =
3 6 9
12 15 18
21 24 27
(4)创建函数法:
Cat函数:
>>a=[1,2,3;4,5,6];
>> b=[7,8,9;10,11,12];
>> c=cat(1,a,b)
c =
1 2 3
3
4 5 6
7 8 9
10 11 12
>> d=cat(2,a,b)
d =
1 2 3 7 8 9
4 5 6 10 11 12
Repmat函数:
>> e=repmat(a,2,3)
e =
1 2 3 1 2 3 1 2 3
4 5 6 4 5 6 4 5 6
1 2 3 1 2 3 1 2 3
4 5 6 4 5 6 4 5 6
>> e=repmat(a,3,2)
e =
1 2 3 1 2 3
4 5 6 4 5 6
1 2 3 1 2 3
4 5 6 4 5 6
1 2 3 1 2 3
4 5 6 4 5 6
Reshape函数:
f=reshape(c,3,4)
f =
1 10 8 6
4 2 11 9
7 5 3 12
3,(1)
zeros(3)
ans =
0 0 0
0 0 0
0 0 0
功能:全0矩阵
(2)
ones(2)
ans =
1 1
1 1
功能:全1矩阵
(3)
eye(2)
ans =
1 0
0 1
功能:建立对角矩阵
(4)
magic(3)
ans =
8 1 6
3 5 7
4 9 2
(5)
a=randn(4)
a =
-2.1707 0.5077 0.3803 0.0000
-0.0592 1.6924 -1.0091 -0.3179
-1.0106 0.5913 -0.0195 1.0950
0.6145 -0.6436 -0.0482 -1.8740
4,(1) Data=[1,2,3,4;5,6,7,8;9,10,11,12];
5
矩阵对角:
>> a=diag(Data)
a =
1
6
11
(2)转置:
b=fliplr(Data)
b =
4 3 2 1
8 7 6 5
12 11 10 9
(3)翻转:
c=flipud(Data)
c =
9 10 11 12
5 6 7 8
1 2 3 4
(4) 旋转:
d=rot90(Data)
d =
4 8 12
3 7 11
2 6 10
1 5 9
(5)下三角:
e=tril(Data)
e =
1 0 0 0
5 6 0 0
9 10 11 0
(6)上三角:
f=triu(Data)
f =
1 2 3 4
0 6 7 8
0 0 11 12
(7) >> d=diag(Data,-1)
d =
5
10
>> d=diag(Data,1)
d =
2
7
12
由以上结果知,diag(data,k)可以获得矩阵对角线上(k>0)或下(k<0)第k个对角线的数。
5,(1) string=['this is a book,','i like it']
string =
this is a book,i like it
(2) str=deblank(string)
str =
this is a book,i like it
(3) str=strtrim(string)
str =
this is a book,i like it
(4) str1=strrep(string,'i','you')
str1 =
thyous yous a book,you lyouke yout
(5) [A,B]=strread(string,'%s%s')
7
A =
'this'
'a'
'like'
B =
'is'
'book,i'
'it'
(6) str=strtok(string)
str =
this
6, (1)创建构架数组:
直接法:
>> student(1,1).sex='woman';
>> student(1,1).number='';
>> student(1,1).height=168;
>> student(2,1).name='wangsanshi';
>> student(2,1).sex='man';
>> student(2,1).number='';
>> student(2,1).height=180;
>> student
student =
2x1 struct array with fields:
name
sex
number
height
函数法:
>>
student=struct('name',{'xiadeping','wangsanshi'},'sex',{'woman','man'},'number',{'',''},'height',{168,178});
>> student
student =
1x2 struct array with fields:
name
sex
number
height
(2) >> fieldnames(student)
ans =
'name'
'sex'
'number'
'height''
功能:获取构架数组的属性名称
(3) >> for k=1:2
name{k}=getfield(student,{k,1},'name');
end
>> name
name =
'xiadeping' 'wangsanshi'
>> for k=1:2
name=getfield(student,{1,k},'name')
end
name =
xiadeping
name =
wangsanshi
功能:获取构架数组某一属性的值
(4)>> class=6;
>> student='xiadeping';
>> grades_xia=[89,90,93,95];
>> grades=[];
>> grades=setfield(grades,{class},student,'math',{4,21:24},grades_xia)
grades =
9
1x6 struct array with fields:
xiadeping
功能:设置域属性。
7 >> a=[1,3,5;3,5,0;2,3,4];
>> b=[3,4,5;7,5,8;3,0,6];
(1)矩阵加:
>> a+b
ans =
4 7 10
10 10 8
5 3 10
(2)矩阵减:
>> a-b
ans =
-2 -1 0
-4 0 -8
-1 3 -2
(3)矩阵乘:
>> a*b
ans =
39 19 59
44 37 55
39 23 58
(4)数组乘:
>> a.*b
ans =
3 12 25
21 25 0
6 0 24
(5)矩阵乘方:
>> a^2
ans =
20 33 25
18 34 15
19 33 26
(6)数组乘方:
>> a.^2
ans =
1 9 25
9 25 0
4 9 16
(7)矩阵左除:
>> ab
ans =
-0.2857 -4.5238 1.2381
1.5714 3.7143 0.8571
-0.2857 -0.5238 0.2381
(8)矩阵右除:
>> a/b
ans =
1.7368 -0.7895 0.4386
0.0000 1.0000 -1.3333
0.9474 -0.1579 0.0877
(9)数组左除:
>> a.b
ans =
3.0000 1.3333 1.0000
2.3333 1.0000 Inf
1.5000 0 1.5000
(10)数组右除:
>> a./b
ans =
0.3333 0.7500 1.0000
0.4286 1.0000 0
0.6667 Inf 0.6667
(11)克罗内克张量积:
>> kron(a,b)
11
ans =
3 4 5 9 12 15 15 20 25
7 5 8 21 15 24 35 25 40
3 0 6 9 0 18 15 0 30
9 12 15 15 20 25 0 0 0
21 15 24 35 25 40 0 0 0
9 0 18 15 0 30 0 0 0
6 8 10 9 12 15 12 16 20
14 10 16 21 15 24 28 20 32
6 0 12 9 0 18 12 0 24
(12)逻辑与:
>> a&b
ans =
1 1 1
1 1 0
1 0 1
(13)逻辑或:
>> a|b
ans =
1 1 1
1 1 1
1 1 1
(14)逻辑非:
>> ~a
ans =
0 0 0
0 0 1
0 0 0
(15)逻辑异或:
>> xor(a,b)
ans =
0 0 0
0 0 1
0 1 0
8,>> a=[1,2,3;4,2,3;4,5,8];
(1)范数:
>> norm(a)
ans =
11.9664
功能:求出矩阵的范数
(2)条件数:
>> cond(a)
ans =
104.4779
功能:求出矩阵的条件数
(3)行列式:
>> det(a)
ans =
-3
功能:求出行列式的值
(4)秩:
>> rank(a)
ans =
3
功能:求出行列式的秩
(5)特征值:
>> eig(a)
ans =
11.7446
-1.0000
0.2554
功能:求出行列式的特征值
(6)化零矩阵:
>> null(a)
ans =
Empty matrix: 3-by-0
13
功能:将矩阵化为空矩阵
(7)LU分解
>> a=[4,2,3;4,5,6;7,8,9];
>> [L,U]=lu(a)
L =
0.2500 0.5000 1.0000
1.0000 0 0
1.0000 1.0000 0
U =
4.0000 2.0000 3.0000
0 3.0000 5.0000
0 0 -0.2500
功能:将矩阵分解成一个上三角矩阵和一个通过变换行列成为下三角矩阵的乘积
(8)正交分解
>> a=[4,2,3;4,5,6;7,8,9];
>> [q,r]=qr(a)
q =
0.4444 -0.8852 0.1374
0.4444 0.3510 0.8242
0.7778 0.3052 -0.5494
r =
9.0000 9.3333 11.0000
0 2.4267 2.1978
0 0 0.4121
功能:将矩阵分解成一个上三角矩阵和一个矩阵的乘积
(9)奇异值分解:
>> a=[4,2,3;4,5,6;7,8,9];
>> [U,S,V]=svd(a)
U =
-0.2977 0.9368 -0.1840
-0.5081 -0.3186 -0.8002
-0.8082 -0.1448 0.5708
S =
17.2293 0 0
0 1.7502 0
0 0 0.2985
V =
-0.5154 0.8338 0.1977
-0.5573 -0.5014 0.6618
-0.6510 -0.2309 -0.7231
功能:U和V中分别是a的奇异向量,而S是a的奇异值
(10)Cholesky分解
>> a=[4,2,3;4,5,6;7,8,9];
>> [R,P]=chol(a)
R =
2.0000 1.0000 1.5000
0 2.0000 2.2500
0 0 1.2990
P =
0
功能:将正定矩阵对角线以及上三角上的值形成的矩阵产生一个上三角矩阵
9
(1) 求导:
>> syms x;
>> f1=diff(12*x^9+25*x^4+38*x)
f1 =
108*x^8 + 100*x^3 + 38
功能:求出多项式的导数
(2)求梯度:
>> [X,Y]=meshgrid(x);
>> z=X.*exp(-X.^2-Y.^2);
>> [px,py]=gradient(z,0.2,0.2)
15
px =
-0.3859 -0.3046 -0.1410 -0.0333 -0.0044 -0.0003 -0.0000
-0.1106 -0.0873 -0.0404 -0.0096 -0.0013 -0.0001 -0.0000
-0.0192 -0.0152 -0.0070 -0.0017 -0.0002 -0.0000 -0.0000
-0.0020 -0.0016 -0.0007 -0.0002 -0.0000 -0.0000 -0.0000
-0.0001 -0.0001 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000
-0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000
-0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000
py =
-0.4828 -0.2075 -0.0481 -0.0063 -0.0005 -0.0000 -0.0000
-0.3215 -0.1382 -0.0320 -0.0042 -0.0003 -0.0000 -0.0000
-0.0952 -0.0409 -0.0095 -0.0012 -0.0001 -0.0000 -0.0000
-0.0167 -0.0072 -0.0017 -0.0002 -0.0000 -0.0000 -0.0000
-0.0018 -0.0008 -0.0002 -0.0000 -0.0000 -0.0000 -0.0000
-0.0001 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000
-0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000
功能:求出梯度
(3)多项式求根:例如求解x^5-18x^3+34x^2+89=0
>> p=[1 0 -18 34 0 89];
>> r=roots(p)
r =
-5.0433
2.8785 + 1.2017i
2.8785 - 1.2017i
-0.3568 + 1.2986i
-0.3568 - 1.2986i
功能:求出方程的根
(4)零点:例如求函数f(x)=x^3-2x-5在2附近的零点
>> f=@(x)x.^3-2*x-5;
>> z=fzero(f,2)
z =
2.0946
>> f=@(x)x.^3-2*x-5;
>> z1=fsolve(f,3)
Equation solved.
fsolve completed because the vector of function values is near zero
as measured by the default value of the function tolerance, and
the problem appears regular as measured by the gradient.
z1 =
2.0946
(5)求极值:
Fminbnd 求极值:
>> f=@(x)x.^6-2*x+4;
>> x=fminbnd(f,0,5)
x =
0.8027
Fminsearch求极值
>> f=@(x)x.^6-2*x+4;
>> f=fminsearch(f,0)
f =
0.8028
Fminunc求极值:
>> f=@(x)x.^6-2*x+4;
>> x=fminunc(f,0)
Warning: Gradient must be provided for trust-region algorithm;
using line-search algorithm instead.
> In fminunc at 347
Local minimum found.
Optimization completed because the size of the gradient is less than
the default value of the function tolerance.
x =
17
0.8027
(6)求积分:例如求x.^6-2*x+4从-2到2的积分
>> f=@(x)x.^6-2*x+4;
>> y=quadl(f,-2,2)
y =
52.5714
10(1)化简:用simple命令
>> syms x
>> p=cos(x)+sqrt(-sin(x)^2);
>> R1=simple(p)
R1 =
cos(x) +i*sin(x)
(2)求解方程:用solve命令
>> syms x
>> f=(x+2)^x-2;
>> r=solve(f)
r =
0.
实验总结
Matlab 是一套高性能数值计算和可视化软件,它集数值分析,矩阵运算,信号处理和图形显示于一体,在系统建模和仿真、科学和工程绘图以及应用程序开发等方面有着广泛的应用。
其科学计算的功能主要包括1,数组的创建以及相互直接的运算;2,对矩阵的分析包括范数分析、条件数分析、矩阵的行列式、矩阵的化零矩阵等;3,对线性方程组的操作有求解非奇异线性方程组、奇异线性方程组、欠定线性方程组、超定线性方程租的解;4,将矩阵进行分解,分解的方法有Cholesky分解,不完全Cholesky分解,LU分解,不完全LU分解,QR分解,奇异值分解等;5,特征值分析,求解函数的零点,数值积分,概率论和数理统计等;6,数据分析:包括插值分析,曲线拟合,傅立叶分析,优化算法等7,可以将数据和函数实现可视化,形成清晰直观的曲线、图形供分析。
在实验的过程中出现过一些命令的用法不明确等问题,但是通过查询help文件以及上网查询等方法,都得到了比较圆满的解决,通过这次实验,使我对matlab的一些命令的用法和功能有了进一步的了解和掌握。
成绩评定
注:实验方案要详略得当、条理清晰,实验记录数据详实,实验总结应做高度归纳和提炼。
19
版权声明:本文标题:MATLAB基本操作实验 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1708310510a519256.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论