matlab - 编译后运行matlab代码出错

标签 matlab matrix compiler-construction executable

看起来这个问题已经被问过很多次了,但过去的帖子似乎都没有解决我的问题。所有这些都与矩阵/向量有关,而我的代码没有任何这些,只有简单的变量。它需要三个变量作为参数。它在 Matlab 环境中运行得非常好。当我用 mcc -m Normal.m 编译它并尝试使用像这样的可执行文件运行“./Normal 1 5 0.5”时,我才收到错误。完整的错误信息是:

Error using /
Matrix dimensions must agree.

Error in Normal (line 4)



MATLAB:dimagree

它提示第 4 行:N=2/dt,这有什么问题?

这是代码:

function val=Normal(l1,l2,dt)

const=(l2/l1-1);
N=2/dt;

S=1.0/sqrt(l2/l1);
Z(1)=S;

for i=2:N
    t= -1+(i-1)*dt;
    Z(i)=1.0/sqrt(const*t*t+1);
    S=S+2*Z(i);
end
Z(21)=1.0/(l2/l1);
S=S+1.0/sqrt(l2/l1);

val=dt*S/2;


end

最佳答案

但是,当通过命令 ./Normal 1 5 0.5 传递到独立版本时,dt 不是标量。它是一个包含 3 个元素的字符数组('0''.''5')!

将数字参数传递给独立时,they are passed as strings 。因此,在函数内部,您需要将 '0.5' 转换为 double 型,对于 l1l2 也是如此:

dt = str2num(dt);
l1 = str2num(l1);
l2 = str2num(l2);

请注意,您可以使用 isdeployed在运行时确定该函数是否是独立的:

if isdeployed, dt = str2num(dt); end

您可能需要显示结果:

if isdeployed, disp(val); end

结果:

>> system('Normal 1 5 0.5');
    1.4307
>> Normal(1,5,0.5) % .m function for comparison
ans =
    1.4307

关于matlab - 编译后运行matlab代码出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23280000/

相关文章:

matlab - Matlab 中条形组的自定义颜色

MATLAB - 将拟合分布曲线添加到直方图

python - 正确追加范围 python

MATLAB:嵌套函数的函数句柄

matlab - 如何在 MATLAB 中中止程序执行?

java - 稀疏矩阵存储器

c++ - 什么是在矩阵中找到最大 M 个相邻元素之和的最快方法

c++ - 如何在函数内调用函数?

compiler-construction - 在设计编译器时,处理递归是否需要特殊处理?

gcc 编译器优势