顯示具有 Octave 標籤的文章。 顯示所有文章
顯示具有 Octave 標籤的文章。 顯示所有文章

2011年9月7日

Octave--poisson distribution

在觀察poisson distribution的時候,無意間發現了一個bug,然而這個bug不是我第一個發現的,在octave 3.1.x就已經有人發現,感覺好像到了3.2.4還沒解決,還是我有誤解
octave的code如下

x=[0:15]';y1=[];y2=[];lamda=[1,2,5,10];
for i=1:length(lamda)
y1=[y1,poisspdf(x,lamda(i))];y2=[y2,poisscdf(x,lamda(i))];
end 
stem(x,y1),line(x,y1),figure;plot(x,y2)


最後一行,line(x,y1)會出錯,如果單單執行plot(x,y2)結果如下


輸出的錯誤主要由line function所引發的
error: invalid value for array property "ydata"
error: called from:
error:   /usr/share/octave/3.2.4/m/plot/__line__.m at line 65, column 5
error:   /usr/share/octave/3.2.4/m/plot/line.m at line 38, column 5
error: number of rows must match (2 != 16) near line 519, column 33
error: called from:
error:   /usr/share/octave/3.2.4/m/plot/__go_draw_axes__.m at line 519, column 24
error:   /usr/share/octave/3.2.4/m/plot/__go_draw_figure__.m at line 92, column 3
error:   /usr/share/octave/3.2.4/m/plot/gnuplot_drawnow.m at line 99, column 5
在底下這個連結有提到
http://octave.1599824.n4.nabble.com/error-plotting-quot-single-quot-values-td1672697.html
解決的patch file如下面連結
http://hg.savannah.gnu.org/hgweb/octave/rev/86ae7e50dc5d
似乎要作重新編譯的動作,我很懶惰,所以就把他放這了

2010年7月30日

maxima

符號(symbol)運算是一個很重要的賣點,不同於octave的是,octave比較重視數值運算,以就是知道公式的時候作運算,但是maxima則比較像是推導公式,比方說把(a+b)^2展開為a^2+2ab+b^2,在octave則是帶入a,b然後給出結果
雖然兩者有些重複的功能,也都可以達到對方一些功能,比方說octave也有symbol運算的功能,可是完整度跟運算速度會略慢於maxima

2010年7月12日

Octave--sort function

matlab排序的方程式,格式如下
[SA,indexes]=sort(A,'descend')
A表示排列前一維陣列,SA表示排列後的結果,可以指令要升幕或者降幕排列,還有回傳一個有用的indexes交換過後的陣列,表示A的某個index元素被調換到SA的相對應的index,直接看圖說故事

2010年7月8日

Octave--建立圖形(grahp)

假設圖形(graph)是由二維座標構成,儲存在points變數中,為一個N*2的矩陣,以半徑為r的距離做連線
for j=1:N
    for k=1:N
        if norm(points(j,:)-points(k,:))<=r
            plot([points(j,1) points(k,1)],[points(j,2) points(k,2)]);
        end
    end
end

這樣只有線條,如果要在補上資料點可以再補上plot(points(:,1),points(:,2),'*')

2010年7月6日

Octave--直接執行script file

一般而言Octave的附檔案名稱為oct,但是沒有強制性,要直接執行script file必須要有執行權限
chmod  +x xxx.oct
然後要在檔案內容最前頭加上類似shell script的octave執行路徑,如#!/usr/bin/octavee
如果有圖形輸出,要另外加上print -dpng output.png (-d是device的意思, png是 圖檔格式)

在執行的時候,使用以下參數
octave –persist test.oct
就可以保留住圖形的輸出

Octave--disp function

disp是一個最簡單的輸出函數,不過有很大的限制是,他只能夠處理一個變數,所以在使用上比較需要一些轉換,如果要輸出比較複雜的格式,一般使用fprintf,如果有使用過C就不陌生了,格式如下
disp(X)
看不出所以然來,舉個例子來說,如果說要輸出單一字串很簡單
disp('hello world!!')
這樣就輸出hello world字串,但如如果要輸出身高多少,就必須要把它變成一個array,如下面
disp(['height:' num2str(height)])
因為要是字串陣列,所以必須把數值的變數height變成字串,需要借用到num2str

