找回密码
 注册
Simdroid-非首页
查看: 111|回复: 8

紧急求助,个人觉得奇怪的问题!

[复制链接]
发表于 2010-11-24 11:08:59 | 显示全部楼层 |阅读模式 来自 安徽合肥
诸位大侠好,我用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
=========================
谁帮忙会诊一下?感激不尽!

评分

1

查看全部评分

发表于 2010-11-24 12:16:38 | 显示全部楼层 来自 四川成都
Simdroid开发平台
vpa转换的字符串,你的错误提示全部是关于字符出现的错误。
这样
你把字符串的变成数值
x =eval(vpa(unifrnd(0,1),9));
应该是没问题的。

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-11-24 13:58:52 | 显示全部楼层 来自 河北廊坊
vpa返回值是sym类型的,不能比较,建议转换成double类型
  1. clear;clc;close all
  2. OK = 0;
  3. for i= 1:100  %定义时间范围
  4.         x = double(vpa(unifrnd(0,1),9)); %利用vpa()函数调整MATLAB精度为小数点后9位
  5.         if x <= 1 && x > 5E-8
  6.             OK = OK + 1;
  7.         end
  8. end
  9. OK
复制代码
回复 不支持

使用道具 举报

 楼主| 发表于 2010-11-24 15:07:20 | 显示全部楼层 来自 安徽合肥
:victory:
多谢上面的2位!还是这边高手多啊,呵呵
受教了,再次感谢哦!
回复 不支持

使用道具 举报

 楼主| 发表于 2010-11-24 15:20:15 | 显示全部楼层 来自 安徽合肥
:)不好意思,上述办法可以解决出错的问题,但是好像用了eval() 或 double() 转换后,精度就变小了,我用vpa()的目的就是想把精度准确到小数点后面9位,但是eval和double又变回去了(回到默认精度小数点后面4位)了。也就是相当于vpa()没发挥作用。咋回事呀?
回复 不支持

使用道具 举报

发表于 2010-11-24 15:24:38 | 显示全部楼层 来自 四川成都
不是,那是显示的问题,你用format long看下,确实保存的是有九位小数的数字。
回复 不支持

使用道具 举报

 楼主| 发表于 2010-11-24 15:49:04 | 显示全部楼层 来自 安徽合肥
哦,你是指MATLAB的显示设置默认是4位小数,要显示的准确需要加以调整对吗?上面的回答已经解决我面临的问题,十分感谢。
试了一下——
eval(vpa(unifrnd(0,1),9)) 会生成如 0.207742293000000;
double(vpa(unifrnd(0,1),9)) 会生成如 0.587044704531417;
有没有刚好设成自定义的精度的函数啊?小数位数多了会不会影响循环速度啊,我的循环次数可能会比较多呃,最近想做一个MonteCarlo仿真
呵呵,问题有点多。
回复 不支持

使用道具 举报

发表于 2010-11-24 23:56:30 | 显示全部楼层 来自 黑龙江哈尔滨
指定精度的实现:
floor(m*10^n)/10^n
m是你的数据,n是想保留的位数!

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-11-25 10:57:51 | 显示全部楼层 来自 四川成都
7# Minos
你用eval(vpa(unifrnd(0,1),9)) 得到的结果不就是有九位精度的数值吗?
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-6 15:20 , Processed in 0.040148 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表