国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 web前端 js教程 使用MATLAB和MEAN堆棧創(chuàng)建Web應(yīng)用程序

使用MATLAB和MEAN堆棧創(chuàng)建Web應(yīng)用程序

Feb 19, 2025 pm 01:22 PM

Creating a Web App with MATLAB and the MEAN Stack

核心要點(diǎn)

  • MATLAB,一種用於技術(shù)計(jì)算的高級語言,可以與MEAN堆棧集成以創(chuàng)建功能強(qiáng)大的Web應(yīng)用程序。
  • MEAN堆棧由MongoDB、Express.js、AngularJS和Node.js組成,與MATLAB結(jié)合使用時(shí),允許在Web上進(jìn)行實(shí)時(shí)數(shù)據(jù)可視化。
  • 集成過程涉及使用MATLAB的計(jì)算能力來處理數(shù)據(jù)並生成結(jié)果,然後在使用MEAN堆棧構(gòu)建的Web應(yīng)用程序上顯示這些結(jié)果。
  • JSONlab,一個(gè)免費(fèi)的開源JSON編碼器/解碼器在MATLAB語言中的實(shí)現(xiàn),用於將MATLAB數(shù)據(jù)轉(zhuǎn)換為JSON格式,以便在Web應(yīng)用程序中使用。
  • 創(chuàng)建MATLAB Web應(yīng)用程序包括使用MATLAB Compiler創(chuàng)建獨(dú)立應(yīng)用程序,在MATLAB Web App Server中創(chuàng)建Web應(yīng)用程序項(xiàng)目,將獨(dú)立應(yīng)用程序上傳到Web應(yīng)用程序項(xiàng)目,以及將Web應(yīng)用程序部署給用戶。

MATLAB是一種用於技術(shù)計(jì)算的高級語言,它在一個(gè)易於使用的環(huán)境中集成了計(jì)算、可視化和編程,在這個(gè)環(huán)境中,問題和解決方案可以用熟悉的數(shù)學(xué)符號(hào)來表達(dá)。全球有許多項(xiàng)目是用MATLAB編寫的,由數(shù)百萬科學(xué)家和工程師開發(fā)。人們從MATLAB獲得的各種實(shí)驗(yàn)和操作數(shù)據(jù)可用於支持Web應(yīng)用程序,但存在一些障礙:

  • MATLAB理解矩陣格式數(shù)據(jù),而Web應(yīng)用程序更喜歡JSON或XML格式的數(shù)據(jù)。
  • 數(shù)據(jù)通常在MATLAB程序內(nèi)部創(chuàng)建和使用,這限制了開發(fā)人員在保存數(shù)據(jù)、使用數(shù)據(jù)等方面的自由度。

如果MATLAB以JSON格式提供數(shù)據(jù),而Web應(yīng)用程序可以使用來自MATLAB的這些JSON數(shù)據(jù)來創(chuàng)建一些很棒的東西,那麼創(chuàng)建應(yīng)用程序就會(huì)容易得多。

在本文中,我們將開發(fā)一個(gè)小型演示程序,以演示如何使MATLAB和MEAN堆棧協(xié)同工作。

關(guān)於Web應(yīng)用程序

該Web應(yīng)用程序?qū)⑸婕皬腗ATLAB到瀏覽器的實(shí)時(shí)數(shù)據(jù)傳輸。為簡便起見,我們將從MATLAB傳輸當(dāng)前時(shí)間並在瀏覽器上顯示它。我們將使用JSONlab,這是一個(gè)在MATLAB中編碼/解碼JSON文件的工具箱。 Web應(yīng)用程序?qū)⑹褂肕EAN堆棧創(chuàng)建。如果您不熟悉MEAN堆棧,建議您在繼續(xù)之前閱讀《MEAN堆棧入門》一文。

JSONlab簡介

JSONlab是MATLAB語言中JSON編碼器/解碼器的免費(fèi)開源實(shí)現(xiàn)。它可用於將MATLAB數(shù)據(jù)結(jié)構(gòu)(數(shù)組、結(jié)構(gòu)體、單元格、結(jié)構(gòu)體數(shù)組和單元格數(shù)組)轉(zhuǎn)換為JSON格式的字符串,或?qū)SON文件解碼為MATLAB數(shù)據(jù)。

它使我們可以訪問四個(gè)函數(shù):loadjson()savejson()、loadubjson()saveubjson()。最後兩個(gè)函數(shù)用於處理UBJSON格式。 loadjson()用於將JSON字符串轉(zhuǎn)換為相關(guān)的MATLAB對象。在我們的項(xiàng)目中,我們只使用savejson()函數(shù),該函數(shù)將MATLAB對象(單元格、結(jié)構(gòu)體或數(shù)組)轉(zhuǎn)換為JSON字符串。它可以按以下方式使用:

