紧急求助,个人觉得奇怪的问题!
诸位大侠好,我用vpa对MATLAB的随机函数进行小数点位数的调整——vpa(unifrnd(0,1),9)
若单独在command窗口运行好像没有问题,但是编写.m文件时就报错——
=======================
OK = 0;
for i= 1:100%定义时间范围
x = vpa(unifrnd(0,1),9); %利用vpa()函数调整MATLAB精度为小数点后9位
if x <= 1 && x > 5E-8
OK = OK + 1;
end
end
OK
============================
报错信息为:
??? Error using ==> sym.sym>notimplemented at 2621
Function 'le' is not implemented for MuPAD symbolic objects.
Error in ==> sym.sym>sym.le at 834
notimplemented('le');
Error in ==> MonteCarloTest at 39
if x <= 1 && x > 5E-8
=========================
谁帮忙会诊一下?感激不尽! vpa转换的字符串,你的错误提示全部是关于字符出现的错误。
这样
你把字符串的变成数值
x =eval(vpa(unifrnd(0,1),9));
应该是没问题的。 vpa返回值是sym类型的,不能比较,建议转换成double类型clear;clc;close all
OK = 0;
for i= 1:100%定义时间范围
x = double(vpa(unifrnd(0,1),9)); %利用vpa()函数调整MATLAB精度为小数点后9位
if x <= 1 && x > 5E-8
OK = OK + 1;
end
end
OK :victory:
多谢上面的2位!还是这边高手多啊,呵呵
受教了,再次感谢哦! :)不好意思,上述办法可以解决出错的问题,但是好像用了eval() 或 double() 转换后,精度就变小了,我用vpa()的目的就是想把精度准确到小数点后面9位,但是eval和double又变回去了(回到默认精度小数点后面4位)了。也就是相当于vpa()没发挥作用。咋回事呀? 不是,那是显示的问题,你用format long看下,确实保存的是有九位小数的数字。 哦,你是指MATLAB的显示设置默认是4位小数,要显示的准确需要加以调整对吗?上面的回答已经解决我面临的问题,十分感谢。
试了一下——
eval(vpa(unifrnd(0,1),9)) 会生成如 0.207742293000000;
double(vpa(unifrnd(0,1),9)) 会生成如 0.587044704531417;
有没有刚好设成自定义的精度的函数啊?小数位数多了会不会影响循环速度啊,我的循环次数可能会比较多呃,最近想做一个MonteCarlo仿真
呵呵,问题有点多。 指定精度的实现:
floor(m*10^n)/10^n
m是你的数据,n是想保留的位数! 7# Minos
你用eval(vpa(unifrnd(0,1),9)) 得到的结果不就是有九位精度的数值吗?
页:
[1]