首页 > 其他分享 >matlab实验三(冒泡排序,sort函数,斜抛运动与绘图,循环确定(银行存利息))

matlab实验三(冒泡排序,sort函数,斜抛运动与绘图,循环确定(银行存利息))

时间:2024-09-25 22:54:02浏览次数:10  
标签:sort disp end currentAmount 冒泡排序 solveeq num2str matlab theta

1. 在MATLAB中使用循环结构对给定的数列A=[33,689,-705,2024,-6,29]进行升序排序。

(注意:不可以使用任何MATLAB自带的排序函数直接操作。)

% 给定数列
A = [33, 689, -705, 2024, -6, 29];

% 获取数列长度
n = length(A);

% 冒泡排序算法
for i = 1:n-1
    for j = 1:n-i
        if A(j) > A(j+1)
            % 交换 A(j) 和 A(j+1) 的位置
            temp = A(j);
            A(j) = A(j+1);
            A(j+1) = temp;
        end
    end
end

% 输出排序后的结果
disp('升序排序后的数列是:');
disp(A);
也可以使用matlab自带的 sort() 函数

 

A=[33,689,-705,2024,-6,29];
A=sort(A)

 

 这里先解释一下 deg2rad() 函数,这是matlab的内置函数,可以直接使用,也可以看一下下面的实现代码。

function radians = deg2rad(degrees)
    radians = degrees * (pi / 180);
end

 以下是该题目的代码实现

% 定义参数
v0 = 20; % 初始速率 (m/s)
theta = 40; % 投掷角度 (度)
g = 9.81; % 重力加速度 (m/s^2)

% 将角度转化为弧度
theta_rad = deg2rad(theta);

% 计算碰撞时间
t_collision = (2 * v0 * sin(theta_rad)) / g;

% 初始化时间矢量
t = linspace(0, t_collision, 100); % 生成时间从0到t_collision的100个点

% 计算高度和速度
h = v0 * sin(theta_rad) * t - 0.5 * g * t.^2; % 高度
v_vertical = v0 * sin(theta_rad) - g * t; % 垂直速度

% 水平速度保持不变
v_horizontal = v0 * cos(theta_rad);
v_total = sqrt(v_horizontal^2 + v_vertical.^2); % 计算总速度

% 查找满足条件的时间点
index = find(h < 6 & v_total <= 16);

% 输出满足条件的时间点
if ~isempty(index)
    collision_time = t(index);
    disp('满足条件的碰撞时间点为:');
    disp(collision_time);
else
    disp('没有满足条件的碰撞时间点。');
end

% 绘制高度和速度随时间变化的图形
figure;


subplot(2, 1, 1);
plot(t, h);
xlabel('时间 (秒)');
ylabel('高度 (米)');
title('高度随时间变化');
grid on;

subplot(2, 1, 2);
plot(t, v_total);
xlabel('时间 (秒)');
ylabel('速度 (m/s)');
title('速度随时间变化');
grid on;

以下是解释绘图figure的代码

figure

仅使用 figure 可以创建一个新的图形窗口。

  • subplot(2, 1, 1):这个命令创建一个 2 行 1 列的图形区域,并使接下来的绘图在第一个子图中进行。
    • 第一个参数 2 指定区域的行数(总共 2 行)。
    • 第二个参数 1 指定区域的列数(总共 1 列)。
    • 第三个参数 1 指定当前活动子图的编号(这里是第一个子图)。
  • plot(t, h):绘制 与  h(高度)之间的关系。
    • t 是 x 轴的数据,通常代表时间。
    • h 是 y 轴的数据,表示对应时间的高度。
    • 这个命令生成一个二维曲线图,x 轴为时间,y 轴为高度。
  • xlabel('时间 (秒)'):设置 x 轴的标签为“时间 (秒)”。 
  • ylabel('高度 (米)'):设置 y 轴的标签为“高度 (米)”。
  • title('高度随时间变化'):给当前绘制的子图添加标题“高度随时间变化”。 
  • grid on:打开网格线,方便查看数据点的分布和变化。
    • 启用网格后,图中的坐标轴将显示为网格线,增强了可读性。

 

 

3.  在MATLAB中使用一个循环确定:如果用户最初在一个银行账户中存储10000,并且在每年的年终再存储10000(银行每年支付6%的利息),那么账户上要累积1000000需要多长时间。

% 初始化变量
initialDeposit = 10000;    % 初始存款
annualDeposit = 10000;     % 每年存入的金额
interestRate = 0.06;       % 年利率
targetAmount = 1000000;    % 目标金额
currentAmount = initialDeposit; % 当前账户余额
years = 0;                 % 年数

% 循环计算每年存款后账户的余额
while currentAmount < targetAmount
    % 每年存入金额
    currentAmount = currentAmount + annualDeposit;
    
    % 计算利息
    currentAmount = currentAmount * (1 + interestRate);
    
    % 增加年数
    years = years + 1;
end

% 输出结果
disp(['达到 ' num2str(targetAmount) ' 元所需的年数: ' num2str(years)]);

4. 已知二阶代数方程ax2+bx+c=0的解为

编写一个函数function x = solveeq(a,b,c),使其给定不同的a,b,c值时可以求解该二阶代数方程的解x,并在MATLAB命令窗口中调用该函数来测试解的四种情况。

(提示:使用if-else-end结构编写。)

