MATLAB进行模式识别的实验

2023-11-20

一.实验一习题:

在这里插入图片描述

我猜测是根据最大似然估计法先求出那两个参数的值,然后代入,得到的是只关于x的函数,然后把文本里的1000个数据导入,画图。
首先,我先把txt的数据读取到矩阵里面,方便后续处理,用到的函数:

(1).这里有一个比较详细的fopen的具体用法,本实验只需要fopen(‘name.txt’,‘rt’); //r是只读,t是以文本形式打开文件。
(2)feof读取到文末结束:

函数feof(fid) 用法:文件指针 fid 到达文件末尾时返回“真”值;否则返回“假”;
~feof 是在 feof 前加了“非”,是逻辑表达式:文件指针到达文件末尾时 该表达式值为“假”;否则为“真”;
用法简单来说就是:
while ~feof 表示 若 未读到文件末尾 则 继续 循环
while feof 表示 若 未读到文件末尾 则 终止 循环,所以只循环一次就终止

把数据读到矩阵里的代码:
第一种很简单:

fid = fopen('C:\Users\Administrator\Desktop\A.txt','rt'); 
sizeA =[1000 1];
data = fscanf(fid,'%f',sizeA);

第二种也还好:可以判断读取的数据是否为空,不读取为空的数据

k=0;
%如果数据为空,则不读取
if(fid == 0)
    return
end
% 从第一个读取到最后一个数据
while~feof(fid)  %读取到文件末尾则停止循环
    curr =fscanf(fid,'%f',1);
    if~isempty(curr)
        k = k+1;
        data(k) = curr;
    end
end 
clear k; %清除缓存
clear curr;
fclose(fid);

最终都能达到,把数据读取到data矩阵里面
在这里插入图片描述

然后第二部就是求两个参数的最大似然估计:

  1. 对 ln p(x)进行求和
  2. 用结果分别对两个参数求偏导数,并且计算等于0时另一个参数的数值
  3. 代入两个参数的数值,并且代入data里的数据,画图

写完之后一直报错,什么sym不正确之类的,查了查也没查明白,最后来回改了改试一试,发现
原因是,在让 f1函数 等于 f函数 的求和的步骤里,不能写成f1(a,th) = f1(a,th) + f(a,th)
要写成f1 = f1 + f(a,th) 就不报错了。。。。
然后就是求a和th数值的代码:

fid1 = fopen('C:\Users\Administrator\Desktop\A.txt','rt'); 
sizeA =[1000 1];
data = fscanf(fid1,'%f',sizeA);

k=0;
%如果数据为空,则不读取
if(fid1 == 0)
    return
end
% 从第一个读取到最后一个数据
while~feof(fid1)  %读取到文件末尾则停止循环
    curr =fscanf(fid1,'%f',1);
    if~isempty(curr)
        k = k+1;
        data(k) = curr;
    end
end 
clear curr;
clear fid;
clear k; %清除缓存
fclose(fid1);
 
for i = 1: 1000
    x(i) = data(i);   %数组
end
%x(1);   %第一个数值

syms a th
 for j = 1:1000
 xj = data(j); 
 %p(x) = (ax(2*pi)^(1/2))^(-1) * exp (-((2*a^2)^(-1))* (lnx - th)^2);//函数
 f(a,th) = log10((a * xj *(2*pi)^(1/2))^(-1) * exp (-((2*a^2)^(-1))* (log10(xj) - th)^2)); %外加ln
 %这两段都是求和用的
 if( j == 1)
     f1 = f(a,th);
 end
 if( j~=1)
     f1 = f1 + f(a,th);  
 end
 end
 
 [a,th]=solve([diff(f1,th)==0,diff(f1,a)==0 ],[a,th]); %分别求偏导数等于0,求两个参数

发现是个矩阵?

下一步是代入两个参量,然后画图,

实验一(2)正太分布的求法,其实都一样,只不过是p(x) 的式子变了。

