科学计算与数据处理实验报告
学 号 实验名称 实验目的 S 姓 名 基于MATLAB的科学计算实验 张园 1、 掌握MATLAB中数组的创建和操作方法 2、 掌握MATLAB中常用的数值计算方法 3、 掌握MATLAB中常用的符号计算方法 一、一维数组创建实验: (1)直接输入法: >> test=[1 2 3 4] >> test=[1;2;3;4] (2)步长生成法:>> test=1:0.5:10 (3)定数线性采样法:>> test = linspace(1,12,5) (4)定数对数采样法: >> logspace(2,6,4) 二、高维数组创建实验: (1)直接输入法: >> A=[1 2 3;4 5 6;7 8 9] (2)使用下标: >> clear,A(2,3,2)=1 (3)使用低维数组: >>clear,A=eye(3,4);A(:,:,2)=eye(3,4)*2;A(:,:,3)=eye(3,4)*3;A(:,:,4)=eye(3,4)*4 (4)使用创建函数(cat、repmat、reshape)创建高维数组: >> cat(3,[1,2,3;4,5,6],eye(2,3)*2,ones(2,3)) >> repmat([1,2;3,4],[1,2,3]) >> reshape(1:20,2,5,2) 三、标准数组创建实验: (1)全0矩阵:>> zeros(3) (2)全1矩阵:>> ones(5) (3)单位矩阵:>> eye(4) (4)magic矩阵:>> magic(4) (5)随机矩阵:>> randn(4) 四、矩阵变换实验:令Data=[1,2,3,4;5,6,7,8;9,10,11,12],分别使用diag、'、fliplr、flipud、rot90、tril、triu函数计算Data的对角、转置、翻转、旋转、三角矩阵,具体命令如下: >> Data=[1,2,3,4;5,6,7,8;9,10,11,12] >> diag(Data) >>(Data)' >> fliplr(Data) >> flipud(Data) >> rot90(Data) >> tril(Data) >> triu(Data) 五、字符串数组创建与操作实验: (1)创建字符串数组: 实验方案 >> arr=str2mat('I','am','a','student') (2)去掉字符串末尾的空格deblank:: 建立字符串,用abs函数验证空格的存在;用deblank去掉空格,用abs已经去掉空格 >> x='a n ';y=abs(x) >> z=deblank(x);w=abs(z) (3) 删除字符串开头和结尾的空格strtrim >> str1=' I am a student '; >> str2='I am a student '; >> x=strtrim(str1) >> y=strtrim(str2) (4) 执行简单的字符串替代strrep、 >> str1='I am a student.'; >> str2='student'; >> str3='teacher'; >> str=strrep(str1,str2,str3) (5)规范格式strread; >> strread('0.231','%5.3f') (6) 函数strtok找出由特定字符指定的字符串内的标记; >> ar='I am a student' >> strtok(ar,'s') 六、架构数组的创建与操作实验: (1) 直接创建法: >> clear x; x.real = [1 2 3 4 5]; x.imag = ones(4) (2) 命令(struct)创建法 >> s = struct('name',{'x','y'},'id',{'3','4'},'w',{3,4}) (3) Fieldnames函数: >> fieldnames(s) (4) Getfield函数: >> str(1,1).name = 'x'; >> str(1,1).ID = 5; >> str(2,1).name = 'y'; >> str(2,1).ID = 3; >> result = getfield(str, {2,1}, 'name') (5) Setfield函数: >> str(1,1).name = 'x'; >> str(1,1).ID = 5; >> str(2,1).name = 'y'; >> str(2,1).ID = 3; >> str= setfield(str,{2,1},'name','a'); >> str(2,1).name 七、基本运算符号实验: (1)矩阵加: >> a=[1,2,3;4,5,6;7,8,9]; >> b=[3,6,9;1,2,3;2,4,6]; >> a+b (2)矩阵减: >> a=[1,2,3;4,5,6;7,8,9]; >> b=[3,6,9;1,2,3;2,4,6]; >> a-b (3)矩阵乘 >> a=[1,2,3;4,5,6;7,8,9]; >> b=[3,6,9;1,2,3;2,4,6]; >> a*b (4)数组乘 >> a=[1,2,3;4,5,6;7,8,9]; >> b=[3,6,9;1,2,3;2,4,6]; >> a.*b (5)矩阵乘方 >> a=[1,2,3;4,5,6;7,8,9]; >> a^2 (6)数组乘方 >> a=[1,2,3;4,5,6;7,8,9]; >> b=[3,6,9;1,2,3;2,4,6]; >> a.^b (7)矩阵左除 >> a=[1,2,3;4,5,6;7,8,9]; >> b=[2;4;6];a\\b (8)矩阵右除 >> a=ones(3); >> b=[1,1,1]; >> a/b (9)数组左除 >> a=[1,2,3;4,5,6;7,8,9]; >> b=[3,6,9;1,2,3;2,4,6]; >> a.\\b (10)数组右除 >> a=[1,2,3;4,5,6;7,8,9]; >> b=[3,6,9;1,2,3;2,4,6]; >> a./b (11)克罗内克张量积 >> a=[1,0,1;1,1,1;1,0,1]; >> b=[0,0,1;1,0,1;0,0,1];kron(a,b) (12)逻辑与 >> a=[1,0,1;1,1,1;1,0,1]; >> b=[0,0,1;1,0,1;0,0,1];a&b (13)逻辑或 >> a=[1,0,1;1,1,1;1,0,1]; >> b=[0,0,1;1,0,1;0,0,1];a|b (14)逻辑非 >> a=[1,0,1;1,1,1;1,0,1]; >> ~a (15)逻辑异或 >> a=[1,0,1;1,1,1;1,0,1]; >> b=[0,0,1;1,0,1;0,0,1];xor(a,b) 八、矩阵分析实验: (1)范数(norm): >> a=[1,2,3;4,5,6;7,8,9]; >> norm(a,1) >> norm(a,2) (2)条件数(cond): >> cond(a) (3)行列式(det): >> det(a) (4)秩(rank): >> rank(a) (5)特征值(eig): >> eig(a) >> [V,D]=eig(a) (6)化零矩阵(null) >> Z=null(a) (7)Cholesky分解(chol) >> a=pascal(3) >> a=pascal(3);chol(a) (8)LU分解(lu) >> a=[1,2,3;4,5,6;7,8,9]; >> [L1,U1]=lu(a) (9)正交分解(qr) >> a=[1,2,3;4,5,6;7,8,9]; >> [U,S]=qr(a) (10)奇异值分解(svd): >> a=[1,2,3;4,5,6;7,8,9]; >> [U,S,V]=svd(a) 九、数值计算实验: (1) 导数(diff): >> a='x^3+4*x^2-x+20' >> diff(a) (2) 梯度(gradient) >> a=[1,2,3;4,5,6;7,8,9]; >> [fx,fy]=gradient(a) (3) 多项式求根(roots)、 >> p=[1,3,2,5];px=poly2str(p,'x');r=roots(p) // p是多项式的MATLAB描述方法,我们可用poly2str(p,'x')函数,来显示多项式的形式,px =x^3 +3 x^2 +2 x +5 (4) 零点(fzero、fsolve): >> a=@(x)x^2+3*x+2; >> x=fzero(a,0) >> x=fsolve('x^2+3*x+2',0) (5) 极值(fminbnd、fminsearch、fminunc)、 1;>> f=@(x) x^2-4*x+5;>> fminbnd(f,0,1) 2;>> fun=inline('x(1)^2-3*x(1)*x(2)+2*x(2)^2');x0=[1,1]; >> fminsearch(fun,x0) 3;>> fun=inline('x(1)^2-3*x(1)*x(2)+2*x(2)^2');x0=[1,1]; >> fminunc(fun,x0) (6) 积分(quadl) 用内联函数定义被积函数: >> fun=inline('-x.*x','x'); >> y=quadl(fun,0,1) 十、符号计算实验: (1)将cosxsin2x化简:先用syms定义符号变量,再用simplify函数进行化简,具体命令如下:>> simplify(cos(x)+sqrt(-sin(x)^2)) (2)求(x2)2的解:用solve函数求解,命令如下:>> x=solve('(x+2)^x=2','x') x实验记录 一、 (1) >> test=[1 2 3 4] test = 1 2 3 4 >> test=[1;2;3;4] test = 1 2 3 4 (2) >> test=1:0.5:10 test = Columns 1 through 4 1.0000 1.5000 2.0000 2.5000 Columns 5 through 8 3.0000 3.5000 4.0000 4.5000 Columns 9 through 12 5.0000 5.5000 6.0000 6.5000 Columns 13 through 16 7.0000 7.5000 8.0000 8.5000 Columns 17 through 19 9.0000 9.5000 10.0000 (3) >> test = linspace(1,12,5) test = Columns 1 through 4 1.0000 3.7500 6.5000 9.2500 Column 5 12.0000 (4) >> logspace(2,6,4) ans = 1.0e+006 * 0.0001 0.0022 0.04 1.0000 二、 (1) 直接输入法 >> A=[1 2 3;4 5 6;7 8 9] A = 1 2 3 4 5 6 7 8 9 (2)使用下标 >> clear,A(2,3,2)=1 A(:,:,1) = 0 0 0 0 0 0 A(:,:,2) = 0 0 0 0 0 1 (3)使用低维数组 >> clear,A=eye(3,4);A(:,:,2)=eye(3,4)*2;A(:,:,3)=eye(3,4)*3;A(:,:,4)=eye(3,4)*4 A(:,:,1) = 1 0 0 0 0 1 0 0 0 0 1 0 A(:,:,2) = 2 0 0 0 0 2 0 0 0 0 2 0 A(:,:,3) = 3 0 0 0 0 3 0 0 0 0 3 0 A(:,:,4) = 4 0 0 0 0 4 0 0 0 0 4 0 (4)使用创建函数(cat、repmat、reshape)创建高维数组。 1,>> cat(3,[1,2,3;4,5,6],eye(2,3)*2,ones(2,3)) ans(:,:,1) = 1 2 3 4 5 6 ans(:,:,2) = 2 0 0 0 2 0 ans(:,:,3) = 1 1 1 1 1 1 2,>> repmat([1,2;3,4],[1,2,3]) ans(:,:,1) = 1 2 1 2 3 4 3 4 ans(:,:,2) = 1 2 1 2 3 4 3 4 ans(:,:,3) = 1 2 1 2 3 4 3 4 3,>> reshape(1:20,2,5,2) ans(:,:,1) = 1 3 5 7 9 2 4 6 8 10 ans(:,:,2) = 11 13 15 17 19 12 14 16 18 20 三、 (1) >> zeros(3) ans = 0 0 0 0 0 0 0 0 0 (2) >> ones(5) ans = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 (3) >> eye(4) ans = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 (4) >> magic(4) ans = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 (5) >> randn(4) ans = 1.0668 0.2944 -0.6918 -1.4410 0.0593 -1.3362 0.8580 0.5711 -0.0956 0.7143 1.20 -0.3999 -0.8323 1.6236 -1.5937 0.6900 四、 (1) >> Data=[1,2,3,4;5,6,7,8;9,10,11,12] Data = 1 2 3 4 5 6 7 8 9 10 11 12 >> diag(Data) ans = 1 6 11 (2) (Data)' ans = 1 5 9 2 6 10 3 7 11 4 8 12 (3) >> fliplr(Data) ans = 4 3 2 1 8 7 6 5 12 11 10 9 (4) >> flipud(Data) ans = 9 10 11 12 5 6 7 8 1 2 3 4 (5) >> rot90(Data) ans = 4 8 12 3 7 11 2 6 10 1 5 9 (6) >> tril(Data) ans = 1 0 0 0 5 6 0 0 9 10 11 0 (7) >> triu(Data) ans = 1 2 3 4 0 6 7 8 0 0 11 12 五、 (1) >> arr=str2mat('I','am','a','student') arr = I am a student (2) >> x='a n ';y=abs(x) y = 97 32 110 32 >> z=deblank(x);w=abs(z) w = 97 32 110 (3) >> str1=' I am a student '; >> str2='I am a student '; >> x=strtrim(str1) x = I am a student >> y=strtrim(str2) y = I am a student (4) >> str1='I am a student.'; >> str2='student'; >> str3='teacher'; >> str=strrep(str1,str2,str3) str = I am a teacher. (5) >> strread('0.231','%5.3f') ans = 0.2310 (6) >> ar='I am a student' ar = I am a student >> strtok(ar,'s') ans = I am a 六; (1)直接法 >> clear x; x.real = [1 2 3 4 5]; x.imag = ones(4) x = real: [1 2 3 4 5] imag: [4x4 double] (2)struct函数 >> s = struct('name',{'x','y'},'id',{'3','4'},'w',{3,4}) s = 1x2 struct array with fields: name id w (3) fieldnames功能演示 >> fieldnames(s) ans = 'name' 'id' 'w' (4) getfield功能演示 >> str(1,1).name = 'x'; >> str(1,1).ID = 5; >> str(2,1).name = 'y'; >> str(2,1).ID = 3; >> result = getfield(str, {2,1}, 'name') result = y (5) setfield功能演示 >> str(1,1).name = 'x'; >> str(1,1).ID = 5; >> str(2,1).name = 'y'; >> str(2,1).ID = 3; >> str= setfield(str,{2,1},'name','a'); >> str(2,1).name ans = a 七: (1) 矩阵加 >> a=[1,2,3;4,5,6;7,8,9]; >> b=[3,6,9;1,2,3;2,4,6]; >> a+b ans = 4 8 12 5 7 9 9 12 15 (2)矩阵减 >> a=[1,2,3;4,5,6;7,8,9]; >> b=[3,6,9;1,2,3;2,4,6]; >> a-b ans = -2 -4 -6 3 3 3 5 4 3 (3)矩阵乘 >> a=[1,2,3;4,5,6;7,8,9]; >> b=[3,6,9;1,2,3;2,4,6]; >> a*b ans = 11 22 33 29 58 87 47 94 141 (4)数组乘 >> a=[1,2,3;4,5,6;7,8,9]; >> b=[3,6,9;1,2,3;2,4,6]; >> a.*b ans = 3 12 27 4 10 18 14 32 (5)矩阵乘方 >> a=[1,2,3;4,5,6;7,8,9]; >> a^2 ans = 30 36 42 66 81 96 102 126 150 (6)数组乘方 >> a=[1,2,3;4,5,6;7,8,9]; >> b=[3,6,9;1,2,3;2,4,6]; >> a.^b ans = 1 19683 4 25 216 49 4096 531441 (7)矩阵左除 >> a=[1,2,3;4,5,6;7,8,9]; >> b=[2;4;6];a\\b Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 2.203039e-018. ans = -0.4667 0.9335 0.1999 (8)矩阵右除 >> a=ones(3); >> b=[1,1,1]; >> a/b ans = 1 1 1 (9)数组左除 >> a=[1,2,3;4,5,6;7,8,9]; >> b=[3,6,9;1,2,3;2,4,6]; >> a.\\b ans = 3.0000 3.0000 3.0000 0.2500 0.4000 0.5000 0.2857 0.5000 0.6667 (10)数组右除 >> a=[1,2,3;4,5,6;7,8,9]; >> b=[3,6,9;1,2,3;2,4,6]; >> a./b ans = 0.3333 0.3333 0.3333 4.0000 2.5000 2.0000 3.5000 2.0000 1.5000 (11)克罗内克张量积 >> a=[1,0,1;1,1,1;1,0,1]; >> b=[0,0,1;1,0,1;0,0,1];kron(a,b) ans = 0 0 1 0 0 0 0 0 1 1 0 1 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 1 1 0 1 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 (12)逻辑与 >> a=[1,0,1;1,1,1;1,0,1]; >> b=[0,0,1;1,0,1;0,0,1];a&b ans = 0 0 1 1 0 1 0 0 1 (13)逻辑或 >> a=[1,0,1;1,1,1;1,0,1]; >> b=[0,0,1;1,0,1;0,0,1];a|b ans = 1 0 1 1 1 1 1 0 1 (14)逻辑非 >> a=[1,0,1;1,1,1;1,0,1]; >> ~a ans = 0 1 0 0 0 0 0 1 0 (15)逻辑异或 >> a=[1,0,1;1,1,1;1,0,1]; >> b=[0,0,1;1,0,1;0,0,1];xor(a,b) ans = 1 0 0 0 1 0 1 0 0 八、 (1)范数(norm)用来度量矩阵或者向量在某种意义下的长度 >> a=[1,2,3;4,5,6;7,8,9]; >> norm(a,1) ans = 18 >> norm(a,2) ans = 16.8481 (2)条件数(cond)可以描述矩阵为良性矩阵还是病态矩阵的一个参数 >> cond(a) ans = 5.0524e+016 (3)行列式(det) >> det(a) ans = 0 (4)秩(rank) >> rank(a) ans = 2 (5)特征值(eig) >> eig(a) ans = 16.1168 -1.1168 -0.0000 >> [V,D]=eig(a) V = -0.2320 -0.7858 0.4082 -0.5253 -0.0868 -0.8165 -0.8187 0.6123 0.4082 D = 16.1168 0 0 0 -1.1168 0 0 0 -0.0000 (6)化零矩阵(null) >> Z=null(a) Z = -0.4082 0.8165 -0.4082 (7)Cholesky分解(chol)把对称正定矩阵表示成上三角矩阵的转置与其本身的乘积 >> a=pascal(3) //pascal矩阵 a = 1 1 1 1 2 3 1 3 6 >> a=pascal(3);chol(a) ans = 1 1 1 0 1 2 0 0 1 (8)LU分解(lu) >> a=[1,2,3;4,5,6;7,8,9]; >> [L1,U1]=lu(a) L1 = 0.1429 1.0000 0 0.5714 0.5000 1.0000 1.0000 0 0 U1 = 7.0000 8.0000 9.0000 0 0.8571 1.7143 0 0 -0.0000 (9)正交分解(qr) >> a=[1,2,3;4,5,6;7,8,9]; >> [U,S]=qr(a) U = -0.1231 0.9045 0.4082 -0.4924 0.3015 -0.8165 -0.8616 -0.3015 0.4082 S = -8.1240 -9.6011 -11.0782 0 0.9045 1.8091 0 0 -0.0000 (10)奇异值分解(svd) >> a=[1,2,3;4,5,6;7,8,9]; >> [U,S,V]=svd(a) U = -0.2148 0.8872 0.4082 -0.5206 0.2496 -0.8165 -0.8263 -0.3879 0.4082 S = 16.8481 0 0 0 1.0684 0 0 0 0.0000 V = -0.4797 -0.7767 -0.4082 -0.5724 -0.0757 0.8165 -0.6651 0.6253 -0.4082 九 (1)导数 >> a='x^3+4*x^2-x+20' a = x^3+4*x^2-x+20 >> diff(a) ans = 3*x^2+8*x-1 >> diff(a,2) ans = 6*x+8 (2)梯度 >> a=[1,2,3;4,5,6;7,8,9]; >> [fx,fy]=gradient(a) fx = 1 1 1 1 1 1 1 1 1 fy = 3 3 3 3 3 3 3 3 3 (3)多项式求根 >> p=[1,3,2,5];px=poly2str(p,'x');r=roots(p) // p是多项式的MATLAB描述方法,我们可用poly2str(p,'x')函数,来显示多项式的形式,px =x^3 +3 x^2 +2 x +5 r = -2303/793 -205/4278 + 851/9i -205/4278 - 851/9i (4)零点 >> a=@(x)x^2+3*x+2; >> x=fzero(a,0) x = -1 >> x=fsolve('x^2+3*x+2',0) Optimization terminated: first-order optimality is less than options.TolFun. x = -1 (5)极值 1;>> f=@(x) x^2-4*x+5; >> fminbnd(f,0,1) ans = 0.9999 2; >> fun=inline('x(1)^2-3*x(1)*x(2)+2*x(2)^2');x0=[1,1]; >> fminsearch(fun,x0) Exiting: Maximum number of function evaluations has been exceeded - increase MaxFunEvals option. ans = 1.0e+042 * 1.46 1.4090 3; >> fun=inline('x(1)^2-3*x(1)*x(2)+2*x(2)^2');x0=[1,1]; >> fminunc(fun,x0) Warning: Gradient must be provided for trust-region method; using line-search method instead. > In fminunc at 243 Maximum number of function evaluations exceeded; increase options.MaxFunEvals. ans = 1.0e+005 * 7.51 5.3958 (6)积分 >> fun=inline('-x.*x','x'); //用内联函数定义被积函数 >> y=quadl(fun,0,1) y = -0.3333 十; (1) >> syms x y z >> simplify(cos(x)+sqrt(-sin(x)^2)) ans = cos(x)+(-1+cos(x)^2)^(1/2) (2) >> x=solve('(x+2)^x=2','x') x = 实验总结 一、归纳总结:通过本次实验,让我了解到matlab在科学计算处理方面的巨大功能;matlab可以创建一维、高维和标准的数组以及创建并且操作字符串和构架数组;matlab还可以进行数值计算和符号计算。Matlab是一个包含大量计算算法的集合,它拥有600多个工程中要用到的数算函数,可以方便的实现用户所需的各种计算功能。通过了解,matlab中的函数不仅仅能进行矩阵运算和线性方程组的求解、微分方程及偏微分方程的组的求解、符号运算、复数的各种运算、三角函数和其他初等数算、数组操作;还能进行傅立叶变换和数据的统计分析、工程中的优化问题、稀疏矩阵运算以及建模动态仿真等操作。函数中所使用的算法都是科研和工程计算中的最新研究成果,而前经过了各种优化和容错处理。在计算要求相同的情况下,使用matlab的编程工作量会大大减少。 二、心得体会:通过本次实验,掌握了MATLAB中数组的创建和操作方法;MATLAB中常用的数值计算方法和MATLAB中常用的符号计算方法。初步了解和学习了matlab在科学计算方面的功能;由于通过上网查资料进行实验的设计和操作,网上只是显示了函数的某一部分功能,未能了解函数的全部功能实现。 成绩评定
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- sceh.cn 版权所有 湘ICP备2023017654号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务