function x = solveeq(a, b, c)
    % 检查 a 是否为零
    if a == 0
        error('a 不能为零。请确保 a 不为零。');
    end

    % 计算判别式
    D = b^2 - 4*a*c;

    if D > 0
        % 两个不同的实根
        x(1) = (-b + sqrt(D)) / (2*a);
        x(2) = (-b - sqrt(D)) / (2*a);
        disp(['方程有两个不同的实根: x1 = ' num2str(x(1)) ', x2 = ' num2str(x(2))]);
    elseif D == 0
        % 一个重根
        x(1) = -b / (2*a);
        disp(['方程有一个重根: x = ' num2str(x(1))]);
    else
        % 两个共轭复根
        realPart = -b / (2*a);
        imagPart = sqrt(-D) / (2*a);
        x(1) = complex(realPart, imagPart);
        x(2) = complex(realPart, -imagPart);
        disp(['方程有两个共轭复根: x1 = ' num2str(x(1)), ', x2 = ' num2str(x(2))]);
    end
end

测试代码

测试代码:
% 测试案例1: 两个不同的实根
solveeq(1, -3, 2);
% 测试案例2: 一个重根
solveeq(1, -2, 1);
% 测试案例3: 两个共轭复根
solveeq(1, 2, 5);
% 测试案例4: a = 0 (将报错)
% solveeq(0, 2, 3); % 取消注释以测试

 

标签:sort,disp,end,currentAmount,冒泡排序,solveeq,num2str,matlab,theta
From: https://blog.csdn.net/2301_78460097/article/details/142501653

相关文章

  • 05 第六组(10个) sorted enumerate callable id len range open input
    第六组(10个)lenprintinputopen,文件rangepy2:v1=rang(10)#会生成列表[0....9]立即创建v1=xrang(10)#生成对象不会立即创建,只有使用循环时,进行创建,用一个进行创建一个,更节省内存py3:v1=rang(10)#会生成列表[0....9]#生成......
  • MATLAB火焰检测系统
    MATLAB火焰检测系统是一种基于MATLAB编程语言开发的火焰检测系统。该系统利用图像处理和模式识别算法来实时检测并识别火焰。系统的工作流程如下:采集图像:利用摄像机或其他设备实时采集火焰图像。图像预处理:对采集到的图像进行预处理,包括图像增强、去噪、调整亮度对比度等操作......
  • MATLAB 线性 颜色 标记 不重复设计
    num_big=12;%至少9*4*11才会重复colors_9={'#0072BD';'#D95319';'#EDB120';'#7E2F8E';'#77AC30';...'#4DBEEE';'#A2142F';'#FF00FF';'#48D1CC'};num_c=le......
  • YOLOv8实战和matlab建模:检测监控站视频的车流量、速度、车辆时间占用率以及预估拥堵模
            我们得到了某监控点的检测视频数据,需要从数据当中得到车流量、速度、车辆时间占用率等基本数据然后用于车道推测拥堵。以某一路段内检测点为例利用YOLOv8实战检验。假设:车辆只有轿车与卡车两种类型并分别设置车长;某路段只检测双车道并且应急车道不开放;YOLOv8......
  • Python中sort()和sorted()的区别
    在Python语言中,想要对列表进行排序,通常使用两种方法:sort和sorted。这两个都是Python中的排序函数,虽有着相同的作用,但却有着很大的区别,那么Python中sort和sorted区别是什么?以下是详细内容介绍。Python中sort()和sorted()的区别在Python中,sort()和sorted()都是用于对序......
  • 时序预测 | Matlab实现SSA-TCN麻雀搜索算法优化时间卷积网络时序预测-递归预测未来数
    时序预测|Matlab实现SSA-TCN麻雀搜索算法优化时间卷积网络时序预测-递归预测未来数据(单输入单输出)目录时序预测|Matlab实现SSA-TCN麻雀搜索算法优化时间卷积网络时序预测-递归预测未来数据(单输入单输出)预测效果基本介绍程序设计参考资料预测效果基本介绍1.Matlab实现SSA-TCN......
  • MATLAB在无线通信标准与协议支持中的作用
    MATLAB是一款强大的数学计算和工程仿真软件,广泛应用于无线通信系统的设计、仿真和分析。它提供了一系列的工具箱,专门用于支持无线通信系统的标准和协议。本文将详细介绍MATLAB对无线通信系统标准和协议的支持,包括5G、Wi-Fi、LTE、卫星通信和蓝牙等。一、MATLAB无线通信工具......
  • MATLAB在无线通信系统故障诊断中的应用
    在无线通信系统的开发和维护过程中,故障诊断是一个至关重要的环节。MATLAB提供了一系列的工具和功能,可以帮助工程师和研究人员进行有效的故障诊断。本文将详细介绍如何在MATLAB中进行无线通信系统的故障诊断,包括基本的故障诊断方法、代码示例和应用场景。一、无线通信系统故......
  • 套娃!双路+双向!TCN-Transformer+BiLSTM多变量时间序列预测(Matlab)
    套娃!双路+双向!TCN-Transformer+BiLSTM多变量时间序列预测(Matlab)目录套娃!双路+双向!TCN-Transformer+BiLSTM多变量时间序列预测(Matlab)效果一览基本介绍程序设计参考资料效果一览基本介绍1.Matlab实现双路+双向!TCN-Transformer+BiLSTM多变量时间序列预测(Mat......
  • 【无人机】四旋翼飞行器目标分配、全局路径规划和局部路径规划(Matlab代码实现)
       ......