在c中提取matlab傳出的多個引數,怎麼弄啊,我老是搞不

時間 2022-04-09 12:22:22

1樓:

這兩天我也遇到了該問題,剛剛解決掉,跟你分享下吧。

//輸入這裡想傳入的2個輸入引數,為了支援矩陣好通用,所以得弄成array

double a = ;//輸入引數1

double b = ;//輸入引數2

double[,] c = new double[3, 2];//輸出引數1

double[,] d = new double[3, 2];//輸出引數2

//這些引數都是矩陣

mwnumericarray ma = new mwnumericarray(3, 2, a);//轉換成matlab需求的格式

mwnumericarray mb = new mwnumericarray(3, 2, b);

//輸出引數是乙個mwarray陣列

mwarray agrsout = new mwarray[2];//兩個輸出引數,一定要寫數量

//輸出幾個輸出引數可以是不同型別的,比如第乙個元素是矩陣,第二個是數值

//同理,輸入引數也是乙個mwarray陣列

mwarray agrsin = new mwarray ;

//呼叫函式,輸出引數需要加 ref 關鍵字

myfun.matrixopera(2, ref agrsout, agrsin);

//2表示輸入引數的個數,輸出結構都在argsout中,類似於c的指標引數輸入

//轉換得到實際的輸出引數

mwnumericarray x1 = agrsout[0] as mwnumericarray;

mwnumericarray x2 = agrsout[1] as mwnumericarray;

c = (double[,])x1.toarray();

d = (double[,])x2.toarray();

//一定要注意最後c和d的轉化,不同型別的轉換差異很大厄

//toarray()對應n*m的陣列

//toscalardouble()對應單個數值

//tovetor()對應1維陣列

2樓:匿名使用者

mwarray result = mymatlabclass.funcname(2, p1,p2);

mwnumericarray m0 = (mwnumericarray)result[0];

mwnumericarray m1 = (mwnumericarray)result[1];

3樓:靈若伊雪

函式的返回值只能有乙個。.你如果要得到多個返回值的話可以返回乙個陣列或集合!

matlab檔案操作

檔案操作是一種重要的輸入輸出方式,即從資料檔案讀取資料或將結果寫入資料檔案。matlab提供了一系列低層輸入輸出函式,專門用於檔案操作。

1、檔案的開啟與關閉

1)開啟檔案

在讀寫檔案之前,必須先用fopen函式開啟或建立檔案,並指定對該檔案進行的操作方式。fopen函式的呼叫格式為:

fid=fopen(檔名,『開啟方式』)

說明:其中fid用於儲存檔案控制代碼值,如果返回的控制代碼值大於0,則說明檔案開啟成功。檔名用字串形式,表示待開啟的資料檔案。常見的開啟方式如下:

 『r』:唯讀方式開啟檔案(預設的方式),該檔案必須已存在。

 『r+』:讀寫方式開啟檔案,開啟後先讀後寫。該檔案必須已存在。

 『w』:開啟後寫入資料。該檔案已存在則更新;不存在則建立。

 『w+』:讀寫方式開啟檔案。先讀後寫。該檔案已存在則更新;不存在則建立。

 『a』:在開啟的檔案末端新增資料。檔案不存在則建立。

 『a+』:開啟檔案後,先讀入資料再新增資料。檔案不存在則建立。

另外,在這些字串後新增乙個「t」,如『rt』或『wt+』,則將該檔案以文字方式開啟;如果新增的是「b」,則以二進位制格式開啟,這也是fopen函式預設的開啟方式。

2)關閉檔案

檔案在進行完讀、寫等操作後,應及時關閉,以免資料丟失。關閉檔案用fclose函式,呼叫格式為:

sta=fclose(fid)

說明:該函式關閉fid所表示的檔案。sta表示關閉檔案操作的返回**,若關閉成功,返回0,否則返回-1。如果要關閉所有已開啟的檔案用fclose(『all』)。

2、二進位制檔案的讀寫操作

1)寫二進位制檔案

fwrite函式按照指定的資料精度將矩陣中的元素寫入到檔案中。其呼叫格式為:

count=fwrite(fid,a,precision)

說明:其中count返回所寫的資料元素個數(可預設),fid為檔案控制代碼,a用來存放寫入檔案的資料,precision代表資料精度,常用的資料精度有:char、uchar、int、long、float、double等。

預設資料精度為uchar,即無符號字元格式。

例6.8 將乙個二進位制矩陣存入磁碟檔案中。

>> a=[1 2 3 4 5 6 7 8 9];

>> fid=fopen('d:\test.bin','wb') %以二進位制資料寫入方式開啟檔案

fid =

3 %其值大於0,表示開啟成功

>> fwrite(fid,a,'double')

ans =

9 %表示寫入了9個資料

>> fclose(fid)

ans =

0 %表示關閉成功

2)讀二進位制檔案

fread函式可以讀取二進位制檔案的資料,並將資料存入矩陣。其呼叫格式為:

[a,count]=fread(fid,size,precision)

說明:其中a是用於存放讀取資料的矩陣、count是返回所讀取的資料元素個數、fid為檔案控制代碼、size為可選項,若不選用則讀取整個檔案內容;若選用則它的值可以是下列值:n(讀取n個元素到乙個列向量)、inf(讀取整個檔案)、[m,n](讀資料到m×n的矩陣中,資料按列存放)。

precision用於控制所寫資料的精度,其形式與fwrite函式相同。

3、文字檔案的讀寫操作

1)讀文字檔案

fscanf函式可以讀取文字檔案的內容,並按指定格式存入矩陣。其呼叫格式為:

[a,count]=fscanf(fid,format,size)

