草庐IT

linux - 从命令行启动 matlab 后,linux 终端中缺少某些内容

coder 2023-06-20 原文

在 Linux 中从命令行启动 matlab 时,我遇到了一个奇怪的行为。

我在 linux 中有一个 bash 脚本,它从命令行在 matlab 中执行一个函数,并使用用 C++ 编写的自定义函数执行其他操作,如下所示:

#!/bin/bash
# prepare input data just to be sure it has not been written by other test!
matlab2011a -nodesktop -nosplash -r "prepare_data_matlab( 'A' ); quit"
# launch C++ program
...
# prepare more data
matlab2011a -nodesktop -nosplash -r "prepare_data_matlab( 'B' ); quit"

脚本完成后,我无法在终端中看到我在写什么,尽管这些命令有效果。我需要重置终端。

事实是,如果我只使用 prepare_data_matlab( 'A' ) 启动 matlab,一切正常,但是当我使用选项 prepare_data_matlab( 'B' ) 执行函数时,问题就来了

我逐行评论,发现问题出在调用函数的选项 B

dlmwrite(file_name, B, ' ');

未在 prepare_data_matlab( 'A' ) 中使用。

那么,我应该如何从命令行执行 matlab 以避免这种行为? dlmwrite() 函数是否存在已知错误?

我正在使用 Ubuntu 12.04 64 位,GNU bash,版本 4.2.24(1)-release (x86_64-pc- linux-gnu) 和 matlab2011a

已编辑:prepare_data_matlab( 'A' ) 生成的输出是

prepare_data_matlab( 'B' ) 生成的输出是

已编辑:file_name 创建为 strcat(path_to_data,f); 其中 path_to_data =/tmp/f = data_out.txt。矩阵B前后不显示。

从bash脚本生成MATLAB脚本之前或之后到终端的唯一输出如下:

echo "#### SELECT DATA FROM WORKSPACE ####"
matlab2011a -nodesktop -nosplash -r "prepare_data_matlab( 'B' ); quit";
echo "#### Process Data as input in a C++ programs ####"

MATLAB函数从workscape中选择数据并保存到磁盘如下:

function [ ] = prepare_data_matlab( type )
if strcmp(type,'A')
    % load data from workscape
    load ('workspace_with_my_arrays.mat', 'A');    
    % save data as a standalone variable
    save('/tmp/A.mat', 'A');
elseif strcmp(type,'B')
    % load data from workscape
    load ('workspace_with_my_arrays.mat', 'B');    
    path_to_data = '/tmp/';
    f            = 'data_out.txt';
    file_name    = strcat(path_to_data,f);
    % save data as a txt file
    dlmwrite(file_name, B, ' ');
end
end

已编辑 whos -file workspace_with_my_arrays.mat

Name                             Size                     Bytes  Class     Attributes

A                             610x340x103            170897600  double              
B                             610x340x103            170897600  double
P                             610x340                  1659200  double              
t1                            38855x100                 31084000  double              
t2                            3921x2x100                6273600  double

工作区中有更多数组,但我加载的是这些数组。

prepare_data_matlab 函数与上面发布的相同,但参数错误检查如下:

%% Load data from file 
% Data is saved in a MATLAB variable or in TXT 
if nargin ~= 1
    error('Use: prepare_data_matlab( [ A | B ] )')
end

和以下命令:

cd /data/matlab;

在两种情况下(选项 A 和选项 B)都在参数错误检查之后执行,即在 if 语句之前执行.

最佳答案

问题不在于 dlmwrite。这似乎是某些版本的 MATLAB 中的错误,如本 link 中所报告的那样.

建议的解决方案(如果您的 MATLAB 版本有问题)是使用 nohup:

nohup matlab -nodesktop -nosplash -r ...........

更新: 根据@Amro 的建议,@pQB 向 MathWorks 支持部门报告了该问题。他们的回答是:

The problem is a known issue in versions prior to R2012a. Run MATLAB under a different shell. For example, neither tcsh or zsh have this issue.

旧答案: 问题不在于 dlmwrite,而在于矩阵的内容。此外,除非 file_name 指向 stdout(例如,file_name='/dev/stdout';),否则 dlmwrite 函数不会向屏幕写入任何内容,也不会弄乱您的终端。 file_name 指向 stdout 或者您在 dlmwrite 调用之前(或之后)显示矩阵 B。

无论如何,问题出在矩阵 B 的内容上(查看输出中的奇怪字符)。您需要解决矩阵 B 的问题。也许您用来读取其输入数据的方法有问题。

关于linux - 从命令行启动 matlab 后,linux 终端中缺少某些内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17969462/

有关linux - 从命令行启动 matlab 后,linux 终端中缺少某些内容的更多相关文章

  1. ruby - 将数组的内容转换为 int - 2

    我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]

  2. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  3. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  4. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  5. ruby-on-rails - 在 Rails 和 ActiveRecord 中查询时忽略某些字段 - 2

    我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr

  6. ruby - 查找字符串中的内容类型(数字、日期、时间、字符串等) - 2

    我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s

  7. Matlab imread()读到了什么 (浅显 当复习文档了) - 2

    matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1

  8. UE4 源码阅读:从引擎启动到Receive Begin Play - 2

    一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame

  9. ruby-on-rails - rbenv:从 RVM 移动到 rbenv 后,在 Jenkins 执行 shell 中找不到命令 - 2

    我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions

  10. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

随机推荐