最近在上微分方程数值解的课,下面是作业中关于MATLAB基本用法的题,大家有需要可作参考一下。
下面是代码和结果:
一、MATLAB运算基础
1.求表达式的值,然后显示MATLAB工作空间的使用情况并保存全部变量
代码:
1. x=[2 1+2i;-0.45 5];
2. z2=1/2*log(x+(1+x^2)^(1/2))
3. a=-3.0:0.1:3.0;
4. z3=0.5*((exp(0.3*a)-exp(-0.3*a)).*sin(a+0.3))+log(0.5*(0.3+a))
结果:
(1)z2 = 0.7182 - 0.0088i 0.7461 + 0.5434i
-0.1473 - 1.5679i 1.1555 - 0.0016i
(2)z3为的值如下图所示
workspace:
2.矩阵的计算
代码:
1. A=[12 34 -4;34 7 87;3 65 7];
2. B=[1 3 -1;2 0 3;3 -2 7];
3. det(B)
4. s1=A*B
5. s2=A.*B
6. s3=A^3
7. s4=A.^3
8. s5=A/B
9. s6=B\A
10. s7=[A,B]
11. s8=[A([1,3],:);B^2]
结果:
(1) A*B & A.*B
A*B = A.*B =
68 44 62 12 102 4
309 -72 596 68 0 261
154 -5 241 9 -130 49
(2) A^3 & A.^3
A^3 =
37226 233824 48604
247370 149188 600766
78688 454142 118820
A.^3 =
1728 39304 -64
39304 343 658503
27 274625 343
(3) A/B & B/A
A/B =
16.4000 -13.6000 7.6000
35.8000 -76.2000 50.2000
67.0000 -134.0000 68.0000
A\B=
109.4000 -131.2000 322.8000
-53.0000 85.0000 -171.0000
-61.6000 89.8000 -186.2000
(4) [A,B] & [A([1,3],:);B^2]
[A,B] =
12 34 -4 1 3 -1
34 7 87 2 0 3
3 65 7 3 -2 7
[A([1,3],:);B^2] =
12 34 -4
3 65 7
4 5 1
11 0 19
20 -5 40
二、MATLAB矩阵分析与处理
3.建立一个的矩阵,求它行列式值、迹、秩和范数。
代码:
1. C=[1 2 4 6 4;3 6 5 7 8;4 0 8 3 2;7 9 5 2 1;1 1 0 3 4]
2. detC=det(C)
3. trC=trace(C)
4. rC=rank(C)
5. norm_1=norm(C,1)
6. norm_2=norm(C)
7. norm_inf=norm(C,'inf')
8. norm_F=norm(C,'fro')
结果:
建立的矩阵:
行列式:detC =-2209
迹:trC =21
秩:rC =5
1-范数:norm_1 =22
2-范数:norm_2 =20.4759
无穷范数:norm_inf =29
F-范数:norm_F =23.1517
4.求解线性方程组
代码:
1. format rat
2. A=[1/2 1/3 1/4;1/3 1/4 1/5;1/4 1/5 1/6]
3. b=[0.95;0.67;0.52]
4. X=A\b
5. cond(A)
6. b1=[0.95;0.67;0.53]
7. X1=A\b1
结果:
(1) 方程的解
X1 =
6/5
3/5
3/5
(2) 时方程的解
X2 =
3
-33/5
33/5
可以看出,只改变了0.01,而解X中:改变了1.8; 改变了7.2;改变了6.
因此,稍微变动,解的相对变化是较大的。
(3) 计算矩阵的条件数并分析
cond(A) = 9473/7
可以看出这个线性方程组系数矩阵A的条件数是很大的。而条件数事实上表示了矩阵计算对于误差的敏感性。对于线性方程组Ax=b,A的条件数大,b的微小改变就能引起解x较大的改变,数值稳定性差。这道题中b很小的扰动就引起了X很大的变化,这就是矩阵A条件数大的表现。
三、选择结构程序设计
5.求分段函数的值
代码:
1. %f.m
2. function y=f(x)
3. if x<0&&x~=-3
4. y=x^2+x-6;
5. elseif x>=0&&x<5&&x~=2&&x~=3
6. y=x^2-5*x+6;
7. else
8. y=x^2-x-1;
9. end
10. %main function
11. i=0
12. for x=[-5.0,-3.0,1.0,2.0,2.5,3.0,5.0]
13. i=i+1;
14. y(i)=f(x)
15. end
y = 14 11 2 1 -1/4 5 19
四、循环结构程序设计
6.求的近似值
代码:
1. format short
2. n1=1:100;
3. pai=sqrt(6*sum(1./(n1.*n1)))
4. n2=1:1000;
5. pai=sqrt(6*sum(1./(n2.*n2)))
6. n3=1:10000;
7. pai=sqrt(6*sum(1./(n3.*n3)))
结果:
n=100 =3.1321
n=1000 =3.1406
n=10000 =3.1415
7.计算迭代公式
代码:
1. x(1)=1;
2. a=input('a:');
3. b=input('b:');
4. r1=(-b+sqrt(b^2+4*a))/2
5. r2=(-b-sqrt(b^2+4*a))/2
6. if a<=0||b<=0
7. disp('error!');
8. end
9. for i=1:500 %控制迭代次数为500次
10. x(i+1)=a/(b+x(i));
11. if abs(x(i+1)-x(i))<=0.00001 %迭代终止条件
12. break;
13. end
14. end
结果:
• (a, b)=(1, 1)
准确值:0.6180 / -1.6180
迭代结果:0.618032786885246(14次迭代)
• (a, b)=(8, 3)
准确值:1.7016 / -4.7016
迭代结果:1.70156355863351(14次迭代)
• (a, b)=(10, 0.1)
准确值:3.1127 / -3.2127
迭代结果:3.11266814976286(425次迭代)
五、函数文件
8.函数文件fx.m,可矩阵输入,得到同阶矩阵输出
代码:
1. function f=fx(x)
2. f=1./((x-2).^2+0.1)+1./((x-3).^4+0.01);
3. end
六、高层绘图操作
9.代码:
1. x=-pi/2:pi/20:pi/2;
2. subplot(2,2,2);
3. y=sqrt(cos(x));
4. plot(x,y,'r');
5. title('cos(x)')
6. subplot(2,2,3);
7. x=-2:0.02:2;y=-4:0.04:4;
8. [X,Y]=meshgrid(x,y);
9. Z=X.^2/4+Y.^2/16;
10. mesh(X,Y,Z);
11. title('Z=X^2/4+Y^2/16')
结果:
七、数据处理与多项式计算
10. 三次样条插值
代码:
1. t1=6:2:18;
2. Tempreture_inside1=[18 20 22 25 30 28 24];
3. Tempreture_outside1=[15 19 24 28 34 32 30];
4. t2=6.5:2:18.5;
5. Tempreture_outside=interp1(t1,Tempreture_outside1,t2,'spline')
6. Tempreture_inside=interp1(t1,Tempreture_inside1,t2,'spline')
结果:
6:30~18:30室外温度(℃):
Tempreture_outside =
15.6553 20.3355 24.9089 29.6383 34.2568 30.9594 31.1218
6:30~18:30室内温度(℃):
Tempreture_inside =
18.5020 20.4986 22.5193 26.3775 30.2051 26.8178 23.7966
11. 5次拟合多项式
代码:
1. x=[1 11 21 31 41 51 61 71 81 91 101];
2. y=[0 1.0414 1.3222 1.4914 1.6128 1.7076 1.7853 1.8513 1.9085 1.9590 2.0043];
3. p=polyfit(x,y,5)
4. xi=1: 101;
5. yi=polyval(p,xi);
6. plot(x,y,'o',xi,yi,'-');
7. axis([0 105 0 2.5])
结果:
拟合多项式:
在[1,101]区间的函数曲线:
八、数值微积分与方程数值求解
12.求定积分
代码:
1. %f2.m
2. function f=f2(x)
3. f=(log(1+x))./(1+x.^2);
4. end
5. %f1.m
6. function fun=f1(t)
7. fun=sqrt(cos(t.^2)+4*sin(4*t.^2)+1);
8. end
9. %main function
10. I1=quad(@f1,0,2*pi)
11. I2=quad(@f2,0,2*pi)
结果:
= 6.7992 + 3.1526 =0.9997
13.数值方法求解线性方程组
代码:
1. A=[6,5,-2,5;9,-1,4,-1;3,4,2,-2;3,-9,0,2]
2. b=[-4,13,1,11]'
3. x=A\b %x1=inv(A)*b
结果:
X= 0.6667
-1.0000
1.5000
-0.0000
九、符号计算基础与符号微积分
14.化简表达式
代码:
1. s1=sym('sin(byte1)*cos(byte2)-cos(byte1)*sin(byte2)');
2. S1=simplify(s1)
3. s2=sym('(4*x^2+8*x+3)/(2*x+1)');
4. S2=simplify(s2)
结果:
(1) S1 =sin(byte1 - byte2)
(2) S2 =2*x + 3
15.极限与导数
代码:
1. syms x;
2. f1=(x.*(exp(sin(x))+1)-2*(exp(tan(x))-1))./sin(x)^3;
3. lim=limit(f1,x,0)
4. y=(1-cos(2*x))/x;
5. dy=diff(y,x)
6. d2y=diff(y,x,2)
结果:
(1) lim =-1/2
(3) dy =(2*sin(2*x))/x + (cos(2*x) - 1)/x^2
d2y =(4*cos(2*x))/x - (4*sin(2*x))/x^2 - (2*(cos(2*x) - 1))/x^3
16.求积分
代码:
1. syms x;
2. f1=1/(1+x.^4+x.^8);
3. I1=int(f1)
4. f2=(x.^2+1)/(x.^4+1);
5. I2=int(f2,x,0,inf)
结果:
(1) I1 =-(3^(1/2)*(atan((2*3^(1/2)*x)/(3*((2*x^2)/3 - 2/3))) - atanh((2*3^(1/2)*x)/(3*((2*x^2)/3 + 2/3)))))/6
(3) I2 =(pi*2^(1/2))/2
十、级数与方程符号求解
17. 级数符号求和
代码:
1. syms n;
2. s=symsum(1/(2*n-1),1,10)
结果:
S =31037876/14549535
18. 微分方程初值问题的符号解与数值解
代码:
1. %ode.m
2. function dy=ode(x,t)
3. dy=zeros(2,1);
4. dy(1)=t(2);
5. dy(2)=-4*t(2)-29*t(1);
6. end
1. clc;
2. s=dsolve('D2y+4*Dy+29*y=0','y(0)=0','Dy(0)=15','x')
3. x=0:0.1:10;
4. y=3*sin(5*x).*exp(-2*x);
5. plot(x,y)
6. hold on
7. [x,y]=ode45(@ode,[0 10],[0 15]);
8. plot(x,y(:,1),'ro')
9. xlabel('x'),ylabel('y')
10. legend('exact','numerical')
结果:
符号解:y = 3*sin(5*x)*exp(-2*x)
精确解与数值解对比图:
19. 求微分方程组的通解
代码:
1. [x,y,z]=dsolve('Dx=2*x-3*y+3*z','Dy=4*x-5*y+3*z','Dz=4*x-4*y+2*z','t')
2. x=simplify(x)
3. y=simplify(y)
4. z=simplify(z)
结果:
x =C1*exp(2*t) + C2*exp(-t)
y =C1*exp(2*t) + C2*exp(-t) + C3*exp(-2*t)
z =C1*exp(2*t) + C3*exp(-2*t)
PS:不知道怎么在CSDN中上传PDF,有些图片没法显示。如果知道怎么上传文件,麻烦留言~谢谢!