❶ 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