精华内容
下载资源
问答
  • 我有一个网页调用matlab的毕业设计问题 ,请问有大神知道这个的吗
  • 目的:在一个PHP网页调用matlab代码实现一些功能,比如处理数据,或者画图~ 平台: linux+apache+php的服务器 实现: 正常情况下,我们在Linux客户端运行matlab代码时候 一般都是在terminal执行  $ matlab -...

    目的:在一个PHP网页中调用matlab代码实现一些功能,比如处理数据,或者画图~

    平台: linux+apache+php的服务器

    实现: 正常情况下,我们在Linux客户端运行matlab代码时候 一般都是在terminal执行 

    $ matlab -nodesktop -nosplash -nodisplay -r "draw" (draw.m 这里假设是用来产生一个eps的图)

    draw.m:

    file=importdata('file.txt');
    plot(file(:,1),file(:,2));
    print('-deps2','-r300','figure.eps');
    quit


    我们在linux的环境下的中的某个用户demo_user,只要对MATLAB有执行权限(755)的话,是肯定能够执行的,并产生相应的figure.eps文件;

    但是,如果你从网页端来访问并执行这样的代码的话可能会遇到的问题:

    <?php
    $command="matlab -nodesktop -nosplash -nodisplay -r \"draw\"";
    system($command);
    ?>

    第一: 执行上述代码的话,你会发现这句命令根本没有执行, $out= system($command, $val),$ val是反应有没有执行成功的,0是成功,1是失败;

    那么怎么办呢? 

    首先就是要检查 php的配置是否支持调用外部命令,没开启的话,开启一下,这个网上有很多教程教如何开启php支持调用外部命令功能;

    然后就是要来看为什么执行不了matlab程序, 将$command改为

    $command="matlab -nodesktop -nosplash -nodisplay -logfile log.txt -r \"draw\" 1>out.txt 2>error.log"; 

    来看到底出了什么错误导致php调用matlab失败的?

    打开log.txt, 如果,matlab被启动的话,会有一些警告,说明matlab已经启动过了,但是为什么就执行不了你的代码呢 ?

    后来我把2>errorl.log输出来,也就是把Matlab运行的error输出来看发现: fatal error on startup. MATLAB_PREFDIR must be an absolute path. Cannot set preferences directory to the relative path。 路径错了,应该是被调用的外部命令system的配置问题引起的; 后来我就在运行Matlab 命令前,加入 export MATLAB_PREFDIR=<your preference path>, 切记 一定要输入全路径。

    <?php
    $command="export MATLAB_PREFDIR= <your preference path>; matlab -nodesktop -nosplash -nodisplay -r \"draw\"";
    system($command);
    ?>
    加了路径之后就能够正常运行了。It works!

    2016年11月24日


    展开全文
  • 在C#的Web项目中调用Matlab代码的方法为了毕设的图形检索方向的研究,本人需要在信科的师兄师姐们已经完成的C#界面中,调用现在研究的算法的Matlab代码,以便看到实验的效果。前段时间已经拖延了1个多月,一方面因为...

    在C#的Web项目中调用Matlab代码的方法

    为了毕设的图形检索方向的研究,本人需要在信科的师兄师姐们已经完成的C#界面中,调用现在研究的算法的Matlab代码,以便看到实验的效果。前段时间已经拖延了1个多月,一方面因为实习越来越多事情,时间减少了很多;但更重要在于C#调用Matlab的方法真心麻烦,C#的Web项目中进行这个操作貌似会碰到更多细节上的问题。而且总是很不稳定,操作系统、Matlab或VS的版本、遗漏一些文件或步骤都会造成失败!这个问题本人已经搞了很长时间,直至前几天,在同学的帮助下,自己再弄一遍,总算成功了!下面我及时把这个过程记录下来,以免自己下次又忘记而重复劳动,如果能给有需要的人以参考,就更好了!

    1、安装Matlab,我的版本是2010b,安装的教程网上有,我这里可以给个链接:http://wenku.baidu.com/link?url=52lt-eO7dnNf5XEvjbNWybs3qJV4npd0MBhEdJi75ziqXyI-Oyk-EvwXlGMMQSF-Y9J1vcOqW4jusOgAE8Jjkll7T63JYIR6GZE1USYB_Yi,相信大家按照上面的步骤做能很容易安装好。不过这里千万千万注意:要安装32位的!我之前就是因为装了64位的,导致在网上找了大量其它分享,已经严格按照它们所说的步骤做了,最后都还是遇到VS里头调用Matlab代码出现的初始化异常!

    2、安装好Matlab后,找到其安装根路径下的toolbox\compiler\deploy\win32,有个“MCRInstaller.exe”,安装之。安装过程灰详简单,相信大家完全能搞定。装完之后,大家检查一下系统环境变量里头(右键“计算机”→属性→高级→环境变量→系统变量),“path”是否新增了“root\vx\runtime\win32”这个值(其中,“root”是指MCRInstaller安装根路径,“vx”中的x是个数,有的地方80,有的为714之类,不固定),没有的话加上就可以了。

    115911317.jpg

    3、安装Microsoft Visual Studio,我装的是2010。在这里提明一下,有可能之前我是因为Matlab装了64位的原因而导致一直失败,然后误以为是Matlab和VS版本不对造成,如果情况真是这样未免显得太蛋疼,完全不符合软件工程应有的精神理念。我觉得大Matlab和大VS应该不至于会这样。大家不妨试试其它版本的Matlab与VS看看,如果也能成功的话请及时联系我。VS的安装也是走流程,此处不再赘述。

    4、 打开Matlab,在工作区敲入指令“mbuild -setup”,回车。接着,按照如下图中展示的顺序,敲入指令执行,来进行Matlab与编译器的挂接。当最后那行中敲入“y”,回车后,Matlab将连接你选择的VS,成功后将出现随后的截图中的界面。

    115911318.jpg

    115911319.jpg

    5、上述步骤都是在一开始你的电脑没有Matlab、VS、Matlab与VS木有相连的状态下才需要执行的。执行过这一次后,以后就不需要再走这些步骤了。接下来,自己随便写份Matlab代码,我写的是个简单到爆的函数如下图,写完后保存。

    115911320.jpg

    6、在Matlab主界面,File→New→Development Project,出现如下界面,以把你的Matlab封装成Web工程。在“Name”中输入你自己想要的工程名,“Location”中选择好保存路径,“Target”中选择“.NET Assembly”,然后“OK”。

    115911321.jpg

    7、在Matlab主界面的右边将出现新的工具栏。点击“Add class”,输入你想要的类名,然后在新建的类下点击“Add files”,把你上面保存的那份Matlab代码引进来。出现如下结果,表示你封装的工程(我的为“TestMatlab”)里有个你定义的类(我的为“TestMatlabClass”),该类有个成员方法(我的为“mySum”,它就是我上面自定义的那个Matlab代码的文件名,该Matlab代码应该要写成函数形式,文件名与函数名一致)。“Add files”可以添加多份Matlab代码(只要它们都是函数形式),也可以多次“Add

    class”以创建多个类。如果你创建的这个的工程内需要用到其它资源(比如说,你刚添加的Matlab文件里调用到了其它的Matlab文件中的代码),可以通过该界面下方的“Add files/directories”,把相应的文件甚至文件夹都添加进来。

    115911322.jpg

    8、然后点击上面这张截图中的build图标(一个方块上有3个指着它的箭头),等待一段时间让Matlab生成Web工程,成功后如下所示。而且,在你选好的生成工程的目录位置下,会出现一个文件夹和一个.prj文件(我的为“TestMatlab.prj”与“TestMatlab”文件夹)。

    115911323.jpg

    9、打开VS,文件→新建→项目,出现如下界面。然后,其它语言→Visual C#→Web→ASP.NET 空 Web应用程序,在下面的名称处写上你想要的C# Web项目名(我的为“TestCS”),在位置上选择你想把该项目保存到的位置,确定。

    115911324.jpg

    10、新建了C# Web项目后将出现如下图中的界面,在TestCS项目目录下,有“Properties”、“引用”、“Web.config”这3个目录。右击“引用”→添加引用→浏览,然后分别找到:Matlab安装根目录下的toolbox\dotnetbuilder\bin\win32\v2.0\MWArray.dll、你所创建的Matlab封装工程目录下的(我的为“TestMatlab”文件夹)\distrib中的与封装工程名同名的.dll文件(我的为“TestMatlab.dll”)。把这两份.dll引进来之后,如下界面的“引用”一栏出现了新增的“MWArray”与“TestMatlab”。

    115911325.jpg

    11、右击上述界面的“TestCS”根目录→添加→新建项,出现如下界面。Visual C#→Web→Web 窗体,输入你要创建的Web界面的名称(我的为“TestPage”),添加。该步将创建一个ASP页面,作为TestCS的表现层。

    115911326.jpg

    12、此后,在项目目录下将新增目录“TestPage.aspx”,其下有两个文件:“TestPage.aspx.cs”与“TestPage.aspx.designer.cs”,如下图。后者暂时不用管,前者则是充当“TestPage.aspx”的后台,主要用于定义处理来自表现层事件的处理器,用C#实现。分别双击“TestPage.aspx”与“TestPage.aspx.cs”,并在打开的该两者内分别填入如下两幅截图里的代码。

    115911327.jpg

    115911328.jpg

    115911329.jpg

    13、激动人心的一刻要来了!写完代码后,按下VS的调试按钮。如果一切顺利,将自动启动浏览器并创建新页面,页面内将出现如下图,点一下“Go”,会显示“3”这个结果(我的“TestPage.aspx.cs”中让a为1,b为2,然后a与b传入了“mySum”方法,执行加法得到就是3)。至此,大功告成!

    115911330.jpg

    115911331.jpg

    由于精力和篇幅有限,上述代码就不解释了,读者应该可以大概看得明白思路。另外,本文中有些地方的原理性介绍可能有些缺乏,本人以后再顺其自然补充……最后,需要提明的是,此处以在C#的Web项目下调用Matlab代码为内容讨论,如果能成功弄好上述,C#的普通项目下调用Matlab代码也就不在话下了,读者可以自行尝试一下。

    展开全文
  • java与matlab混合编程jsp调用matlab网页显示fig
  • 网页暂时用的静态页面,也就是html css js等,想知道如何用网页作为matlab的GUI,例如网页中一个button调用matlab函数等  查了一下网上的,最好的应该是.net实现链接matlab生成的动态库,但在VS里建立网项目中...
  • 本篇教程介绍了HTML+CSS入门 如何调用Matlab程序,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门。<本环节需要准备JDK和JAVA编译器以及部署项目服务器,本节使用Eclipse和Tomcat。1、创建web工程,...

    本篇教程介绍了HTML+CSS入门 如何调用Matlab程序,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门。

    <

    本环节需要准备JDK和JAVA编译器以及部署项目服务器,本节使用Eclipse和Tomcat。

    1、  创建web工程,工程中需要引入javabuild.jar和Matlab函数的JAR包,直接放到lib里

    2、  下面进行对Matlab函数Math.jar进行调用,分2种方式,本文仅作简单测试,并不搭建web框架进行传地址。

    3、  使用JSP测试调用sum2.jar中封装对象,测试函数输出结果。

    A 创建jsp页面,在jsp页面头部文件引用包

    中间2条引入为需要引入的包和异常处理支持,最后一个为Matlab函数JAR包对应的对象。

    页面

    中增加代码

    Object[] result = null;

    MathClass ms = new MathClass();

    result = ms.MathTest(1, 44, 11);

    %>

    部署web项目到Tomcat,这里省略部署过程。

    之后直接启动Tomcat,访问对应路径:http://localhost:8080/matlabDraw/index.jsp

    若访问不出错,有结果为55,则输出正确,测试成功。

    B 若需要调用的为作图类型,则使用这个办法。

    在web项目,web-inf目录下加入webfigures.tld标签库,文件在Matlab中有,MATLAB\R2012a\toolbox\javabuilder\webfigures

    在jsp页面引入A中的标签除外,继续增加

    在web.xml中也请增加引入Webfigures,

    WebFigures

    com.mathworks.toolbox.javabuilder.webfigures.WebFiguresServlet

    WebFigures

    /WebFigures/*

    最后在页面中加入如下标签,获取函数返回对象WebFigure,然后进行展示。

    本文由职坐标整理发布,欢迎关注职坐标WEB前端HTML/CSS频道,获取更多HTML/CSS知识!

    展开全文
  • matlab程序是一个关于灰色关联度计算的,现在大概知道框架是这样,现在问题是网页怎么调用matlab程序
  • php调用matlab环境的可执行文件在网页显示结果(失败)问题实验平台php代码尝试的解决方案用户权限的问题查阅php.ini配置文档给予php运行的用户和本机用户权限补充:sudo介绍更改php版本添加ctf文件 问题 用C++调用...

    此时此刻的心情是无比的舒畅啊!!!niangdi搞了一天能试的法子都试了,没有用,现在记录一下,试错过程,以后有水平够了继续来,如果有大佬知道解决方法跪求评论区解决方法!!!

    在发完这篇博客大概一个小时后,我搞出来了。发现我的直觉是对的,就是因为权限的问题

    我实验的第一种方式是对的,只是没有操作好!!!

    问题

    用C++调用自己编写的matlab函数(这一块前几篇《Ubuntu 相关》的博客已经说明),在服务器端可以正常运行,但是在网页端出现了Could not initialize libpredictresultInitialize!的问题。

    之前在ubuntu上也出现过,但是配置好环境变量就好了。

    当时也不知道什么原因,也没有找到相关的资料,最主要的是没有错误信息,这就很难受,不知道哪里有错啊!!!

    结果现在再次出现这种问题就没有对应的解决方案了!!!

    实验平台

    阿里云服务器安装centos 8.0系统

    安装MCR Install环境版本为v 9.1

    cmake 编译器为3.13.2

    php版本为php7.3.24

    Apache版本为Apache/2.4.37 (centos)

    php代码

      1 <?php
      2 
      3 $Train_date = "/var/www/html/predictresults/xunlianjitezheng.mat";
      4 $Test_date = "/var/www/html/predictresults/ceshijitezheng.mat";
      5 echo "I get the date!\r\n";
      6 
      7 $command = "./usePredictresult 2>&1 ".$Train_date." ".$Test_date.";exit;";
      8 echo "I get the command!\r\n";
      9 
     10 $result = exec($command, $output, $rs);
     11 //$result = system($command, $var);
     12 echo "I get the result!\r\n";
     13 
     14 echo $result;
     15 echo "\r\n";
     16 
     17 //var_dump(end($output));
     18 
     19 //echo count($output);
     20 //echo "\r\n";
     21 
     22 //echo $output;
     23 //echo "\r\n";
     24 
     25 print_r($output);
     26 
     27 ?>
    

    尝试的解决方案(失败)

    用户权限的问题

    查阅php.ini配置文档

    以下内容参考博客《ubuntu下php调用执行shell脚本

    php --ini
    

    在这里插入图片描述
    这里为啥是php73呢,因为我后面把尝试过把php74改成php73!!!

    vim /etc/opt/remi/php73/php.ini
    

    关闭安全模式 safe_mode=Off

    通过vim查找命令:

    /safe_mod          //自上往下查找
    ?safe_mode          //自下往上查找
    

    并没有找到这个设置选项,索性自己加上:
    在这里插入图片描述
    顺便改了一下内存限制(忘记从哪篇博客上看的了,没有笔记!!!):
    在这里插入图片描述

    给予php运行的用户和本机用户权限

    以下参考博客《通过sudo解决php执行linux脚本的权限问题
    查看php运行的用户可以通过下面这个php网页获取。

    <?php 
        echo shell_exec("id -a");
    ?>
    

    在这里插入图片描述
    在这里插入图片描述
    sudo 命令,为非根用户授予根用户的权限

    配置文件是/etc/sudoers,此文件有权限限制,而且有格式要求,万一改错会比较麻烦。使用visudo可以容易配置。

    在这里插入图片描述
    root下面两行是我输入的,我最先输入的是apache,关闭文件后再次打开,就变成上面图片的内容了,咱也不知道为啥,反正改了也没啥用。

    第一种尝试,死亡!!!
    在这里插入图片描述

    补充:sudo介绍

    sudo允许root分配给普通用户一些不具备的权利,让普通用户也可以具有root用户的相关权限(比如说sudo可以分配给某一用户某些特定的命令执行权限)。

    其中sudo一个重要的文件就是/etc/sudoers,哪些用户具有什么样的命令可以执行都是靠这个文件的,主要只有里面分配了的用户才能使用sudo。

    sudo -l //列出该用户能执行的命令
    sudo -u //user 以指定用户来执行命令
    sudo -k //清楚入场券上的时间,下次使用sudo还要输入密码
    sudo -b //在后台执行命令
    

    到这里突然想到一个问题,可以不可把运行matlab函数写到shell文件里,然后php网页端调用shell文件。写完再试试!!!

    更改php版本

    为啥要更改版本呢,因为师哥用的版本跟我用的版本不一样,他成功了,我却失败了,那是版本不匹配的问题?试试呗!!!

    卸载所有php7.4:

    yum remove php74-php*
    

    启用 PHP 7.3 的 Remi 模块并进行安装

    dnf -y install dnf-utils
    yum search php73*
    yum install php73-php 
    php73 -v
    

    在这里插入图片描述
    然后终端运行没毛病,网页端死了!!!

    在这里插入图片描述
    在这里插入图片描述

    添加ctf文件

    为啥要添加呢,参考博客《C++中调用matlab的dll文件(解决初始化失败的问题)》,这是在window系统上的解决方案,只能死马当活马医了!!!

    matlab的app工具没法生成ctf文件,所以使用mcc生成相应文件,具体过程请参考我的博客《Ubuntu下用c++调用自己编写的matlab函数》。

    在本地生成之后,上传到云端,终端运行没毛病,网页上还是不行。

    在这里插入图片描述
    在这里插入图片描述
    现在我要去尝试shell的方案了!!!

    尝试的解决方案(成功)

    好吧我承认我尝试了shell的方式,虽然有点蠢,但并不是没有用,我验证了权限是否设置好了!!!

    以下内容参考dalao博客《php利用root权限执行shell脚本(二)》。

    我做的跟之前唯一一点不一样的地方就是sudoers这个文件做了微小改动!!!
    改动之前:
    在这里插入图片描述
    改动之后:
    在这里插入图片描述

    看图中每行都有三个ALL,第一个ALL代表网络中的主机,第二个括号里面的ALL代表目标用户,表示以谁的身份去执行命令,最后一个ALL代表的是可执行的命令名(可以指定你想要该用户能够执行的命令)。

    其中NOPASSWD表示不用输入密码。(为了方便嘛,不然我通过浏览器访问难道程序里面多了道填写密码,还要等反馈,真是麻烦,这样就省事多了)

    只是改动了php端的用户名,我不知道为啥之前改不了!!!

    改动之后的运行结果:(喜大普奔啊!!!)
    在这里插入图片描述

    说一下过程

    查看一下你的Apache的执行用户:

    lsof -i:80 
    

    在这里插入图片描述
    发现就是apache,这跟网页显示的一样:(我之前一直感觉网页现实的不靠谱!!)
    在这里插入图片描述

    查看Apache的配置文件

    查看apache的安装位置:

    rpm -ql httpd
    

    在这里插入图片描述
    查看文件:

    cd /etc/httpd/conf
    ls
    vim httpd.conf
    

    在这里插入图片描述
    发现用户名还是apache,这就更加确定了,我之前的文件改动有错,然后一改,结果就成了!!!

    舒服了!!!

    展开全文
  • C#中调用matlab模块

    千次阅读 2012-09-04 22:30:13
     昨天樊小弟bg大哥夜宵,托大哥我帮他解决在网页调用matlab模块的问题,考虑到我毕业设计也是用matlab和c#,今天闲来无事,查阅了下资料,终于找到解决方法。写点东西以防以后找不到。 1.在matlab中编写.m文件。...
  • 1.ubuntu16.04安装matlab参考网页:https://www.jianshu.com/p/78605a1345a8 写的非常好,不过在利用crack内readme里面standalone进行破解时,普通安装时,只需要standalone第一行破解秘钥即可 创建matlab应用程序...
  • 网上Java+matlab混编的挺多,大多数实例也都能实现出来,但是将matlab生成出来Figure显示在jsp页面中并配合WebFigure实现的例子却很少,所以我将自己的尝试结果详细的写出来。 一从Java和Matlab混合编程 1.1环境...
  • 应用idea通过网页接收用户上传的图片,怎么调用matlabcontrol的方法连接matlab调用脚本文件并向脚本里传递照片,然后将matlab的值传递给java。 如果可以的话能不能帮我把matlabcontrol里的方法写成汉语的 写几个...
  • 经过上一步,实现了用Python调用MATLAB函数 经过实验,发现这一功能也可以将MATLAB 图像在Python显示。 接下来的问题就是 如何保存这个图片,使得它可以被服务端调用,传到网页上。 方法一: 用MATLAB的saveas...
  • 考虑到算法模型较多、计算量较大、图形化处理等问题,利用原有的C#软件开发平台,没有提供足够的工具函数与计算能力,因此采用matlab与.net混编模式。 1. Matlab.net混编技术简介 MATLAB作为一款功能强大、效率高...
  • 使用php在网页执行matlab

    千次阅读 2012-09-11 23:21:42
    通过php调用linux命令,可以实现远程调用matlab. 试验环境:Fedora16, matlab2012b linux version, Google chrome 18.0.1025.108 beta 以下代码实现了在网页输入matlab命令并显示执行结果。注意:如果不加-no...

空空如也

空空如也

1 2 3
收藏数 57
精华内容 22
关键字:

网页调用matlab

matlab 订阅