当前位置: 首页 > 工具软件 > Sym > 使用案例 >

matlab符号表达式vpa,对MATLAB中符号和数值型数据以及sym(),sym(''),sym(,'d'),vpa()的理解【更新版】...

慕容昊焜
2023-12-01

对MATLAB中符号和数值型数据以及

sym(),sym(''),sym(,'d'),vpa()的理解

[说明:正文中命令部分可以直接在matlab中运行,作者用的是MA TLAB R2009a(7.8.0.347)]

v73_64=vpa(7/3,64),vs73d_64=vpa(sym(7/3,'d'),64)

vs73d_v73_64=vs73d_64-v73_64

v73_32=vpa(7/3,32),vs73d_32=vpa(sym(7/3,'d'),32)

vs73d_v73_32=vs73d_32-v73_32

vs73d=vpa(sym(7/3,'d'))

%sym('7/3','d')是7/3的十进制浮点近似表达(默认32位显示)

%但从vs73d_64看来,实际有效位数只有16位

%从vs73d_64和vs73d_32对比可知:vpa()不改变sym(7/3,'d')的显示精度

u=7/3-sym('7/3')

uv=vpa(7/3-sym('7/3'))

v73=vpa(7/3),vs73=vpa(sym('7/3'))

uvv=vpa(7/3)-vpa(sym('7/3'))

vs73d_64=vpa(sym('7/3'),64)

%v73与vs73相等,但uvv不等于0,说明vpa()做差时精度和看到的不同

%经验证:uvv=vpa(7/3,32)-vpa(sym('7/3'),32)的值是为0的

%故:在形如vpa()-vpa()的表达式求解过程中,

%vpa()对不同的数据类型选取的精度不同,sym('')选得更精确

%且结果并非全在实际有效数位内的(uvv小数位上不全为3)

v73=vpa(7/3),s73d=sym(7/3,'d')

v73_s73=vpa(7/3)-sym('7/3')

s73d_s73=sym(7/3,'d')-sym('7/3')

%v73_s73不等于0

%这是由于vpa(7/3)只是7/3的32为浮点表达,二者不相等

p3=pi*3^(1/3),sp3=sym('pi*3^(1/3)')

p3_sp3=pi*3^(1/3)-sym('pi*3^(1/3)')

vp3=vpa(pi*3^(1/3)),vsp3=vpa(sym('pi*3^(1/3)'))

vp3_vsp3=vpa(pi*3^(1/3))-vpa(sym('pi*3^(1/3)'))

vp3_sp3=vpa(pi*3^(1/3))-sym('pi*3^(1/3)')

v_p3_sp3=vpa(pi*3^(1/3)-sym('pi*3^(1/3)'))

%注意到,p3_sp3其实是等于0的,但v_p3_sp3却不等于0

%经测试:vpa(pi*3^(1/3))只有前16位与vpa(sym('pi*3^(1/3)'))相同

%由于sym('pi*3^(1/3)')作为符号表达式,其值是完全准确的

 类似资料: