0

我象征性地求解方程:如何将符号计算的结果显示为数字?

% Newton's method 
syms x; 
F(x)=x-cos(x); 
FPrime(x)=diff(F(x)); 
display(FPrime(x)); 
x0=input('please give first point[x0] = '); 
Accuracy=input('Accuracy[xn-xn-1] = '); 
for k=0:15; 
    x=x0-(F(x0)/FPrime(x0)); 
    x0=x; 
    if(abs(F(x))<=Accuracy); 
     display(x); 
     break 
    end  
end 

我需要x作为一个实数,但答案出来为(cos(1) - 1)/(sin(1) + 1) + 1。如果我想要一个号码,我需要做什么?

回答

2

你的输出投射到double会产生导致你想要的:

x = 

(cos(1) - 1)/(sin(1) + 1) + 1 

>> double(x) 

ans = 

    0.7504 

上述已于R2016b测试。如果由于某种原因,这不起作用,那么eval()的后备,产生与double()(在这种情况下)相同的结果。

注意eval可以有各种副作用see example),并应在极少数情况下使用。

+0

会不会vpa()工作? –

+1

@MohammadrezaKhoshbin - 感谢您的评论。你是对的,'vpa(x)'把'sin + cos'表达式转换成一个数字,但是这个数字的类型是'sym'。我从问题中了解到OP要“真实的号码”,对我来说这是一个“双重”的问题。你的建议可能同样有效 - 这都是OP想要的问题。 –

+0

谢谢你的澄清!我不知道结果数字的类型。 –

相关问题