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

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

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

Feb 19, 2025 pm 01:22 PM

Creating a Web App with MATLAB and the MEAN Stack

核心要點

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

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

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

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

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

關於Web應用程序

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

JSONlab簡介

JSONlab是MATLAB語言中JSON編碼器/解碼器的免費開源實現(xiàn)。它可用於將MATLAB數(shù)據(jù)結構(數(shù)組、結構體、單元格、結構體數(shù)組和單元格數(shù)組)轉換為JSON格式的字符串,或將JSON文件解碼為MATLAB數(shù)據(jù)。

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

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

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

JSONlab安裝

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

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

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

MATLAB代碼

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

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

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

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

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

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

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

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

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

Web應用程序

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

讓我們開始編寫Web應用程序。

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

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

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

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

服務器端代碼

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

另外需要注意的是,請確保MongoDB服務器正在運行,否則應用程序將崩潰。

客戶端代碼

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

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

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

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

運行應用程序

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

顯示當前時間的靜態(tài)頁面將在127.0.0.1:3000提供服務。

結論

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

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

(FAQs部分,由於篇幅過長,建議單獨處理。可以根據(jù)需要提取關鍵問題和答案進行簡短概括或重新組織。)

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

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的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是不同的編程語言,各自適用於不同的應用場景。 Java用於大型企業(yè)和移動應用開發(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中與日期和時間合作? 如何在JS中與日期和時間合作? Jul 01, 2025 am 01:27 AM

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

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

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

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

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

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

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

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

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

Java和JavaScript有什麼區(qū)別? Java和JavaScript有什麼區(qū)別? Jun 17, 2025 am 09:17 AM

Java和JavaScript是不同的編程語言。 1.Java是靜態(tài)類型、編譯型語言,適用於企業(yè)應用和大型系統(tǒng)。 2.JavaScript是動態(tài)類型、解釋型語言,主要用於網(wǎng)頁交互和前端開發(fā)。

See all articles