因为想用txt里的数据去画图,而不是直接 x=1:10:100 这种方法去画图,于是先研究了把数据的散点图画出来,为了方便输入算式(主要是因为用matlab对正态分布的最大似然估计求偏导数过程中,操作代码有bug竟然求a出个负数于是放弃,直接手算求导再用matlab当作计算求和工具罢了)

%手动求导数,最终求出了u的算式,最大似然估计值为u,然后才有下面这步
sum = 0;
for n = 1:1000
    sum = data(n) +sum ;
end
u = sum /1000;
%手动求导数,最终求出了a的算式,最大似然估计值为a_zhengtai,然后才有下面这步
zum = 0;
for k = 1:1000
    zum = (data(k)-u)^2 + zum;
end
a_zhengtai = (zum/1000)^1/2;

%用lognpdf来画图,lognpdf是用来计算X中的元素在mu、sigma参数指定的对数正态分布下的概率密度函数值
for i =1:1000
x_zt = data(i);
y_zt = lognpdf(x_zt,u,a_zhengtai);
hold on
scatter(x_zt,y_zt);
% plotyy(x_zt,y_zt,'plot');这个是百度的,但是不知道怎么用,只画出一个点
plot(x_zt,y_zt,'-o');
end

结果为:
在这里插入图片描述
然后我想要把它们连成线,查了查
散点图如何绘制成连线图?

gplot的用法
简单总结就是 gplot(linjie_juzhen,XYCoords,’-or’);
1.
邻接矩阵就是一个nn的矩阵,比如说你用了1000个数据点,你就要有10001000的矩阵代表它们连接的关系,例如,第一个点和第二个点连接,同时第二个点也和第一个点连接,那么就赋值
linjie_juzhen(1,2) =linjie_juzhen(2,1) = 1
其他没有连接关系的两点值为0,例如 linjie_juzhen(3,5)=linjie_juzhen(5,3) = 0
假设这些点是从左到右依次画出来的,那么就让(i,j+1) 和(i,j-1)都等于0。
2.
XYCoords是n*2的矩阵,是点坐标(x,y)的从上到下排列
需要把这个矩阵的值写好。
可能用到的:矩阵的转置:A的转置用 A.’
3.
后面那一项就是表明连接的线的样式,上面的用法里有

yju=[1000,1];
for p = 1:1000
    x_zt = data(p);
     yju(p) =  lognpdf(x_zt,u,a_zhengtai);
 end

 
linjie_juzhen = [1000,1000];  %先定义好大小为1000*1000,但是这个是连接相邻节点的,如果不排序是不行的,因为txt里是乱的
for i =1: 1000
    for j =1:1000
        
        if(j == i+1 && j<=1000)
            linjie_juzhen(i,j) = 1;
        elseif(j == i-1 && j>=0)
            linjie_juzhen(i,j) = 1;
        else
            linjie_juzhen(i,j+1) = 0;
        end
        
    end
end


XYCoords = [1000,2];
for i =1:1000
    for j =1:2
        if(j==1)
            XYCoords(i,j) = data(i);
        end
        if(j == 2)
            XYCoords(i,j) = yju(i);
        end
    end
end
gplot(linjie_juzhen,XYCoords,'-or');  

结果为:
在这里插入图片描述
很明显,数据的自变量并不是从小到大依次排列的。。

