Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab:在不干扰主进程的情况下测试表达式是否有效_Matlab - Fatal编程技术网

Matlab:在不干扰主进程的情况下测试表达式是否有效

Matlab:在不干扰主进程的情况下测试表达式是否有效,matlab,Matlab,我正在用GP'ish(遗传编程)过程生成表达式,我想测试生成后的候选后代是否具有有效的Matlab语法。这意味着,在无效的情况下,主进程不能被干扰,从而导致一种带有子进程的解决方案。有没有一种直接的方法来实现这一点,而不是编写一个包含eval(表达式)的m文件,从Matlab内部调用它,在一个变量中写入响应并使用isnumeric进行分析(如果这样的管道能够工作的话) 我有以下部分解决方案,但两个提议的系统串都有其缺陷: % WRITE m-file WITH EXPRESSION AS STR

我正在用GP'ish(遗传编程)过程生成表达式,我想测试生成后的候选后代是否具有有效的Matlab语法。这意味着,在无效的情况下,主进程不能被干扰,从而导致一种带有子进程的解决方案。有没有一种直接的方法来实现这一点,而不是编写一个包含eval(表达式)的m文件,从Matlab内部调用它,在一个变量中写入响应并使用isnumeric进行分析(如果这样的管道能够工作的话)

我有以下部分解决方案,但两个提议的系统串都有其缺陷:

% WRITE m-file WITH EXPRESSION AS STRING IN P_prim 
P_prim_name = 'test_verification.m';
fileID = fopen(P_prim_name, 'wt');
formatSpec = '%s';
L1 = 'F = ';
fprintf(fileID,formatSpec,L1);
formatSpec = '''%s''';
fprintf(fileID,formatSpec,P_prim);                            
L2 = ';';
formatSpec = '%s\n';
fprintf(fileID,formatSpec,L2);
L3 = 'z = 2; Matlab_return = eval(F);'; 
fprintf(fileID,formatSpec,L3);       
fclose(fileID);

% MAKE SYSTEM-STRING AND CALL 
Matlab_systemstring = strcat('matlab -nodesktop -r "run(''', P_prim_name, '''); save(''test_verification_result'', ''Matlab_return''); exit"');
% halt before getting to exit if expression is invalid
Matlab_systemstring = strcat('matlab -nodesktop -r "try, run(''', P_prim_name, '''); save(''test_verification_result'', ''Matlab_return''); catch, exit, end, exit"');
% generates some numeric values even if expression is invalid
system(Matlab_systemstring);

% LOAD mat-file AND ANALYSE VARIABLE 
clear Matlab_return
load('test_verification_result.mat'); disp(['Matlab_return = ', num2str(Matlab_return)]);
if isnumeric(Matlab_return) == 1; 
    disp('Matlab_return IS numeric => expression valid'); 
else; 
    disp('Matlab_return IS NOT numeric => expression invalid'); 
end