求大神把matlab程序改写成C/C++程序

如题matlab程序如下:%根据计盒维数原理编写了求一维曲线分形维数的matlab程序%functionD=FractalDim(y,cellmax)%求输入一维信号的计... 如题
matlab程序如下:
%根据计盒维数原理编写了求一维曲线分形维数的matlab程序

%function D=FractalDim(y,cellmax)

%求输入一维信号的计盒分形维数
%y是一维信号
%cellmax:方格子的最大边长,可以取2的偶数次幂次(1,2,4,8...),取大于数据长度的偶数
%D是y的计盒维数(一般情况下D>=1),D=lim(log(N(e))/log(k/e)),

y=[1,1,5,1,1,5];
cellmax=128;

if cellmax<length(y) %检测向量长度是否合符要求
error('cellmax must be larger than input signal!') %报错
end
L=length(y);%输入样点的个数
y_min=min(y);%取最小值

%移位操作,将y_min移到坐标0点
y_shift=y-y_min;
%重采样,使总点数等于cellmax+1
x_ord=[0:L-1]./(L-1);
xx_ord=[0:cellmax]./(cellmax);
y_interp=interp1(x_ord,y_shift,xx_ord);
%按比例缩放y,使最大值为2^c
ys_max=max(y_interp);
factory=cellmax/ys_max;
yy=abs(y_interp*factory);

t=log2(cellmax)+1;%叠代次数
for e=1:t
Ne=0;%累积覆盖信号的格子的总数
cellsize=2^(e-1);%每次的格子大小
NumSeg(e)=cellmax/cellsize;%横轴划分成的段数

for j=1:NumSeg(e) %由横轴第一个段起通过计算纵轴跨越的格子数累积N(e)
begin=cellsize*(j-1)+1;%每一段的起始
tail=cellsize*j+1;
seg=[begin:tail];%段坐标
yy_max=max(yy(seg));
yy_min=min(yy(seg));
up=ceil(yy_max/cellsize);
down=floor(yy_min/cellsize);
Ns=up-down;% 本段曲线占有的格子数
Ne=Ne+Ns;%累加每一段覆盖曲线的格子数

end

N(e)=Ne;%记录每e下的N(e)
end

%对log(N(e))和log(k/e)进行最小二乘的一次曲线拟合,斜率就是D

r=-diff(log2(N));%去掉r超过2和小于1的野点数据
id=find(r<=2&r>=1);%保留的数据点
Ne=N(id);
e=NumSeg(id);
plot(log2(e),log2(Ne),'+'); %画图
lsline;
P=polyfit(log2(e),log2(Ne),1);%一次曲线拟合返回斜率和截距
D=P(1)

求大神将其改写成C/C++,并实现同样的功能,万分感谢
展开
 我来答
  • 你的回答被采纳后将获得:
  • 系统奖励15(财富值+成长值)+难题奖励10(财富值+成长值)+提问者悬赏20(财富值+成长值)
若以下回答无法解决问题,邀请你更新回答
a_fa310
2015-06-09 · 超过25用户采纳过TA的回答
知道答主
回答量:99
采纳率:0%
帮助的人:45.3万
展开全部
用matlab自带的工具coder可以转化,或者手动生成可以调用的文件。网上搜一搜,步骤很清楚!
更多追问追答
追问
额,昨晚已经试过了,但是好像有点问题,能请你帮我转化吗?
追答
刚刚试了一下,没成功!不好意思!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式