MATLAB学习笔记——第一章

MATLAB学习笔记------第一章

运动的例子

解析解

符号函数求解:dsolve函数

通常使用help('函数名')或者doc 函数名来查找帮助文档

1、微分方程的建立与求解

matlab 复制代码
% 求解微分方程的解
syms v(t) Cd g m
eqn = diff(v,t) = g - Cd*v^2/m;  % 微分方程式
cond = v(0) == 0; 				 % 初始条件
S = dsolve(eqn,cond)

2、代入具体值求解

subs函数:用于变量代入计算

matlab 复制代码
subs(a+b,a,4) % 第一个变量a+b是要求的式子,第二个变量是需要替换的变量,第三个变量是数值4

注意:

每次只能代入一个变量的数值,要有多个数值需要代入,可以进行嵌套或者分条代入

matlab 复制代码
vt = subs(S,'m',68.1);
vt1=subs(vt,'g',9.81);
vt2=subs(vt1,'Cd',0.25); % 分条计算
vt3=subs(subs(subs(S,'m',68.1),'g',9.81),'Cd',0.25) % 嵌套计算

3、求前12s的速度值

利用循环语句进行求解

double函数是用于将复杂的计算式变为小数型的函数

matlab 复制代码
i=1;
for ti=0:11
    vtt(i)=subs(vt3,'t',ti);
    i=i+1;
end
double(vtt) % 将复杂式子转为数值型(小数型)

4、对0-12s的速度进行画图

matlab 复制代码
plot(0:20,double(vtt),'r-o','LineWidth',2)
title('0-20s的速度曲线图');
xlabel('时间t')
ylabel('速度vt')
grid on % 加网格

5、求极限速度

matlab 复制代码
limS = double(limit(vt3,'t',inf));

数值解

创建bungee函数,用于计算速度值

matlab 复制代码
function vt = bungeeS(m,cd,th,tend)
% m表示运动员质量,cd是阻力系数,th是时间步长,tend表示时间tend秒之前
    i=1;
    g = 9.81;
    vbefore = 0; % v(ti)
    vnext = 0;   % v(t(i+1))
    for ti = 0:th:tend
        vnext = vbefore + (g - cd/m*vbefore^2)*th;  % 迭代公式
        vt(i,1) = ti;
        vt(i,2) = vbefore; % 存储每时刻的速度值
        i = i+1;
        vbefore = vnext; % 速度值得迭代
    end
    plot(vt(:,1),vt(:,2),'b--','linewidth',2)
end

主文件:

matlab 复制代码
% 数值解的求解
vt = bungeeS(68.1,0.25,1,20)
hold on % 保持图窗不变,在上边添加元素
plot(0:20,double(vtt),'r-o','LineWidth',1)
legend('数值解','解析解','Location','best') % 创建图例,第一个值是第一副图的
legend('boxoff') % 取消图例的黑色边框
grid on
hold off

常用命令

cd:显示目录或者改变目录

clf:清除图形窗口

disp:显示变量或文字内容

hold:图形保持命令

save:保存内存变量

strcat:字符串拼接函数

num2str:数值转字符串函数

matlab 复制代码
outstr = strcat('极限是:',num2str(limS));

复数

matlab 复制代码
z = complex(3,4); % 复数定义 3+4i
real(z);		  % 提取复数实部
imag(z);		  % 提取复数虚部
abs(z);			  % 提取复数的模
angle(z);		  % 提取复数的角度(以弧度为单位)
conj(z);		  % 共轭复数 3-4i
matlab 复制代码
x = 0:0.01:2*pi;
y = x + i*x.*sin(x); % 点乘是一一对应的乘的

% 直角坐标
subplot(2,1,1)
plot(x,y)
title('直角坐标系绘图')

% 极坐标
subplot(2,1,2)
theta = angle(y);
rho = abs(y);
polarplot(theta,rho)
title('极坐标图')

简单公式计算

例1

matlab 复制代码
a = 5.67; b = 7.8;
e11 = exp(a+b)/log10(a+b);
e12 = log(b-a);
e13 = a^b;

例2

matlab 复制代码
x = -3.5*pi/180;
y = 6.7*pi/180;
e2 = sin(abs(x)+abs(y))/sqrt(cos(abs(x+y)));

例3

matlab 复制代码
x = [2, 1+2i; -0.45, 5];
y = 0.5*log(x + sqrt(1+x^2));

例4

matlab 复制代码
a = -3.0:0.1:3.0;
y = (exp(0.3*a) - exp(-0.3*a))*sin(a+0.3)/2;

q0=10;	R=60;	C=0.00005;	t=linspace(0,0.8,100);
% Qt:第一行时间,第二行L=3,第三行L=6,第四行L=9,第五行L=12
Qt(1,:)=t;
i=2;
colors = ['r','b','g','r--'];
for L=3:3:12
    qt=q0*exp(-R*t/2/L).*cos(sqrt(1/L/C-(R/2/L)^2)*t); % 公式
    Qt(i,:)=qt;
    plot(t,Qt(i,:),colors[i-1])
    hold on
    i = i+1;
end
legend('L=3','L=6','L=9','L=12')
hold off

逻辑运算符

matlab 复制代码
% x表示x1,y表示x2
[x,y]=meshgrid(-1:0.05:1,-2:0.05:2);
p=	0.5457*exp(-0.75*y.^2-3.75*x.^2-1.5*x).*(x+y>1)+ ...    % ... 表示续航运算符
    0.7575*exp(-y.^2-6*x.^2).*((x+y>-1)&(x+y<=1))  + ...    % & 运算符表示并且
    0.5457*exp(-0.75*y.^2-3.75*x.^2+1.5*x).*(x+y<=-1);
% surf画三维网格图
surf(x,y,p)
shading flat % 取消图形上的线条
相关推荐
Young Doro8 小时前
独立性检测学习任务
人工智能·学习·数据挖掘
Young Doro8 小时前
从 DV 表示到 MI 下界,再到“置换技巧“(含“指数倾斜“完整推导)
笔记
卡卡~~10 小时前
“101计划”核心课程实践教材《数据实验结构指导-C++语言版》题目集
开发语言·c++·学习·算法
lengxuenong11 小时前
树状数组 · 信息学学习手册1-求和3个模板
c++·学习·算法·青少年编程
ACP广源盛1392462567311 小时前
PCIe Gen3 交换芯片选型笔记:中小通道扩展方案 IX7012@ACP 评估
笔记·硬件架构·硬件工程·pcie·国产芯片
lanxiaoqing0211 小时前
演讲训练的第一步:先敢说,再会说
人工智能·学习·学习方法·口才
职豚求职小程序刷题11 小时前
国投证券笔试测评题型揭秘
笔记
Nuanyt11 小时前
LeetCode Hot100 刷题笔记 · 普通数组专题
java·笔记·算法·leetcode
职豚求职小程序13 小时前
蒙牛27秋招|数智化未来星测评重点整理✅
笔记
沪上企服通13 小时前
从票据到凭证的数据血缘:代账系统的 traceability 与可审计回放设计笔记
笔记