說明:其中a用來存放讀取的資料,count返回所讀取的資料元素個數,fid為檔案控制代碼,format用來控制讀取的資料格式,由%加上格式符組成,常見的格式符有:d(整型)、f(浮點型)、s(字串型)、c(字元型)等,在%與格式符之間還可以插入附加格式說明符,如資料寬度說明等。

size為可選項,決定矩陣a中資料的排列形式,它可以取下列值:n(讀取n個元素到乙個列向量)、inf(讀取整個檔案)、[m,n](讀資料到m×n的矩陣中,資料按列存放)。

2)寫文字檔案

fprintf函式可以將資料按指定格式寫入到文字檔案中。其呼叫格式為:

fprintf(fid,format,a)

說明:fid為檔案控制代碼,指定要寫入資料的檔案,format是用來控制所寫資料格式的格式符,與fscanf函式相同,a是用來存放資料的矩陣。

例6.9 建立乙個字元矩陣並存入磁碟,再讀出賦值給另乙個矩陣。

>> a='string';

>> fid=fopen('d:\char1.txt','w');

>> fprintf(fid,'%s',a);

>> fclose(fid);

>> fid1=fopen('d:\char1.txt','rt');

>> fid1=fopen('d:\char1.txt','rt');

>> b=fscanf(fid1,'%s')

b =string

matlab讀txt檔案

fid=fopen('fx.txt','r');

%得到檔案號

[f,count]=fscanf(fid,'%f %f',[12,90]);

%把檔案號1的資料讀到f中。其中f是[12 90]的矩陣

%這裡'%f %f'表示讀取資料的形勢,他是按原始資料型讀出

fclose(fid);

%關閉檔案

另外有的txt檔案還可以用load來開啟

其語句為

f=load('fx.txt)

我個人覺得用第一種方式較好。因為有些時候,特別是fx.txt 的一行種有多個資料時用load

就比較麻煩了。

c# 如何接收matlab返回的多個引數 20

4樓:

matlab的m檔案函式返回多個引數,例如,[x1,x2]=matrixoperate(a,b),其中a,b,x1和x2都是

矩陣,在c#中怎麼呼叫獲得兩個返回值矩陣呢。

參考別人的做法:

mwarray mc = myfun.matrixopera(ma, mb);

//可是我這裡返回來的,不是兩個矩陣,而只有乙個矩陣

mwnumericarray x1 = (mwnumericarray)mc[1];

mwnumericarray x2 = (mwnumericarray)mc[2];

請問高手如何解決多引數傳遞的問題。同求解決問題?

5樓:

最近我也在做這方面的混合程式設計

假設在matlab裡面的m檔案 是 function 【a,b,c】=func(x)

要從matlab裡面返回abc ,我在c#裡面是這麼寫的。假設在c#裡面的類是matlab1

先宣告例項物件

matlab1 ma = new matlab1();

然後mwarray result =ma.func(1, x);

double[,] temp1 = (double[,])((mwnumericarray)result[?]).toarray(mwarraycomponent.real);

? 可以算你返回的引數,abc分別對應0 1 2,你可以遍歷迴圈出來!我都實踐過的,還有不清楚的我們討論下!

c#中引用matlab的函式進行計算的問題,c#與matlab之間傳遞引數總是出錯,我用的erf函式,下面附有**,

6樓:法語共享君

using system;

using system.collections.generic;

using system.linq;

using system.text;

using mathworks.matlab.net.arrays;//在mwarray.dll,最常用的

using mathworks.matlab.net.utility;// 在mwarray.dll,最常用的

using erfc;//這個就是我們自己定義的,裡面有matlab函式

namespace erfccc}}

求大神用C語言按照如下格式從檔案中提取資料

檔案操作,緩衝區中檢測 號與 號,之間便是資料 如何使用c語言從txt檔案中讀取如下格式的資料並儲存與陣列中 1.fopen函式開啟需要讀取的文字,獲取該檔案的檔案描述符2.使用fscan 函式對檔案進行讀取。3.放到二維陣列其實就是讀取相應格式的資料,然後對應二維陣列的每個位置 例如 includ...

請問怎麼在ecel單元格文字中提取數字直接運算

問下,數字與文 之間有空格麼,如果沒有,那公式就是 left a1,find a1 1 left a2,find a2 1 left a3,find a3 1 如果有空格的話,直接把 換成 就可以了可以試一下,應該是對的 excel中求和函式為sum,sum把 中的數字自動當數字求和,是excel中...

在excel的單元格中提取字母的函式是什麼

自定義函式 自定義函式myget提取字串中數字?中文?英文本元 函式說明 插入模組,複製上面的vba 貼上 myget a2,0 提取a2單元格中的數字 myget a2,1 提取a2單元格中的漢字 myget a2,2 提取a2單元格中的字母function myget srg as string...

在excel中,從身份證中提取出生年月日 性別 年齡

在excel中根據身份證號碼自動生成性別 出生日期和年齡 身份證號判斷性別的方法 18位的看倒數第二位,奇男偶女 15位的看倒數第一位,奇男偶女。在excel中根據身份證號碼自動生成出生生日期和性別 下文說明以本圖例為例,即 性別在b列,年齡在c列,出生日期在d列,身份證號碼在e列 新建的excel...

已知 如圖,在abc中,c 90,ac bc 4,點m

等腰直角三角形的性質 可以用勾股定理證明 設直角邊為x 如圖,在 abc中,d e分別是ab ac的中點,be 2de,過點c作cf be交de的延長線於f 1 求證 四邊形bc 根據三角形的性質的 1 證明 d e分別是ab ac的中點,de bc,bc 2de cf be,四邊形bcfe是平行四...