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

对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)')作为符号表达式,其值是完全准确的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值