然后下面的就懒得做了。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB进行模式识别的实验 的相关文章

  • 在每次迭代中使用 for 循环的索引命名图像

    我正在使用 MATLAB 进行图像处理项目 我使用 for 循环在每次循环迭代时生成某种图像数据 图像大小不同 我的问题是如何阻止它在下一次迭代中覆盖图像 Img i j data 理想情况下我希望它有 Img 1 data for 1st
  • Matlab 中是否有相当于 R 的 dput() 的函数?

    Matlab 中是否有相当于 R 的 dput 的函数 dput 将 R 对象的 ASCII 文本表示形式写入文件或连接 UPDATE 1 添加了递归和对单元格的支持 UPDATE 2 添加了对结构的支持 UPDATE 3 增加了对逻辑 整
  • ODE 时间 Matlab 与 R

    如果在 matlab 中使用可变时间步长求解器 例如 ODE45 我会定义输出的时间跨度 即times 0 50 matlab 将返回 0 到 50 之间不同时间步长的结果 然而在 R 中 我似乎必须定义我希望 ODE 返回结果的时间点 即
  • 图像分析-光纤识别

    我是图像分析新手 您知道如何以仅获取纤维的方式对该图像进行二值化吗 我尝试过不同的阈值技术等 但没有成功 我不介意应该使用什么工具 但我更喜欢 NET or Matlab PS 我不知道该把答案放在哪里 所以我把它放在StackOverfl
  • Matlab-如何在曲线上绘制切线

    我在 matlab 中绘制了一个图表 plot x y 我的图表有不同的斜率 我如何在每个斜率上绘制切线并计算斜率的系数 如果您没有用于绘制点的显式函数 您可以使用有限差分 http en wikipedia org wiki Finite
  • Matlab:掩码/创建一个知道其原点且具有一定半径的圆形 roi

    只是一个简单的问题 我有一张图像 并且提取了某个点 特征 我知道每个帧中该点的坐标 说 x1 和 y1 我需要一个圆形 ROI 形式 该点在图像上具有我选择的半径 我尝试了 impoly 和 roipoly 当我知道图像中的要点时 不知道如
  • 在 MATLAB 中使用 FFT 的频率响应

    这是场景 使用频谱分析仪 我有输入值和输出值 样本数是32000采样率为2000样本 秒 输入是正弦波50 hz 输入为电流 输出为压力 单位 psi 我如何使用 MATLAB 根据这些数据计算频率响应 使用 MATLAB 中的 FFT 函
  • 计算数组中接下来的 n 个元素的乘积

    我想计算下一个的乘积n矩阵的相邻元素 号码n要相乘的元素数应在函数的输入中给出 例如 对于此输入 我应该从第一个开始计算每 3 个连续元素的乘积 p ind max product 1 2 2 1 3 1 3 这给出了 1 2 2 2 2
  • MATLAB中如何画水平线和垂直线?

    我目前正在尝试在 MATLAB 中绘制简单的垂直线和水平线 例如 我想绘制线 y 245 我该怎么做呢 MATLAB 根据您提供的向量逐点进行绘图 因此 要创建一条水平线 您需要改变x同时保持y对于垂直线恒定 反之亦然 xh 0 10 yh
  • 按元素出现的频率对数组元素进行排序

    是否可以在 matlab octave 中使用sort函数根据元素的相对频率对数组进行排序 例如数组 m 4 4 4 10 10 10 4 4 5 应该产生这个数组 5 10 10 10 4 4 4 4 4 5是出现频率较低的元素 位于顶部
  • Matlab Mex文件编译

    我正在尝试编译一个 mex 文件以在 matlab 中使用套接字连接 问题是它总是说我没有安装sdk或编译器 但我已经安装了 Visual Studio 2010 Express Visual Studio 2012 Express Vis
  • 两个 y 轴与相同的 x 轴[重复]

    这个问题在这里已经有答案了 可能的重复 在单个图中绘制 4 条曲线 具有 3 个 y 轴 https stackoverflow com questions 1719048 plotting 4 curves in a single plo
  • 使用mat2cell将MxN的矩阵划分为1xN大小的M矩阵

    我有一个大小为 MxN 的矩阵 比方说 1867x3 1867 行和 3 列 我想将其分成 1867 个大小为 1x3 的单元格 我使用了mat2cell X 1 1866 这里X是矩阵 1867x3 结果给出了两个单元格 一个单元格的大小
  • Matlab 字段名索引[重复]

    这个问题在这里已经有答案了 所以我有一个包含多个表的元胞数组 我试图访问表的第一个列名称 c table1 table2 table3 以下两行都给了我错误 fieldnames c 1 1 fieldnames c 1 1 Error i
  • MATLAB 特征函数

    我很好奇哪里可以找到完整的描述FEATURE功能 它接受哪些论点 没有找到文档 我只听说过memstats and getpid 还要别的吗 gt gt which feature built in undocumented 注意 更完整的
  • 如何在 Matlab 中将数组打印到 .txt 文件?

    我才刚刚开始学习Matlab 所以这个问题可能非常基本 我有一个变量 a 2 3 3 422 6 121 9 4 55 我希望将值输出到 txt 文件 如下所示 2 3 3 422 6 121 9 4 55 我怎样才能做到这一点 fid f
  • 使用符号求解器仅求解某些变量

    我正在尝试在 MATLAB 中求解包含 3 个变量和 5 个常量的方程组 是否可以使用solve求解三个变量 同时保持常量为符号而不用数值替换它们 当您使用SOLVE http www mathworks com access helpde
  • matlab中的正则逻辑回归代码

    我正在尝试正则化 LR 在 matlab 中使用以下公式很简单 成本函数 J theta 1 m sum y i log h x i 1 y i log 1 h x i lambda 2 m sum theta j 梯度 J theta t
  • 检测植物图片中的所有分支

    我想知道有什么可以检测下图中的所有绿色树枝 目前我开始应用 Frangi 过滤器 options struct FrangiScaleRange 5 5 FrangiScaleRatio 1 FrangiBetaOne 1 FrangiBe
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL

