matlab未定义函数或变量(附上源代码)

matlab未定义函数或变量(附上源代码),第1张

子程序的v第一次出现之前确实没定义,你的v是在后面一句出现,运行到子程序肯定会报错的,当然这不是matlab给出的报错问题,matlab 给出的是没定义这个函数,你需要把这个函数拷贝到当前文件夹下或者把这个子程序文件加入到path中, matlab 才能识别出

以MATLAB  R2012b为例:

一、点击下图中红圈指示“Find Files”。

二、执行完步骤一,出现下图,先在红圈1中输入“kmeans”,再在红圈2中选择文件类型为“m“,再在红圈3中选择搜索范围”Entire MATLAB path“,再点击红圈4中”Find“,然后就会出现红圈5中的”kmeansm“,这时双击”kmeansm“即可打开kmeans函数的源代码。

三、对于其他版本的MATLAB,查找kmeans函数的源代码则大同小异了,而kmeans函数的使用方法,可在MATLAB的help中找到。至于如何选择初始点,好像有随机选择k个点法、选择批次距离尽可能远的k个点等等方法,具体还要查阅相关资料。

将代码保存在matlab中就可以用了
例如:function[poly]=polyadd(poly1,poly2)
%polyadd(poly1,poly2) adds two polynominals possibly of uneven length
if length(poly1)<length(poly2)
short=poly1;
long=poly2;
else
short=poly2;
long=poly1;
end
mz=length(long)-length(short);
if mz>0
poly=[zeros(1,mz),short]+long;
else
poly=long+short;
end
保存名为polyaddM 在matlab中输入polyadd就可以调用了

一般是用:type 函数名,但有些是看不到的比如fft,sin等。
给你个c++实现的fft
#include <iostream>
#include <fstream>
#include <mathh>
using namespace std;
const double PI = 314159265358979323846;
int n; // 数据个数 = 2的logn次方
int logn;
/// 复数结构体
struct stCompNum
{
double re;
double im;
};
stCompNum pData1 = NULL;
stCompNum pData2 = NULL;
/// Examda提示: 正整数位逆序后输出
int reverseBits(int value, int bitCnt)
{
int i;
int ret = 0;
for(i=0; i<bitCnt; i++)
{
ret |= (value & 0x1) << (bitCnt - 1 - i);
value >>= 1;
}
return ret;
}
void main()
{
ifstream fin("datatxt");
int i,j,k;
// input logn
fin>>logn;
// calculate n
for(i=0, n=1; i<logn; i++) n = 2;
// malloc memory space
pData1 = new stCompNum[n];
pData2 = new stCompNum[n];
// input raw data
for(i=0; i<n; i++) fin>>pData1[i]re;
for(i=0; i<n; i++) fin>>pData1[i]im;
// FFT transform
int cnt = 1;
for(k=0; k<logn; k++)
{
for(j=0; j<cnt; j++)
{
int len = n / cnt;
double c = - 2 PI / len;
for(i=0; i<len/2; i++)
{
int idx = len j + i;
pData2[idx]re = pData1[idx]re + pData1[idx + len/2]re;
pData2[idx]im = pData1[idx]im + pData1[idx + len/2]im;
}
for(i=len/2; i<len; i++)
{
double wcos = cos(c (i - len/2));
double wsin = sin(c (i - len/2));
int idx = len j + i;
stCompNum tmp;
tmpre = pData1[idx - len/2]re - pData1[idx]re;
tmpim = pData1[idx - len/2]im - pData1[idx]im;
pData2[idx]re = tmpre wcos - tmpim wsin;
pData2[idx]im = tmpre wsin + tmpim wcos;
}
}
cnt <<= 1;
stCompNum pTmp = NULL;
pTmp = pData1;
pData1 = pData2;
pData2 = pTmp;
}
// resort
for(i=0; i<n; i++)
{
int rev = reverseBits(i, logn);
stCompNum tmp;
if(rev > i)
{
tmp = pData1[i];
pData1[i] = pData1[rev];
pData1[rev] = tmp;
}
}
// output result data
for(i=0; i<n; i++) cout<<pData1[i]re<<"\t";
cout<<endl;
for(i=0; i<n; i++) cout<<pData1[i]im<<"\t";
cout<<endl;
// free memory space
delete []pData1;
delete []pData2;
finclose();
system("pause");
}

if nargout == 0 % nargout代表函数实际输出参数的个数。
% 如果在命令行直接调用ones(),nargout=0
% 如果给一个变量赋值,比如a=ones(),nargout=1
% 如果给若干变量赋值,如[a, b, ]=ones(),有几个变量,nargout就是几。
builtin('ones', varargin{:}); % 如果无输出参数,调用内建的ones函数
else
[varargout{1:nargout}] = builtin('ones', varargin{:}); % 否则,同样调用内建ones函数,但要给输出变量赋值返回的结果。varargout表示所有输出参数组成的队列。
end

比较笨的方法:
function index=mystrfind(text,patt)
%只适合于text为向量,不能是字符矩阵
textn=length(text);
pattn=length(patt);
index=[];
if (textn<pattn)
return ;
end
for i=1:(textn-pattn)
if strcmp(text(i:i+pattn-1),patt)
index=[index,i];
end
end


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12610214.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-26
下一篇2025-08-26

发表评论

登录后才能评论

评论列表(0条)

    保存