欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

matlab 未定义与‘XXX‘类型的输入参数相对应的函数‘princomp‘

程序员文章站 2024-01-19 11:37:34
...

今天某同学让我帮他看看matlab代码出了什么问题。首先运行代码,出现了第一个问题:

matlab 未定义与‘XXX‘类型的输入参数相对应的函数‘princomp‘

这个GetSal函数是一个文件外的自定义函数,一看运行的当前目录和这个函数所在的目录不在同一个目录下,在代码里加入addpath(自定义函数所在目录)即可。

加入这行代码,重新运行后出现第二个问题:

matlab 未定义与‘XXX‘类型的输入参数相对应的函数‘princomp‘

princomp这个函数也是没有的,第一反应和第一个问题一样,结果在代码文件夹内并没有找到该函数,那么就有两个可能,第一是作者漏了,第二是系统函数。但是在命令框里搜索help princomp并没有结果:

 

matlab 未定义与‘XXX‘类型的输入参数相对应的函数‘princomp‘

但是似乎这个printcomp和princomp并不是一回事,然后去百度这个函数,能搜到几篇博客讲什么用这个的,但是博客发布日期都是14年以前,猜测可能是2015版本更迭这个函数被删除了(我用的是2019并且csdn论坛上曾有人2015年问过这个问题),只要从网上找到这个函数的代码或者替代品就可以了。

搜了半天似乎并没有找个这个函数的代码,但是百度知道(https://zhidao.baidu.com/question/1861253164912406107.html)提供了以下知识:

matlab 未定义与‘XXX‘类型的输入参数相对应的函数‘princomp‘

就是说很有可能系统函数pca代替了princomp,并且这两个函数的输入输出差不多(pca多一个),那么只要在调用princomp的代码里把princomp换成pca就可以解决了,不过要在获得的结果中加入~,即[coeff,score,tsquared,~]=pca(...)。

但是寻根溯源发现是被一个.p文件调用的,由于.p文件是被封装了的加密.m文件,无法正常打开,所以想了一个方法,通过自编princomp函数调用pca,然后把这个自编函数放在和这个调用他的.p同一目录下即可:

function [COEFF,SCORE,latent,tsquare] = princomp(X)
    [COEFF,SCORE,latent,tsquare,~]= pca(X);
end

 

matlab 未定义与‘XXX‘类型的输入参数相对应的函数‘princomp‘

相关标签: Matlab 编程