json = savejson(rootname, obj, filename)
json = savejson(rootname, obj, opt)
json = savejson(rootname, obj, 'param1', value1, 'param2', value2, ...)

由於我們必須編寫文件,因此我們將使用第一個(gè)簽名。它返回JSON字符串以及將字符串寫入文件。

JSONlab安裝

要開始使用,請下載JSONlab,解壓縮存檔,並使用以下命令將文件夾的路徑添加到MATLAB的路徑列表中:

addpath('/path/to/jsonlab');

如果您想永久添加此路徑,則需要鍵入pathtool,瀏覽到JSONlab根文件夾並將其添加到列表中。完成後,您必須單擊“保存”。然後,在MATLAB中運(yùn)行rehash,並鍵入which loadjson。如果您看到輸出,則表示JSONlab已正確安裝。

MATLAB代碼

我們需要當(dāng)前時(shí)間,因此我們將使用clock命令。它返回一個(gè)六元素日期向量,其中包含當(dāng)前日期和時(shí)間,格式為[年 月 日 時(shí) 分 秒]。為了反復(fù)獲取時(shí)間,我們將clock命令放在無限while循環(huán)中。因此,我們將一直獲取實(shí)時(shí)數(shù)據(jù),直到使用MATLAB命令窗口上的Ctrl C終止腳本執(zhí)行。

以下代碼實(shí)現(xiàn)了這個(gè)想法:

format shortg;
y=0;
while y == 0
    % c = [year month day hour minute seconds]
    c=clock;
    % 將每個(gè)值四舍五入為整數(shù)
    c=fix(c);
    x.clock=c;
    % 訪問c的第4列,即小時(shí)
    x.hours=c(:,4);
    % 訪問c的第5列,即分鐘
    x.minutes=c(:,5);
    % 訪問c的第6列,即秒
    x.seconds=c(:,6);
    % 將x轉(zhuǎn)換為JSON并寫入matlabData.json
    savejson('',x,'data/matlabData.json');
end

在我們的項(xiàng)目中,我們關(guān)注小時(shí)、分鐘和秒。上述代碼中使用的fix(c)函數(shù)將矩陣的所有元素四捨五入到最接近的整數(shù)。要獲取小時(shí)數(shù)據(jù),我們需要矩陣第4列的值,因此我們使用命令c(:,4)。使用相同的方法,我們檢索分鐘和秒。

我們將分別向Web應(yīng)用程序發(fā)送時(shí)鐘及其一些單獨(dú)的變量,以顯示從MATLAB對像到JSON的不同數(shù)據(jù)類型的轉(zhuǎn)換。雖然時(shí)鐘數(shù)據(jù)將轉(zhuǎn)換為數(shù)組,但小時(shí)、分鐘和秒的值將轉(zhuǎn)換為數(shù)字,我們稍後將看到這一點(diǎn)。

在我們的項(xiàng)目中,我們將使用savejson()函數(shù)使用JSON格式轉(zhuǎn)換和寫入變量x,並將其寫入文件matlabData.json。為簡便起見,rootname參數(shù)將是一個(gè)空字符串。

使用之前的代碼,我們就完成了所有需要的MATLAB代碼?,F(xiàn)在,一旦我們運(yùn)行腳本,我們就可以觀察到JSON文件是在data文件夾內(nèi)創(chuàng)建的,並且文件中的數(shù)據(jù)會(huì)自動(dòng)不斷更新自身。 JSON文件內(nèi)容示例如下:

{
   "hours": 19,
   "minutes": 28,
   "seconds": 28,
   "clock": [2015,5,27,19,28,28]
}

我們將監(jiān)視此文件並使用Node.js讀取最新數(shù)據(jù)?,F(xiàn)在讓我們開始構(gòu)建Web應(yīng)用程序。

Web應(yīng)用程序

現(xiàn)在我們的MATLAB數(shù)據(jù)已轉(zhuǎn)換為JSON並存儲(chǔ)在文件中,我們可以獨(dú)立讀取此文件並通過監(jiān)視其更改來獲取數(shù)據(jù)。此操作與MATLAB完全無關(guān)。在本文的其餘部分,我將假設(shè)您了解socket.io以及MEAN堆棧,即使我們只使用它們的某些基本概念。

讓我們開始編寫Web應(yīng)用程序。

創(chuàng)建package.json文件

為了開始我們的應(yīng)用程序,讓我們定義項(xiàng)目的依賴項(xiàng)。為此,我們將創(chuàng)建一個(gè)package.json文件,如下所示:

json = savejson(rootname, obj, filename)
json = savejson(rootname, obj, opt)
json = savejson(rootname, obj, 'param1', value1, 'param2', value2, ...)

