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 % 取消图形上的线条
相关推荐
努力学习的小廉1 小时前
redis学习笔记(四)—— list数据类型
redis·笔记·学习
Amazing_Cacao1 小时前
工艺师体系回顾|从参数到系统的能力跃迁(精品可可,精品巧克力)
学习
im_AMBER2 小时前
Leetcode 118 从中序与后序遍历序列构造二叉树 | 二叉树的最大深度
数据结构·学习·算法·leetcode
jay神2 小时前
基于SpringBoot的英语自主学习系统
java·spring boot·后端·学习·毕业设计
CappuccinoRose2 小时前
HTML语法学习文档(一)
前端·学习·html
承渊政道2 小时前
C++学习之旅【C++继承概念指南与核心内容介绍】
c语言·开发语言·c++·笔记·学习·visual studio
GeminiJM2 小时前
LangGraph 源码学习笔记
linux·笔记·学习·langchain
charlie1145141912 小时前
RK3568跑Ubuntu 24.04全路程指南(以正点原子的RK3568开发板为例子)
linux·笔记·ubuntu·rootfs·教程·环境配置·rk3568
babe小鑫2 小时前
大专应用统计学专业学习数据分析的实用性分析
学习·数据挖掘·数据分析