随机推荐

  • Redis—列表(List)、集合(Set)、哈希(Hash)、有序集合 Zset

    Redis 列表List 集合Set 哈希Hash 有序集合 Zset 列表List 单键多值 常用命令 数据结构 Redis 集合 Set 常用命令 数据结构 Redis 哈希 Hash 常用命令 数据结构 Redis 有序集合 Zset
  • ElasticSearch

    ElasticSearch 一 ES介绍 ES是一款基于倒排索引的NoSQL数据库 传统数据库对于模糊查询存在性能瓶颈 而ES更擅长与大数据量的模糊查询 ES在存储数据的时候会先将数据进行分词 将分词的结果作为索引存入数据库中 当进行查询时
  • eclipse和myeclipse下main方法找不到主类的一种情况

    经常碰到java的main函数无法加载的问题 很多人就会以为是eclipse大姨妈了 然后疯狂的clean 疯狂的重启 其实不然 我们找到java build path找到下面的地方 看看路径是否指向编译后的class 需要注意的是 在ma
  • Java服务端限制下载速度

    没有资源取之不尽用之不竭 服务器带宽有限 能限制一点算一点 最近在使用云存储openstack swift做文件存储下载 如题先上限速code private Long writeResponse HttpServletResponse r
  • js制作简易计算器

    实现2个输入框中输入整数后 点击第三个输入框能给出2个整数的加减乘除 提示 获取元素的值设置和获取方法为 例 赋值 document getElementById id value 1 取值 var document getElementB
  • oracle 建表 提示 ora-00955:名称已由现有对象使用.

    问题 oracle 执行 Create table 设备执行库房 设备id number 18 执行库房id number 18 提示 ora 00955 名称已由现有对象使用 但是执行 drop table 设备执行库房 却提示表或视图不
  • java生成随机数组_JAVA生成随机数组10个数字并求和

    JAVA生成随机数组10个数字并求和 本文最终结果大概是这样的 使用java技术随机生成10个数 然后填充一个数组并在消息框中显示数组内容 接着对数组求和输出 将结果显示在消息框中 设计思路 可以先用Math Random 1000生成10
  • hive-05-Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.mr.MapredLocalTask

    hive命令行里执行了一句话 select from person join zhanghao on person zjhm zhanghao zjhm limit 100 就是两个表做连接查询 数据量大小一个是3千万 一个是3亿 结果报错
  • 【Transformer系列】深入浅出理解Transformer网络模型(综合篇)

    一 参考资料 The Illustrated Transformer 图解Transformer 完整版 Attention Is All You Need The Core Idea of the Transformer transfor
  • 【含源码】两种不同风格的圣诞树代码合集,其中还有可以改名字的圣诞树代码

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 前言 一年一度的圣诞节马上就要到了 看到好多程序员小伙伴已经开始炫耀自己制作的圣诞树了 今天就跟大家分享2种不同风格的圣诞树 附上完整代码 拿来即用可以按照自
  • Linux常用命令记录

    文章目录 1 软件安装 安装软件 来自源服务器 安装 deb软件 来自本地 deb文件 修复依赖关系 卸载软件 2 文件 文件夹操作 删除文件夹 移动文件 文件重命名 3 程序查看 处理 进程查看 查看端口占用情况 强制终止程序 4 解压文
  • 肖sir__mysql之单表__004

    mysql之单表 一 建表语句 1 show databases 查看所有的数据库 2 create databaes 数据库名 创建数据库 3 use 数据库名 指定使用数据库 4 show tables 5 创建表 格式 create
  • linux计算字符串个数,Linux 统计某个字符串个数的方法

    在 Linux 系统下 有时候 我们可能要对一个日志文件进行分析 比如 分析日志文件中某个单词或者某个特殊字符串出现了多少次 对于匹配统计 一般用到正则方法 下面总结了几个统计字符串个数的方法 方法一 使用 grep 命令 grep o 字
  • Python自动化测试 软件测试最全教程(附笔记),看完就可就业

    最近看到很多粉丝在后台私信我 叫我做一期Python自动化测试的教程 其实关于这个问题 我也早就在着手准备了 我录制了一整套完整的Python自动化测试的教程 都上传在B站上面 大家有兴趣的可以去看一下 Python自动化测试 手把手教你做
  • springboot不香吗?为什么还要使用springcloud

    1 为什么要使用springcloud 如果我们的服务需要调用另外的一个服务 当然可以通过url 加接口直接调用 但是如果url变动后 我们也要跟着修改 还有可能服务宕机我们也不知道 而且现在只有一个url不具备高可用性 就算有多个url
  • Hudi Log 文件格式与读写流程

    Hudi Log 文件格式与读写流程 背景 对 Hudi 有一定了解的读者应该知道 Hudi 有 COW 和 MOR 两种表类型 其中的 MOR 表会通过日志文件记录文件 写入一个 MOR 表后产生的文件可以观察到 一个 MOR 表数据存储
  • 【LeetCode与《代码随想录》】字符串篇:做题笔记与总结-JavaScript版

    文章目录 代码随想录 主要题目 344 反转字符串 541 反转字符串 II 剑指 Offer 05 替换空格 151 反转字符串中的单词 剑指 Offer 58 II 左旋转字符串 28 找出字符串中第一个匹配项的下标 KMP 还没写 4
  • 我最喜欢的10个顶级数据科学资源,kaggle、TDS、arXiv......

    当我声明数据科学正在成为最受欢迎的工作领域之一时 我想你不会与我争辩 特别是考虑到 哈佛商业评论 将 数据科学家 评为21世纪最性感的工作 在这个领域 我们已经走过了很长的路 从数据科学和机器学习等术语还不为人所知 到一切都聚集在统计学的保
  • systemd[1]: Failed to load SELinux policy. freezing.

    今天早上发现centos7无法启动了 界面提示systemd 1 Failed to load SELinux policy freezing 查到一篇资料说是selinux设置出问题了 他将 etc selinux config文件中的s
  • MATLAB进行模式识别的实验

    一 实验一习题 我猜测是根据最大似然估计法先求出那两个参数的值 然后代入 得到的是只关于x的函数 然后把文本里的1000个数据导入 画图 首先 我先把txt的数据读取到矩阵里面 方便后续处理 用到的函数 1 这里有一个比较详细的fopen的