如何在scilab中将符号写入文件

时间:2017-02-15 12:45:14

标签: matlab scilab

我正在开发符号工具包。试图解决一些方程式,这是一长串符号,例如x = a1 + a2 ^ 3 + b0 * b1 ...高达80,000(80k)个字符。 所以我需要将其存档。 mputstr()和其他wrting函数不起作用,因为它们是符号。 错误被抛出:不是字符串或指定的格式。

是否有任何方法可以帮助将变量降低到文件。 代码是:

    Syms aa ab ac
    z=ab^6*ac^6*ad^3*ba^3*bg^3*bh^3+3*aa^4*ab^6*ac^6*ad^4*ba^4*bg^2*bh^2+3*aa^5*ab^6*ac^6*ad^5*ba^5*bg*bh+aa^6*ab^6*ac^6*ad^6*ba^6

    mputstr({char(z)},fd)
    >>error 10000 
    >>char: Wrong type for input argument: Cell expected.
    at line      95 of function char called by :  


    mputstr(z,fd)
    >> !--error 999 
    >mputstr: Wrong type for input argument #1: A string expected.

    p=string(z)

    mputstr(p,fd) 
    >>!--error 999 
    >mputstr: Wrong type for input argument #1: A string expected.


    mfprintf("%s",z) 
    >>    !--error 246 
    >>Function not defined for given argument type(s),
      check arguments or define function %c_mfprintf for overloading. ..

2 个答案:

答案 0 :(得分:0)

让我们说你有一个符号方程x:

syms a b c 
x = a + b * c 

这里,x表示符号变量,因此您无法直接将其写入文件。您需要先将其转换为字符数组。所以你应该使用像

这样的东西
fd = mopen( this_file, "wt" );
mputstr( char(x), fd );
mclose( fd );

答案 1 :(得分:0)

我认为@ bremen_matt的答案很好,但有一个修改。

如果你的" Syms"变量是复杂的,所以 char() string()不能使用,为什么你不创建自己的转换函数?

请参阅下面我对@bremen_matt示例的修改:

syms a b c 
x = a + b * c 

fd = mopen( this_file, "wt" );
mputstr( syms_to_string(x), fd );
mclose( fd );

syms_to_string()返回您要打印符号 x 的信息字符串,同样的功能可用于打印其他符号(例如 a )。当然,可以使用overloading更好地定义 syms_to_string()函数。