創(chuàng)建文件後,在項(xiàng)目的根文件夾中運(yùn)行npm install,以便安裝所有依賴項(xiàng)。如果您不熟悉npm,建議您閱讀《npm入門指南——Node包管理器》。

服務(wù)器端代碼

代碼的這一部分涉及使用Node.js、Express和MongoDB。服務(wù)器執(zhí)行的操作包括:

  • 提供index.html文件
  • 監(jiān)視和讀取JSON文件中的數(shù)據(jù)
  • 使用MongoDB將數(shù)據(jù)保存到數(shù)據(jù)庫
  • 使用socket.io將數(shù)據(jù)發(fā)送到瀏覽器

我們將在根文件夾中創(chuàng)建一個(gè)名為server.js的文件,我們將在其中編寫所有描述的功能所需的代碼。

我們使用Express提供靜態(tài)文件:

addpath('/path/to/jsonlab');

每當(dāng)向/發(fā)送請求時(shí),將提供存儲(chǔ)在app目錄中的index.html文件。

為了監(jiān)視文件的任何更改,我們使用fs.watch(),並且為了在每次更改時(shí)讀取文件,我們使用fs.readFile()。一旦檢測到更改,就會(huì)讀取文件並檢索數(shù)據(jù)。整個(gè)過程使用以下代碼完成:

format shortg;
y=0;
while y == 0
    % c = [year month day hour minute seconds]
    c=clock;
    % 將每個(gè)值四舍五入為整數(shù)
    c=fix(c);
    x.clock=c;
    % 訪問c的第4列,即小時(shí)
    x.hours=c(:,4);
    % 訪問c的第5列,即分鐘
    x.minutes=c(:,5);
    % 訪問c的第6列,即秒
    x.seconds=c(:,6);
    % 將x轉(zhuǎn)換為JSON并寫入matlabData.json
    savejson('',x,'data/matlabData.json');
end

當(dāng)與客戶端建立連接並開始獲取數(shù)據(jù)時(shí),我們將執(zhí)行兩個(gè)操作:

  1. 使用socket.io的emit()函數(shù)將數(shù)據(jù)發(fā)送到瀏覽器
  2. 使用mongoose中間件將數(shù)據(jù)保存到MongoDB

為了執(zhí)行第二個(gè)操作,我們創(chuàng)建數(shù)據(jù)的模式,然後基於該模式創(chuàng)建模型。這是使用下面顯示的代碼完成的:

{
   "hours": 19,
   "minutes": 28,
   "seconds": 28,
   "clock": [2015,5,27,19,28,28]
}

在前面代碼段的最後一條語句中,我們基於定義的模式創(chuàng)建模型。傳遞給函數(shù)的第一個(gè)參數(shù)是我們模型所屬集合的單數(shù)名稱。 Mongoose會(huì)自動(dòng)為集合分配複數(shù)名稱。因此,這裡appDataappDatas集合的模型。

當(dāng)我們獲得新數(shù)據(jù)時(shí),我們將使用最新數(shù)據(jù)創(chuàng)建該模式的新實(shí)例,並使用save()方法將其保存到數(shù)據(jù)庫中。此實(shí)例稱為文檔。在下面的代碼中,savingData是一個(gè)文檔。

這部分的最終代碼如下所示:

json = savejson(rootname, obj, filename)
json = savejson(rootname, obj, opt)
json = savejson(rootname, obj, 'param1', value1, 'param2', value2, ...)

我們使用trycatch來防止應(yīng)用程序崩潰。如果我們不使用它,並且JSON.parse由於更改速度快而導(dǎo)致數(shù)據(jù)有時(shí)未完全讀取而引發(fā)意外用戶輸入錯(cuò)誤,則應(yīng)用程序可能會(huì)崩潰。這是我們想要避免的!

另外需要注意的是,請確保MongoDB服務(wù)器正在運(yùn)行,否則應(yīng)用程序?qū)⒈罎ⅰ?

客戶端代碼

在本節(jié)中,我們將創(chuàng)建一個(gè)簡單的靜態(tài)HTML頁面。當(dāng)通過socket.io接收新數(shù)據(jù)時(shí),我們將更新頁面上顯示的數(shù)據(jù)。這些數(shù)據(jù)也可用於創(chuàng)建實(shí)時(shí)圖表。

以下是index.html文件的簡單代碼:

addpath('/path/to/jsonlab');

ngCloak指令用於防止在應(yīng)用程序加載時(shí)瀏覽器短暫顯示AngularJS的模板的原始(未編譯)形式。

運(yùn)行應(yīng)用程序