Octave--zeros function

建立一個全為0的矩陣,至少維度2以上,格式如下
B=zeros(n)
B=zeros(m,n)
B=zeros([m n])
B=zeros(m,n,p,...)
B=zeros(m,n,...,classname)
如果使用單一參數,那就是建立一個nxn的矩陣,其他就是跟參數多寡建立,也就是可以建立多維度矩陣
中間可以使用[m n]的方式則可以配合類似size函數使用,比方說為A建立一個一樣大的矩陣作B為暫存空間
B=zeros(size(A))
最後一個表示指定特定型態,如double或者int

Octave--norm function

norm是泛指一般長度的單位,常用的Euclidean distance,也就是2-norm,所以norm的格式為
norm(A,p)
其中p就表示為多少norm,定義如下,如果不給定p預設為2-norm
Returns sum(abs(A).^p)^(1/p), for any 1 <= p <= ∞.
一般infinite norm使用norm(A,'inf')定義如下
Returns max(abs(A)).

2010年7月5日

Octave--bsxfun function

這個函數還不大能掌握,格式為
C=bsxfun(fun,A,B)
將B透過fun作用在A上,然後回傳結果,比方說我們打算把A中每一列減去平均值,B代表平均值,然後將結果回傳到C矩陣內
以上次mean的例子來說,bsxfun就可以寫成如下
其中第一個參數常用的有下列這些

Octave--mean function

octave中的mean指令,格式為mean(A, dim)

第一個參數為矩陣,若是單一向量則回傳單一平均值
若是矩陣,則參考第二參數dim,dim為1則回傳行向量平均值,若dim為2則回傳列向量平均值
一般預設為1

2010年5月15日

Octave part II

話說~很久之前寫過有關octave的文章之後,就再也沒有去深入研究他了:P
最近又心血來潮,打算來看一下,想說看一下如何繪製簡單的圖形好了,一看之下,中文文件少得可憐阿(或許是我找錯方法),只有看到說~他的功能是利用gnuplot達成,可是總不會叫我把運算後的資料寫出來再回到console底下用gnuplot畫圖吧~囧

真的太阿呆了,人家說相容於matlab,那就直接拿matlab的另來用就好
x=linspace(0,2*pi);
y=cos(x);
plot(x,y);
以上就可以畫出一個cos function的波形

這裡還有一些相關資訊的資料
http://www.obihiro.ac.jp/~suzukim/masuda/octave/html3/octave_90.html

2007年11月6日

在Linux類似Matlab的Octave

Octave我對他也不熟悉,只有看過幾次,不過ㄋㄟ,為何要提到這個,我覺得這個是一些考研究所學生的"必備"軟體
怎麼說呢?因為很多工程科系的需要考線性代數這樣的一個科目,線性代數裡面有些題目充滿了matrix operations
如果只是在做考古題(常常沒有答案,或者懷疑作者算錯),在長長的matrix operations做完還可以保證正確的事情,沒多少人可以
我本人就這樣一個算三次,三次不一樣答案的天兵=.=!,有了Octave可以幫我們作matrix operation,這樣一來就剩下輸入跟作法的正確性了

底下先介紹一個好站http://scicomp.math.ntu.edu.tw/~scc/linear_algebra/content.htm
這位老師文筆不錯,呵呵~寫的還蠻好玩,蠻簡單的

在console輸入octave後就可以開始操作,要定義matrix,就是直接打入變數名稱等於多少,如
M=[1,2,3]
這個就是一個1x3的矩陣,接著如果要定義一個2x3,就用分號分開每一個row,如
M=[1,2,3;2,3,4]
接著一些基本的矩陣操作如轉置(Transport)M寫作M',如果要求invers就寫M^-1,底下是我們最熟悉的最小平方解的公式,在octave就寫成
x=(M'*M)^-1*M'*b
輕輕鬆鬆就得到解答,我還在試驗如何使用中,歡迎討論~呵呵
P.S.晚上了,腦袋昏昏,先寫到這裡