作业帮 > 综合 > 作业

为什么matlab总是提示‘Conversion to double from sym is not possible’

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/13 14:16:21
为什么matlab总是提示‘Conversion to double from sym is not possible’?
I_real=sym(zeros(15,1));
I_float=zeros(15,1);
I_real(1)=sym('1-exp(-1)');
I_float(1)=vpa(double(I_real(1)));
for n=1:14
I_real(n+1)=1-n*I_real(n);
I_float(n+1)=vpa(1-n*I_float(n));
end
vpa([I_float I_real])
这种转化确实挺晕的,经我调试,现将原因告诉你:
I_real(1)=sym('1-exp(-1)')后I_real(1)格式为sym 值为1-exp(-1)
double(I_real(1))后格式为double 值为0.6321
按我猜测你可能觉得小数位数不够而后用vpa,很好vpa转化后值是.63212055882855766597572255705018
但格式又变为sym,而I_float是double格式数组.所以将vpa(double(I_real(1)))赋值给I_float(1)会出错.程序改为如下,不知可如意
clc
clear
format long
I_real=sym(zeros(15,1))
I_float=zeros(15,1)
I_real(1)=sym('1-exp(-1)')
I_float(1)=double(I_real(1))
for n=1:14
I_real(n+1)=1-n*I_real(n);
I_float(n+1)=1-n*I_float(n);
end
vpa([I_float I_real])
再问: 谢谢你的回答哦~我刚开始学习matlab,所以有很多地方不太懂,能不能再请教你一个问题?就是,如果现在的条件改为I14=0.062732164,递推关系为I(n-1)=(1-I(n))/n,那么该怎么改上面的编程才能到得到输出I14; I13; ··· ; I0的头8位精确有效数字?我得到的为什么全是零呢?万分感谢!
再答: clc clear I14=0.062732164; fprintf('I14= %.8g\n',I14)%%保留8位有效数字 for k=1:14 eval(['I',num2str(14-k),'=(1-I',num2str(15-k),')/',num2str(15-k),';']); eval( ['fprintf(''','I',num2str(14-k),' = %.8g\n'',','I',num2str(14-k),')']) end 或者 clc clear digits(8) I14=0.062732164; %fprintf('I14= %.8g\n',I14)%%保留8位有效数字 I14=vpa(I14) for k=1:14 eval(['I',num2str(14-k),'=(1-I',num2str(15-k),')/',num2str(15-k),';']); eval( ['I',num2str(14-k),'=vpa(I',num2str(14-k),')']) end