❶ matlab 如何提取特定字符串之间的数据
fidin=fopen('text2.txt'); % 打开你的txt文件
fidout=fopen('mkmatlab.txt','w'); % 创建MKMATLAB.txt文件
while ~feof(fidin) % 判断是否为文件末尾
tline=fgetl(fidin); % 从文件读行
if double(tline(1))>=48&&double(tline(1))<=57 % 判断首字符是否是数值
fprintf(fidout,'%s\n\n',tline); % 如果是数字行,把此行数据写入文件MKMATLAB.txt
continue % 如果是非数字继续下一次循环
end
end
fclose(fidout);
运行后在matlab里打开(注意要在matlab里打开)MKMATLAB.txt全选内容并复制,再在matlab对话框里输入a=[],把内容粘贴到[]里就行了,这下你要的数字都在a里
❷ 怎样在matlab中输出mk检验结果求具体步骤
UF,UB]=MannKendall(Y);
% % Y即为待检测的时间序列
figure,hold on;
plot(UF,'-b');
plot(UB,'-r');
function [UF,UB]=MannKendall(timeseries)
N=length(timeseries);
UF=SMK(timeseries,N);
for i=1:N
YY(i)=timeseries(N+1-i);
end
u_res=SMK(YY,N);
for i=1:N
UB(i)=-u_res(N+1-i);
end
function u_res=SMK(Y,N)
m_res=zeros(N,1);md_res=zeros(N,1);u_res=zeros(N,1);
m_res(1)=0;
for i=2:N
m_res(i)=0;
md_res(i)=0;
for j=1:i-1
if Y(i)<Y(j)
m_res(i)=m_res(i)+0;
else
m_res(i)=m_res(i)+1;
end
md_res(i)=md_res(i-1)+m_res(i);
end
end
u_res(1)=0;
for i=2:N
E=i*(i-1)/4;
VAR=i*(i-1)*(2*i+5)/72;
u_res(i)=(md_res(i)-E)/sqrt(VAR);
end
❸ MK检验用什么软件来做谁有资料,告诉我下,尽量全些!
MK检验可以用很多软件做,我一般用matlab做,资料都是项目资料,不能给了。一般生成UB,UF曲线图。。
❹ 求大神!matlab代码错误如何调试,未定义的函数'mk_bnet'用于类型'cell'的输入参数。
你要先向matlab中添加FULLBNT!!
2.向matlab中添加FULLBNT,参考地址:
http://hi..com/73290673/item/21db99f36d90bc49932af29d
采用MATLAB语言编制的贝叶斯网络工具箱(Bayesian Networks Toolbox,BNT)可实现贝叶斯网络结构学习、参数学习、推理和构建贝叶斯分类器,此工具箱在贝叶斯学习编 程方面非常灵活。
官方主页:http://www.cs.ubc.ca/~murphyk/Software/BNT/bnt.html
官方下载:http://www.cs.ubc.ca/~murphyk/Software/BNT/FullBNT-1.0.4.zip
原文链接:http://hi..com/zgyz/blog/item/2d3627f415c7fbe77709d763.html
贝叶斯网络:http://www.cs.ubc.ca/~murphyk/Software/BNT/bnt.html
语音工具箱:http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html
1、解压FullBNT-1.0.4.zip,将整个目录FullBNT-1.0.4复制到MATLAB的安装目录的TOOLBOX目录下,如D:\MATLAB7\toolbox\
2、打开Matlab,在MATLAB命令窗口中输入以下命令:
>> cd D:\MATLAB7\toolbox\FullBNT-1.0.4
>> addpath(genpathKPM(pwd))
>>
将TOOLBOX下新加的BNT工具箱加到MATLAB的搜索路径中去。
添加BNT工具箱的MATLAB的搜索路径也可采用如下指令
>> addpath(genpath('D:\MATLAB7\toolbox\FullBNT-1.0.4'))
>>
3、为了永久保存上面的路径,以免下次重启MATLAB时重新添加,在MATLAB命令窗口下使用下面的命令:
>> savepath
>>
4、检验是否成功设置的方法:
在命令窗口中输入以下命令:which test_BNT.m(可以为所加工具箱的任一个M文件名称),如果显示正确,就说明上面的设置成功。
>> which test_BNT.m
D:\MATLAB7\toolbox\FullBNT-1.0.4\BNT\test_BNT.m
>>
3.关于FULLBNT使用简单教程
http://www.cs.ubc.ca/~murphyk/Software/BNT/usage.html#examples
http://blog.sina.com.cn/s/blog_6c7b434d01013ufz.html
参考链接:http://blog.csdn.net/moodytong/article/details/8122327
❺ origin可以做mk突变检验吗
不可以。
可以用MATLAB软件做,输入代码就可以实现。
1、Mann-Kendall突变检测方法的简要计算步骤:计算顺序时间序列的秩序列,按照上述公式计算UFk。
2、计算逆序时间序列的秩序列,按照上述公式计算UBr
3、给定显着性水平,如a=0.05,对于临界值为Uo.os=加1.96,将UFr与UBx两个统计量序列曲线与Uo.os=土1.96两条直线绘制在-一个平面直角坐标系上。另外,a=0.10对应U0.10=加1.28,u=0.01对应U0.01=士2.32。分析绘制出的UFr与UBk曲线图,若UFr或UBk的值大于0,则表明序列呈上升趋势,小于0则呈下降趋势。当它们超出临界直线时,表明上升或下降趋势显着。超过临界线的范围确定为出现突变的时间区域。若UFx与UB,两条曲线出现交叉点,且交叉点在临界线之间,它们交叉点对应的时刻便是突变开始的时间。
❻ 帮忙调一下MATLAB程序
程序的问题在于你的函数fun是一个二元函数,而你的输入却只有x0一个值。所以会报错。简单修改如下:
函数文件:
function [x,y,val,k]=grad(fun,gfun,x0,y0)
% 功能: 用最速下降法求解无约束问题: min f(x)
%输入: x0是初始点, fun, gfun分别是目标函数和梯度
%输出: x, val分别是近似最优点和最优值, k是迭代次数.
maxk=5000; %最大迭代次数
rho=0.5;sigma=0.4;
k=0; epsilon=1e-5;
while(k<maxk)
g=feval(gfun,x0,y0); %计算梯度
d=-g; %计算搜索方向
if(norm(d)<epsilon), break; end
m=0; mk=0;
while(m<20) %Armijo搜索
if(feval(fun,x0+rho^m*d(1),y0+rho^m*d(2))<feval(fun,x0,y0)+sigma*rho^m*g'*d)
mk=m; break;
end
m=m+1;
end
x0=x0+rho^mk*d(1);
y0=y0+rho^mk*d(2);
k=k+1;
end
x=x0;
y=y0;
val=feval(fun,x0,y0);
调用方式:
clear;
clc;
f=@(x,y)100*(x^2-y)^2+(x-1)^2;
gf=@(x,y) [400*x*(x^2-y)+2*(x-1), -200*(x^2-y)]';
[x,y,val,k]=grad(f,gf,2,2);
❼ MATLAB怎样绘制矩阵某几列的曲线图
plot(MK(:,2),'r');
hold on;
plot(MK(:,3),'b');
hold on;
plot(MK(:,4),'y');
legend('曲线1','曲线2','曲线3')
axis([0 5 2 10]);
程序如上,望采纳。
❽ matlab如何读取其中的一部分文件
一、纯数据文件(没有字母和中文,纯数字)
对于这种txt文档,从matalb中读取就简单多了
例如test.txt文件,内容为
17.901 -1.1111 33.045
17.891 -1.1286 33.045
17.884 -1.1345 33.045
可以在command window中输入load test.txt ,然后就会产生一个test的数据文件,内容跟test.txt中的数据一样;另一种方法是在file/import data....../next/finish 也可产生一个叫test的数据文件。
二、中英文和数据如test1.txt
你好
欢迎来到
论坛
e.cn
1 11 111 1111
2 22 222 2222
3 33 333 3333
4 44 444 4444
5 55 555 5555
这样的文件怎么读入数据呢?
方法有多种,现举两个比较简单实用的。
方法一:
file/import data....../next/finish
>> whos
Name Size Bytes Class
data 5x4 160 double array
textdata 4x1 300 cell array
Grand total is 54 elements using 460 bytes
>> data
data =
1 11 111 1111
2 22 222 2222
3 33 333 3333
4 44 444 4444
5 55 555 5555
>> textdata
textdata =
'你好'
'欢迎来到'
'论坛'
'e.cn'
方法二:
[a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4)
说明:%s可以是其他形式,跟读入的数据类型有关,比如这里也可以用%n,%f等。
这里%s的个数和[a1,a2,a3,a4]对应。
>> [a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4)
a1 =
'1'
'2'
'3'
'4'
'5'
a2 =
'11'
'22'
'33'
'44'
'55'
a3 =
'111'
'222'
'333'
'444'
'555'
a4 =
'1111'
'2222'
'3333'
'4444'
'5555'
因以字符串的形式读入,所以有''。
————————————————————————————————
三、中文 数据 英文 混乱如test.txt
你好
1 11 111 1111
欢迎来到
2 22 222 2222
论坛
3 33 333 3333
e.cn
4 44 444 4444
5 55 555 5555
说明:这种内容格式的文件用上面的方法是不行的。
以下是由chinamaker编写的一种方法:
fidin=fopen('test.txt'); % 打开test2.txt文件
fidout=fopen('mkmatlab.txt','w'); % 创建MKMATLAB.txt文件
while ~feof(fidin) % 判断是否为文件末尾
tline=fgetl(fidin); % 从文件读行
if double(tline(1))>=48&&double(tline(1))<=57 % 判断首字符是否是数值
fprintf(fidout,'%s\n\n',tline); % 如果是数字行,把此行数据写入文件MKMATLAB.txt
continue % 如果是非数字继续下一次循环
end
end
fclose(fidout);
MK=importdata('MKMATLAB.txt'); % 将生成的MKMATLAB.txt文件导入工作空间,变量名为MK,实际上它不显示出来
>> MK
MK =
1 11 111 1111
2 22 222 2222
3 33 333 3333
4 44 444 4444
5 55 555 5555
---------------------------------------------------------------
我的txt数据里既有数字又有字符串,形式为:
0.129515 DDAA 01 2.24609 94.50000 98
0.130434 DDAA 01 2.24609 96.30000 9A
0.131441 DDAA 01 2.24609 97.20000 9B
0.132448 DDAA 01 2.24609 99.00000 9D
0.133507 DDAA 01 2.24609 100.80000 9F
0.134515 DDAA 01 2.24609 101.70000 A0
............
我只想要第一列,第四列,第五列。
也就是0.129515 2.24609 94.50000 这3列数,
怎样导入matlab啊?
假设数据在data.txt里,且位于当面matlab路径里,用下面这句就可以了
[col1,col2,col3]=textread('data.txt','%f %*s %*d %f %f %*s',-1);
❾ matlab怎么读取文本文件中的数据
方法一:
A=importdata(file,space,line)
其中,file是所读取的文件名,space是特定的分隔符,line是一个数字,指文本中字符串文字的行数,如上文的数据中line=4。
此代码的含义是,line行是title,line+1行到end是数据,按特定分隔符space读取数据。此方法可以读取文本在上和数据在下的文件。
A是一个sturct,其中A.data就是所需的数据了。
exapmle:
A=importdata('test.txt','
',4);%运行即可取得数据A.data
此方法也可以按以下操作获取:
在文件菜单中选择
file/import
data,按照提示进行操作至结束。
在
command
窗口中输入
>>
whos
Name
Size
Bytes
Class
data
5x4
160
double
array
textdata
4x1
300
cell
array
Grand
total
is
54
elements
using
460
bytes
>>
data
data
=
1
11
111
1111
2
22
222
2222
3
33
333
3333
4
44
444
4444
5
55
555
5555
>>
textdata
textdata
=
'你好'
'欢迎来到'
'百思论坛'
'www.si.net'
方法二:
[a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4)
说明:%s可以是其他形式,跟读入的数据类型有关,比如这里也可以用%d,%f等。
这里%s的个数和[a1,a2,a3,a4]对应。
>>
[a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4)
a1
=
'1'
'2'
'3'
'4'
'5'
a2
=
'11'
'22'
'33'
'44'
'55'
a3
=
'111'
'222'
'333'
'444'
'555'
a4
=
'1111'
'2222'
'3333'
'4444'
'5555'
因以字符串的形式读入,所以有''。
文件内容形式二(假定文件名为test2.txt):
你好
1
11
111
1111
欢迎来到
2
22
222
2222
百思论坛
3
33
333
3333
www.si.net
4
44
444
4444
5
55
555
5555
说明:这种内容格式的文件用上面的方法是不行的。
方法三:
以下是由chinamaker编写的一种方法,但是需要重新建一个文本。
fidin=fopen('test2.txt');
%
打开test2.txt文件
fidout=fopen('mkmatlab.txt','w');
%
创建MKMATLAB.txt文件
while
~feof(fidin)
%
判断是否为文件末尾
tline=fgetl(fidin);
%
从文件读行
if
double(tline(1))>=48&&double(tline(1))<=57
%
判断首字符是否是数值
fprintf(fidout,'%s\n\n',tline);
%
如果是数字行,把此行数据写入文件MKMATLAB.txt
continue
%
如果是非数字继续下一次循环
end
end
fclose(fidout);
MK=importdata('MKMATLAB.txt');
%
将生成的MKMATLAB.txt文件导入工作空间,变量名为MK,实际上它不显示出来
>>
MK
MK
=
1
11
111
1111
2
22
222
2222
3
33
333
3333
4
44
444
4444
5
55
555
5555