在啟動(dòng)Node.js服務(wù)器之前,我們需要確保MATLAB代碼和MongoDB服務(wù)器正在運(yùn)行。要運(yùn)行MongoDB服務(wù)器,您需要在終端上執(zhí)行命令mongod。要運(yùn)行Node.js服務(wù)器,您必須在項(xiàng)目文件夾的根目錄中執(zhí)行命令node server.js。

顯示當(dāng)前時(shí)間的靜態(tài)頁面將在127.0.0.1:3000提供服務(wù)。

結(jié)論

在本文中,我們使用MEAN堆棧創(chuàng)建了一個(gè)Web應(yīng)用程序,該應(yīng)用程序從MATLAB程序中獲取JSON格式的數(shù)據(jù)。數(shù)據(jù)在JSONlab的幫助下進(jìn)行轉(zhuǎn)換。然後,數(shù)據(jù)使用socket.io發(fā)送到瀏覽器,因此瀏覽器上的更改會(huì)實(shí)時(shí)反映出來。此演示的完整源代碼可在GitHub上找到。

我希望您喜歡這篇文章,期待閱讀您的評論。

(FAQs部分,由於篇幅過長,建議單獨(dú)處理??梢愿鶕?jù)需要提取關(guān)鍵問題和答案進(jìn)行簡短概括或重新組織。)

以上是使用MATLAB和MEAN堆棧創(chuàng)建Web應(yīng)用程序的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java vs. JavaScript:清除混亂 Java vs. JavaScript:清除混亂 Jun 20, 2025 am 12:27 AM

Java和JavaScript是不同的編程語言,各自適用於不同的應(yīng)用場景。 Java用於大型企業(yè)和移動(dòng)應(yīng)用開發(fā),而JavaScript主要用於網(wǎng)頁開發(fā)。

JavaScript評論:簡短說明 JavaScript評論:簡短說明 Jun 19, 2025 am 12:40 AM

JavascriptconcommentsenceenceEncorenceEnterential gransimenting,reading and guidingCodeeXecution.1)單inecommentsareusedforquickexplanations.2)多l(xiāng)inecommentsexplaincomplexlogicorprovideDocumentation.3)

如何在JS中與日期和時(shí)間合作? 如何在JS中與日期和時(shí)間合作? Jul 01, 2025 am 01:27 AM

JavaScript中的日期和時(shí)間處理需注意以下幾點(diǎn):1.創(chuàng)建Date對像有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設(shè)置時(shí)間信息可用get和set方法,注意月份從0開始;3.手動(dòng)格式化日期需拼接字符串,也可使用第三方庫;4.處理時(shí)區(qū)問題建議使用支持時(shí)區(qū)的庫,如Luxon。掌握這些要點(diǎn)能有效避免常見錯(cuò)誤。

為什麼要將標(biāo)籤放在的底部? 為什麼要將標(biāo)籤放在的底部? Jul 02, 2025 am 01:22 AM

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

JavaScript與Java:開發(fā)人員的全面比較 JavaScript與Java:開發(fā)人員的全面比較 Jun 20, 2025 am 12:21 AM

JavaScriptIspreferredforredforwebdevelverment,而Javaisbetterforlarge-ScalebackendsystystemsandSandAndRoidApps.1)JavascriptexcelcelsincreatingInteractiveWebexperienceswebexperienceswithitswithitsdynamicnnamicnnamicnnamicnnamicnemicnemicnemicnemicnemicnemicnemicnemicnddommanipulation.2)

什麼是在DOM中冒泡和捕獲的事件? 什麼是在DOM中冒泡和捕獲的事件? Jul 02, 2025 am 01:19 AM

事件捕獲和冒泡是DOM中事件傳播的兩個(gè)階段,捕獲是從頂層向下到目標(biāo)元素,冒泡是從目標(biāo)元素向上傳播到頂層。 1.事件捕獲通過addEventListener的useCapture參數(shù)設(shè)為true實(shí)現(xiàn);2.事件冒泡是默認(rèn)行為,useCapture設(shè)為false或省略;3.可使用event.stopPropagation()阻止事件傳播;4.冒泡支持事件委託,提高動(dòng)態(tài)內(nèi)容處理效率;5.捕獲可用於提前攔截事件,如日誌記錄或錯(cuò)誤處理。了解這兩個(gè)階段有助於精確控制JavaScript響應(yīng)用戶操作的時(shí)機(jī)和方式。

JavaScript:探索用於高效編碼的數(shù)據(jù)類型 JavaScript:探索用於高效編碼的數(shù)據(jù)類型 Jun 20, 2025 am 12:46 AM

javascripthassevenfundaMentalDatatypes:數(shù)字,弦,布爾值,未定義,null,object和symbol.1)numberSeadUble-eaduble-ecisionFormat,forwidevaluerangesbutbecautious.2)

See all articles