close
2013年4月4日 星期四
連續兩天,夜裡都下了輕薄的雪。
下午在地下室小睡。
三月以來,興致勃勃的寫電腦程式,又寫出一批小程式,都是utility性質,比較大的,是把NR的一個Runge-Kutta四階的程式改寫成標準C++語法,然後又寫成可以被Matlab呼叫的Mex 程式。
這當中,麻煩處多在於引數傳遞。
最後一個始終不成的,是直接產生Mat file存檔----一切都順利,但是打開來看,存的檔案裡都是零。
產生Mat file的code是由範例上抄來,卻不成。
晚上再試,把其中一行複製數據的程式由
memcpy((void*)(mxGetPr(xx_mat)),(void*)xx,sizeof(xx));
改成
memcpy((void*)(mxGetPr(xx_mat)),(void*)xx,(NSTEP+1)*sizeof(double));
竟然成了!
Visual C++的問題常常在於,它不接受正確的C++ code,它有自己的一套。
我卻無法知道,它自己的那一套是什麼?
就像,用fwrite存檔,第一個變數的數據一定被破壞,第二個開始就是好的。
不知道原因何在?只好用一個虛擬變數打頭陣,讓它破壞。
還有,用fwrite存的檔,若自己讀回來,一切無誤。但若用另外一個獨立的程式去讀(用fread),檔案內也全都是零。
不知何故?
程式跑通後,Matlab呼叫C++,一指按鍵後,不但演算完畢,還把結果畫成圖。
當那圖在電腦畫面出現時,感覺非常快樂!
三月,就作這些學習。
全站熱搜