2015-02-06 55 views
1

我呼吁pdfomegatFOR在MATLAB循环和数值错误

omegat= -1.9999:0.01:+1.9999; 
sum1=0; 

for j=1:length(omegat) 

    func(j)=pdfomegat(j)*0.01; 
    sum1=sum1+func(j); 
end 

    c1=sum1; 

我的第二个循环,总结的函数值的循环略有不同循环,如下所示

sum2=0; 
syms t 
for j=1:length(omegat) 

    func2(j)=t*pdfomegat(j)*0.01; 
    sum2=sum2+func(j); 
end 

    c2=sum2; 

我知道事实上,c1是1 ..但是请注意,在第二个循环中,我只改变了符号字符t。无论我得到那

c2 = 0.99999464659732599597363744692302 * t。

为什么不是c2 = t?

有没有什么办法可以修复它,我不能使用轮功能,因为它的象征性..任何想法?

+0

我应该读文件来知道答案:)?我猜测代码没有问题。它只是与MATLAB本身的东西? @Nitish – George 2015-02-06 00:10:22

+0

Matlab对非整数使用浮点表示法。不幸的是,它们没有无限精度。有限制错误的技术(例如总和数从最小到最大),但最终唯一的方法是仅使用整数。 – 2015-02-06 00:33:54

+0

有什么方法可以修复它? @AndrewPiliser我的问题需要很高的精度:( – George 2015-02-06 00:37:58

回答

0

循环调用符号数字的double()函数后,将其转换为常规数字,然后调用循环函数。

+0

谢谢,你的意思是double(c2)吗?如果我这样做,我会得到一个错误在MuPAD命令错误:DOUBLE不能将输入表达式转换为双数组 – George 2015-02-06 00:33:42

+0

我不认为你可以使用double或者vpa,因为我有一个符号表达式 – George 2015-02-06 00:34:35

+0

你可以使用['coeffs']提取系数(http://www.mathworks.com/ – 2015-02-06 00:45:01