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


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

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

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

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

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

    还有:

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

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

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

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

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

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

    3、

    1. clc;clear;close all;
    2. x=1:1:30;
    3. 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];
    4. %输入题目中所给数据
    5. c=0;
    6. for i=1:5 %寻找曲线拟合合适的阶数
    7. y2=polyfit(x,y,i);
    8. Y=polyval(y2,x); %计算拟合函数在x处的值。
    9. if sum((Y-y).^2)<0.01 %如果误差小于0.01则判定为有效曲线拟合
    10. c=i;
    11. break;
    12. end
    13. end
    14. %由于原始数据因素,最终采用3阶拟合
    15. y2=polyfit(x,y,3);
    16. disp(y2);

    4、

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

    5、

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

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

    最小值点为:

    -1.4142, -1.4142

    最小值为:

    -8.8284

    6、

    1. % 定义导弹飞行轨迹的四个一阶方程
    2. function dydx = missile(x,y)
    3. % 参数设置(所有单位均为英尺)
    4. c = 0.002; % 拉力系数
    5. g = 32.2; % 重力加速度
    6. v0 = 600; % 初始速度
    7. a = pi/4; % 初始角度
    8. % 条件检查
    9. if abs(y(1)) < v0*10^(-6) % 如果水平速度太小,终止程序
    10. error('水平速度太小,无法继续计算')
    11. end
    12. % 四个一阶方程
    13. dydx = zeros(4,1); % 初始化输出向量
    14. dydx(1) = -c*y(1); % dvx/dx=-cv
    15. dydx(2) = -(g+c*y(2)*v0/y(1)); % dvy/dx=-(g+cv*vy)/vx
    16. dydx(3) = y(2)/y(1); % dy/dx=vy/vx
    17. dydx(4) = 1/y(1); % dt/dx=1/vx
    18. end
    1. clc;clear;close all;
    2. % 定义初始条件
    3. c = 0.002; % 拉力系数
    4. g = 32.2; % 重力加速度
    5. v0 = 600; % 初始速度
    6. a = pi/4; % 初始角度
    7. v0x = v0*cos(a); % 水平分量
    8. v0y = v0*sin(a); % 垂直分量
    9. y0 = 0; % 初始高度
    10. t0 = 0; % 初始时间
    11. yinit = [v0x;v0y;y0;t0]; % 初始条件向量
    12. % 定义求解区间
    13. x0 = 0; % 初始位置
    14. xfinal = 1000; % 最终位置
    15. % 调用ode45函数求解
    16. [x,y] = ode45(@missile,[x0,xfinal],yinit);
    17. % 第一题:画出导弹飞行轨迹
    18. ind = find(y(:,3)>0); % 找到y>0的索引
    19. plot(x(ind),y(ind,3),'b-') % 画出x-y曲线
    20. xlabel('水平距离 x (ft)') % x轴标签
    21. ylabel('垂直高度 y (ft)') % y轴标签
    22. title('导弹飞行轨迹') % 标题
    23. grid on % 网格线
    24. % 第二题:求导弹的最大上升高度及飞行距离
    25. ymax = max(y(:,3)); % 最大高度
    26. xind = find(y(:,3)==ymax); % 对应的x索引
    27. xmax = x(xind); % 对应的x值
    28. fprintf('导弹的最大上升高度为 %.2f ft,出现在 %.2f ft 处\n',ymax,xmax)
    29. % 第三题:求y=0时的x值及飞行时间
    30. x0 = interp1(y(:,3),x,0); % 用插值法求y=0时的x值
    31. t0 = interp1(y(:,3),y(:,4),0); % 用插值法求y=0时的t值
    32. fprintf('导弹在 y=0 时的水平距离为 %.2f ft,飞行时间为 %.2f s\n',x0,t0)

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

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

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

  • 相关阅读:
    java中MD5加密
    谈谈Selenium中浏览器驱动的日志
    fastadmin前端表格组件如何正确使用表格组件的formatter属性
    07、JavaWeb启程——网络编程&Tomcat服务器
    上海控安SmartRocket系列产品推介(二):SmartRocket Modeler可视化建模开发工具
    More Effective C++学习笔记(6)
    Android手机连接电脑弹出资源管理器
    注意力机制的一种卷积替代方式
    9.14|day 7| day 46| 139.单词拆分 |关于多重背包,你该了解这些!|背包问题总结篇!
    新零售SaaS架构:中央库存系统架构设计
  • 原文地址:https://blog.csdn.net/qq_72375109/article/details/134491585