我已生成的.m爲電氣電路的傳遞函數的輸出文件由計算機4.0 Sapwin http://cirlab.dinfo.unifi.it/Sapwin4/試圖Matlab的.M符號函數文件(一個或多個)轉換爲SymPy符號表達式
的.m文件具有用於結構相當簡單的我現在的興趣:
function [out]=my003_v1(s,C1,C2,E1,R1,R2);
num = + (E1)+ (E1*C1*R2 +E1*C2*R2)*s;
den = + (E1 +1)+ (E1*C1*R2 +C1*R2 +C1*R1 +E1*C2*R2 +C2*R2)*s+ (E1*C2*C1*R1*R2 +C2*C1*R1*R2)*s^2;
out = num/den;
我想許多這些.m文件的轉換成SymPy符號表達式進一步操縱符號
開放,infile.read(),索引行S,切片,從而獲得所需的指定參數和NUM串,書房的所有工作
所以我只是顯示減少甚至與實際字符串替換字符串變量的符號的轉換步驟:
from sympy import symbols, var, sympify
var('s,C1,C2,E1,R1,R2')
'''
#awkward alternative to var:
exp_str='s,C1,C2,E1,R1,R2' + " = symbols('" + 's,C1,C2,E1,R1,R2' + "')"
exec(exp_str)
print(exp_str)
'''
a=sympify(' (E1)+ (E1*C1*R2 +E1*C2*R2)*s')
'''
# another alternative to sympify:
from sympy.parsing.sympy_parser import (parse_expr,
standard_transformations)
parse_expr(' (E1)+ (E1*C1*R2 +E1*C2*R2)*s', transformations=(standard_transformations))
'''
三重報價塊顯示我已經有類似的結果,同樣的底線試圖替代方案:
TypeError: unsupported operand type(s) for *: 'function' and 'Symbol'
錯誤報告與代碼運行在SympyLive:
Traceback (most recent call last):
File "<string>", line 12, in <module>
File "/base/data/home/apps/s~sympy-live-hrd/46.393464279709602171/sympy/sympy/core/sympify.py", line 322, in sympify
expr = parse_expr(a, local_dict=locals, transformations=transformations, evaluate=evaluate)
File "/base/data/home/apps/s~sympy-live-hrd/46.393464279709602171/sympy/sympy/parsing/sympy_parser.py", line 894, in parse_expr
return eval_expr(code, local_dict, global_dict)
File "/base/data/home/apps/s~sympy-live-hrd/46.393464279709602171/sympy/sympy/parsing/sympy_parser.py", line 807, in eval_expr
code, global_dict, local_dict) # take local objects in preference
File "<string>", line 1, in <module>
TypeError: unsupported operand type(s) for *: 'function' and 'Symbol'
我看到我的Anaconda3類似的錯誤最近安裝,Spyder的,在IPython中和常規控制檯
sympify似乎與SymPy直播類似的表達結構的工作:
>>> sympify(x*y+(z**k+x*y*z)*t)
t(xyz+zk)+xy
... sympify('-(x**k+ y*z*t+ m)*z')
z(−m−tyz−xk)
怎麼樣的.M文件den字符串正在打破它? 還是我做錯了一些其他方式?
更多的樂趣,如果我切片.M窩串較早後「=」是安全的,它包括領先的「+」,我也得到:
TypeError: bad operand type for unary +: 'function'
這是一個問題可以通過過濾來解決,但不允許這個一元使用「+」似乎是一個不好的假設 傳遞函數中的分子項可能很容易是正數或負數
我想一元「+」是一個錯誤是開發商 – f5r5e5d
一元「+」的警告似乎是從抵押物的問題當Sympify輸入被保護時,Sympify錯誤並消失,因此sympify執行「c正確地「對待表達式字符串arg中的前導一元」+「,它不會出現在輸出符號表達式中 – f5r5e5d