当前位置: 首页 > article >正文

MATLAB程序设计课后作业三、四

1、课程中学习到kmeans聚类函数,查询kmeans算法的基本原理,还有什么其他类型的聚类算法?

层次聚类算法,它不需要预先指定簇的个数,而是通过构建数据点的层次结构来进行聚类,可以得到不同层次的聚类结果。一个典型的层次聚类算法是AGNES,它采用自底向上的聚合策略,初始时将每个数据点视为一个簇,然后逐渐合并距离最近的簇,直到满足停止条件。

网格聚类算法,它将数据空间划分为有限网格单元,然后对网格单元而不是数据点进行聚类,可以降低计算复杂度,适合处理大规模的数据集。一个典型的网格聚类算法是STING,它采用四叉树的结构,将数据空间递归地划分为统计信息网格,然后根据网格的密度和分布特征来划分簇。

模型聚类算法,它假设数据点是由某种概率模型生成的,然后根据模型的参数来划分簇,可以得到簇的概率描述,适合处理复杂的数据分布。一个典型的模型聚类算法是GMM,它假设数据点是由多个高斯分布混合而成的,然后利用EM算法来估计每个高斯分量的参数和权重,以及每个数据点的隐变量,从而划分簇。

2、Matlab中除了kmeans外还有哪些聚类的函数?

还有:

clusterdata:用于对数据进行层次聚类,可以指定不同的距离度量和连接方法,也可以指定聚类的个数或阈值。

linkage:用于生成层次聚类树,可以指定不同的距离度量和连接方法,也可以返回不一致性系数。

cluster:用于根据层次聚类树进行聚类,可以指定聚类的个数或阈值,也可以指定不同的切割标准。

silhouette:用于评估聚类的质量,可以计算并绘制每个数据点的轮廓系数,也可以返回聚类的平均轮廓系数。

dbscan:用于对数据进行基于密度的聚类,可以指定邻域半径和邻域密度阈值,也可以返回核心点、边界点和噪声点的标识。

gmdistribution:用于对数据进行高斯混合模型聚类,可以指定高斯分量的个数和协方差矩阵的形式,也可以返回模型的参数和后验概率。

3、

clc;clear;close all;
x=1:1:30;
y=[33815,33981,34004,34165,34212,34327,34344,34458,34498,34476,34483,34488,34513,34497,34511,34520,34507,34509,34521,34513,34515,34517,34519,34519,34521,34521,34523,34525,34525,34527];
%输入题目中所给数据
c=0;
for i=1:5           %寻找曲线拟合合适的阶数
    y2=polyfit(x,y,i);
    Y=polyval(y2,x);            %计算拟合函数在x处的值。
    if sum((Y-y).^2)<0.01           %如果误差小于0.01则判定为有效曲线拟合
        c=i;  
        break;
    end
end
%由于原始数据因素,最终采用3阶拟合
y2=polyfit(x,y,3);
disp(y2);

4、

clc;clear;close all;
f=[-2,3,0;2,2,-3;3,4,0];
w=[-150;-100;-100];
x=f\w;
disp(x);

5、

clc;clear;close all;
% 定义函数f(x,y)
f = @(x,y) x.^3 - y.^3 + x.*y + 2*x.^2;
% 定义约束条件
g = @(x,y) x.^2 + y.^2 - 6;
h = @(x,y) x.*y - 2;
% 定义优化问题
problem = createOptimProblem('fmincon','objective',f,'x0',[1,1],'nonlcon',@(x)deal(g(x(1),x(2)),h(x(1),x(2))));
% 使用全局搜索算法求解,全局算法需要从市场上下载后才能使用
gs = GlobalSearch;
[x,fval] = run(gs,problem);
% 显示结果
disp('最小值点为:')
disp(x)
disp('最小值为:')
disp(fval)

由于操作复杂,在这里直接给出答案

最小值点为:

-1.4142, -1.4142

最小值为:

-8.8284

6、

% 定义导弹飞行轨迹的四个一阶方程
function dydx = missile(x,y)
    % 参数设置(所有单位均为英尺)
    c = 0.002; % 拉力系数
    g = 32.2; % 重力加速度
    v0 = 600; % 初始速度
    a = pi/4; % 初始角度
    % 条件检查
    if abs(y(1)) < v0*10^(-6) % 如果水平速度太小,终止程序
        error('水平速度太小,无法继续计算')
    end
    % 四个一阶方程
    dydx = zeros(4,1); % 初始化输出向量
    dydx(1) = -c*y(1); % dvx/dx=-cv
    dydx(2) = -(g+c*y(2)*v0/y(1)); % dvy/dx=-(g+cv*vy)/vx
    dydx(3) = y(2)/y(1); % dy/dx=vy/vx
    dydx(4) = 1/y(1); % dt/dx=1/vx
