第6章 数值微积分与方程求解
6.1 数值微分与数值积分
1.数值微分
(1)数值差分与差商
(2)数值差分的实现
dx=diff(x)
计算向量的一阶向前差分
dx=diff(x,n)
计算向量的n阶向前差分
dx=diff(A,n,dim)
计算矩阵A的n阶向前差分,dim=1时(默认状态),按列进行差分;dim=2,按行计算差分
2.数值积分
(1)数值积分基本定理
(2)数值积分的实现
[l,n]=quad(filename,a,b,tol,trace)
基于自适应辛普森方法
[l,n]=quadl(filename,a,b,tol,trace)
基于自适应Gauss-Lobatto方法
l=integral(filename,a,b)
基于全局自适应积分方法
[l,err]=quadgk(filename,a,b)
基于自适应高斯-克朗罗德方法
l=trapz(x,y)
基于梯形积分法
(3)多重定积分的数值求解
-
求二重积分的数值解
I=integral2(filename,a,b,c,d)
I=quad2d(filename,a,b,c,d)
I=dblquad(filename,a,b,c,d,tol)
-
求三重积分的数值解
I=integral3(filename,a,b,c,d,e,f)
I=triplequad(filename,a,b,c,d,e,f,tol)
6.2 线性方程组求解
1.线性方程组的直接解法
(1)利用左除运算符的直接解法
x=A\b
(2)利用矩阵分解求解线性方程组
-
LU分解
下三角*上三角
[L,U]=lu(A)
产生一个上三角矩阵U和一个变换形式的下三角矩阵L,满足A=LU,A是方阵[L,U,P]=lu(A)
产生一个上三角阵U和一个下三角阵L以及一个置换矩阵P,使满足PA=LU,A是方阵
2.线性方程组的迭代解法
(1)雅克比迭代法
(2)高斯-赛德尔迭代法
6.3 线性方程组应用举例
1.平面桁架结构受力分析问题
2.小行星运行轨道计算问题
6.4 非线性方程求解与函数极值计算
1.非线性方程数值求解
(1)单变量非线性方程求解
x=fzero(filename,x0)
(2)非线性方程组的求解
x=fsolve(filename,x0,option)
2.函数极值的计算
(1)无约束最优化问题
-
求最小值的函数
[xmin,fmin]=fminbnd(filename,x1,x2,option)
[xmin,fmin]=fminsearch(filename,x0,option)
[xmin,fmin]=fminunc(filename,x0,option)
(2)有约束最优化问题
[xmin,fmin]=fminbnd(filename,x0,A,b,Aeq,beq,Lbnd,Ubnd,NonF,option)
(3)最小值问题实例
6.5 常微分方程数值求解
1.常微分方程数值求解的一般概念
-
单步法,龙格-库塔法
-
多步法,亚当斯法
函数调用格式:
[t,y]=solver(filename,tspan,y0,option)
2.刚性问题(各个分量相差悬殊)
- 火焰传播模型例子
6.6 常微分方程应用举例
1.Lotka-Volterra模型(兔子狐狸模型)
第①问:
rabbitFox=@(t,x) [x(1)*(2-0.01*x(2));x(2)*(-1+0.01*x(1))];
[t,x]=ode45(rabbitFox,[0,30],[300,150])
subplot(1,2,1);plot(t,x(:,1),'-',t,x(:,2),'-*');
legend('x1(t)','x2(t)');
xlabel('时间');ylabel('物种数量');
grid on
subplot(1,2,2);plot(x(:,1),x(:,2))
grid on
第④问:
取λ=0.01, 所以稳定平衡点(1/λ,2/λ)即是(100,200),以此点作为初值时,画出其图像。
rabbitFox=@(t,x) [x(1)*(2-0.01*x(2));...
x(2)*(-1+0.01*x(1))];
[t,x]=ode45(rabbitFox,[0,30],[100,200]);
plot(t,x(:,1),'-o',t,x(:,2),'-*');
legend('x1(t)-兔子','x2(t)-狐狸');
xlabel('时间');
ylabel('物种数量');
当将初始值变为(98,195)时,即向下十分接近平衡点,画出其图像。
rabbitFox=@(t,x) [x(1)*(2-0.01*x(2));...
x(2)*(-1+0.01*x(1))];
[t,x]=ode45(rabbitFox,[0,30],[98,195]);
plot(t,x(:,1),'-o',t,x(:,2),'-*');
legend('x1(t)-兔子','x2(t)-狐狸');
xlabel('时间');
ylabel('物种数量');
当将初始值变为(70,150)时(向下偏离平衡点比较远时),画出其图像。
rabbitFox=@(t,x) [x(1)*(2-0.01*x(2));...
x(2)*(-1+0.01*x(1))];
[t,x]=ode45(rabbitFox,[0,30],[70,150]);
plot(t,x(:,1),'-o',t,x(:,2),'-*');
legend('x1(t)-兔子','x2(t)-狐狸');
xlabel('时间');
ylabel('物种数量');
当将初始值变为(900,1600)时(向上偏离平衡点十分远时),画出其图像。
rabbitFox=@(t,x) [x(1)*(2-0.01*x(2));...
x(2)*(-1+0.01*x(1))];
[t,x]=ode45(rabbitFox,[0,500],[900,1600]);
plot(t,x(:,1),t,x(:,2));
legend('x1(t)-兔子','x2(t)-狐狸');
xlabel('时间');
ylabel('物种数量');
2.Lotka-Volterra改进模型(考虑兔子的环境容量)
第①问:在原模型下,绘制狐狸和兔子数量的时间函数曲线。
rabbitFox=@(t,x) [x(1)*(2-0.01*x(2));...
x(2)*(-1+0.01*x(1))];
plot(t,x(:,1),t,x(:,2));
legend('x1(t)-兔子','x2(t)-狐狸');
xlabel('时间');
ylabel('物种数量');
title('原模型下,狐狸和兔子数量的函数曲线');
第②问:在改进模型下,狐狸和兔子数量的时间函数曲线。
rabbitFox=@(t,x) [2*x(1)*(1-x(1)/400-0.005*x(2));...
x(2)*(-1+0.01*x(1))];
[t,x]=ode45(rabbitFox,[0,50],[300,150]);
plot(t,x(:,1),t,x(:,2));
legend('x1(t)-兔子','x2(t)-狐狸');
xlabel('时间');
ylabel('物种数量');
title('改进模型下,狐狸和兔子数量的函数曲线');
第③问:在原模型下,绘制狐狸数量相对于兔子数量的关系曲线。
rabbitFox=@(t,x) [x(1)*(2-0.01*x(2));...
x(2)*(-1+0.01*x(1))];
[t,x]=ode45(rabbitFox,[0,50],[300,150]);
plot(x(:,1),x(:,2));
xlabel('兔子数量');
ylabel('狐狸数量');
title('原模型下,狐狸数量相对于兔子数量的关系曲线');
第④问:在改进模型下,狐狸数量相对于兔子数量的关系曲线。
rabbitFox=@(t,x) [2*x(1)*(1-x(1)/400-0.005*x(2));...
x(2)*(-1+0.01*x(1))];
[t,x]=ode45(rabbitFox,[0,50],[300,150]);
plot(x(:,1),x(:,2));
xlabel('兔子数量');
ylabel('狐狸数量');
title('改进模型下,狐狸数量相对于兔子数量的关系曲线');
第8章 MATLAB图形用户界面设计
8.1 图形窗口与坐标轴
1.图形对象句柄
对象句柄.属性名
- gcf/gca/gco/findobj
2.图形对象属性
- 图形对象属性Children/Parent/Type/Tag
- 图形对象常用动态属性KeyPressFcn/CreateFcn/DeleteFcn/WindowButtonDownFcn or ButtonDownFcn
3.图形窗口操作
figure函数
- 窗口属性MenuBar/Name/NumberTitle/Color/
Position/Units
4.坐标轴对象的操作
(1)建立坐标轴对象
axes函数
(2)属性
Position/Units/Box/GridLineStyle/Title/XLable/XLim/XScale/View/ColorOrder
%例1 绘制多个图形,并保存图形句柄。
t=0:pi/10:2*pi;
h1=plot3(t+pi,t-2*pi,sin(t),'r');
hold on;
[x,y]=meshgrid(t);
z=sin(x);
h2=mesh(t-2*pi,t+pi,z);
[x3,y3,z3]=cylinder(t);
h3=surf(x3,y3,z3);
8.2 曲线和曲面对象
1.曲线对象
(1)建立曲线对象
句柄变量=line(x,y,z,属性1,属性2,属性3……)
(2)曲线对象常用属性
Color/LineStyle/LineWidth/Marker/MarkerSize/XData/YData/ZData
2.曲面对象
(1)建立曲面对象
句柄变量=surface(x,y,z,c,属性1,属性值1,属性2,属性值2,……)
(2)与曲面形态有关的属性
FaceColor/EdgeColor
3.光照处理
(1)创建光源对象
对象句柄=light(属性1,属性值1,属性2,属性值2,……)
(2)光源对象的属性
Color/Style/Position
(3)设置光照模式
lighting选项
4.图形对象的反射特性
SpecularStrength/DiffuseStrength/AmbientStrength/SpecularExponenr/BackFaceLighting
第9章 Simulink系统仿真
9.1 Simulink仿真基础
1.Simulink的启动
2.系统仿真模型的创建
(1)Simulink Library Browser窗口
(2)Simulink模块的操作
(3)模型存盘
(4)模块参数的设置
3.仿真参数的设置
9.2 子系统的创建与封装
1.子系统的创建
- 通过Subsystem模块建立子系统
- 将已有的模块转换为子系统Ctrl+G
2.子系统的封装
Ctrl+M
3.子系统的条件执行
(1)使能子系统
(2)触发子系统
(3)使能加触发子系统
9.3 S函数的设计与应用
1.什么叫S函数
系统函数
>>edit sfuntmpl.m
2.用M文件编写S函数的方法
3.在仿真模型中使用S函数的方法
9.4 Simulink仿真应用举例
1.对蹦极跳系统的建模与仿真