end
clc;clear;close all;
% 定义初始条件
c = 0.002; % 拉力系数
g = 32.2; % 重力加速度
v0 = 600; % 初始速度
a = pi/4; % 初始角度
v0x = v0*cos(a); % 水平分量
v0y = v0*sin(a); % 垂直分量
y0 = 0; % 初始高度
t0 = 0; % 初始时间
yinit = [v0x;v0y;y0;t0]; % 初始条件向量

% 定义求解区间
x0 = 0; % 初始位置
xfinal = 1000; % 最终位置

% 调用ode45函数求解
[x,y] = ode45(@missile,[x0,xfinal],yinit);

% 第一题:画出导弹飞行轨迹
ind = find(y(:,3)>0); % 找到y>0的索引
plot(x(ind),y(ind,3),'b-') % 画出x-y曲线
xlabel('水平距离 x (ft)') % x轴标签
ylabel('垂直高度 y (ft)') % y轴标签
title('导弹飞行轨迹') % 标题
grid on % 网格线

% 第二题:求导弹的最大上升高度及飞行距离
ymax = max(y(:,3)); % 最大高度
xind = find(y(:,3)==ymax); % 对应的x索引
xmax = x(xind); % 对应的x值
fprintf('导弹的最大上升高度为 %.2f ft,出现在 %.2f ft 处\n',ymax,xmax)

% 第三题:求y=0时的x值及飞行时间
x0 = interp1(y(:,3),x,0); % 用插值法求y=0时的x值
t0 = interp1(y(:,3),y(:,4),0); % 用插值法求y=0时的t值
fprintf('导弹在 y=0 时的水平距离为 %.2f ft,飞行时间为 %.2f s\n',x0,t0)

由于代码打印和函数问题,可能导致不同设备计算结果有误,这里直接给出最后结果

导弹的最大上升高度为 474.8285 ft,出现在 648.1205 ft 处

导弹在 y=0 时的水平距离为 975.3240 ft,飞行时间为 10.6246 s


http://www.kler.cn/a/135914.html

相关文章:

  • Unity3D学习FPS游戏(12)敌人检测和攻击玩家
  • AcWing 302 任务安排 斜率优化的dp
  • 《深度解析 C++中的弱引用(weak reference):打破循环依赖的利器》
  • C++20 中最优雅的那个小特性 - Ranges
  • 基于promtail+loki+grafana搭建日志系统
  • 字节跳动核心技术:TT推荐系统从0-1落地应用
  • 【设计模式】聊聊策略模式
  • 碰到一个逆天表中表数据渲染
  • C语言——2.安装并使用VS
  • 力扣刷题-二叉树-二叉树的高度与深度
  • 搭建网关服务器实现DHCP自动分配、HTTP服务和免密登录
  • 【数据结构(三)】单向环形链表和约瑟夫问题(3)
  • trzsz支持文件拖动到终端进行上传,类似lrzsz
  • 后端返回 date 时间日期格式为 UTC 格式字符串,形如 2022-08-11T10:50:31.050+00:00前端如何修改为yyyy-mm-dd
  • 公司电脑文件透明加密、防泄密管理软件系统
  • ASP.NET限流器的简单实现
  • 贝锐蒲公英路由器X4C如何远程访问NAS?
  • 面试官:你能说说常见的前端加密方法吗?
  • 基于单片机16路抢答器仿真系统
  • Ubuntu 22.04安装Rust编译环境并且测试
  • 【运维篇】Redis常见运维命令详解
  • 数据处理生产环境_利用MurmurHash3算法在Spark和Scala中生成随机颜色
  • 今天遇到Windows 10里安装的Ubuntu(WSL)的缺点
  • 搜索引擎ElasticSearch分布式搜索和分析引擎学习,SpringBoot整合ES个人心得
  • 【Linux 源码阅读记录】设备树解析 of 相关代码
  • idea显示pom.xml文件漂黄警告 Dependency maven:xxx:xxx is vulnerable