0

Je suis résolution d'une équation symbolique:Comment afficher le résultat d'un calcul symbolique sous forme de nombre?

% 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 

J'ai besoin x en tant réel mais la réponse vient comme (cos(1) - 1)/(sin(1) + 1) + 1. Que dois-je faire avec ceci si je veux un numéro?

Répondre

2

casting à votre sortie double produira pour résultat souhaité:

x = 

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

>> double(x) 

ans = 

    0.7504 

ci-dessus a été testé sur R2016b. Si pour une raison quelconque, cela ne fonctionne pas, il y a le repli de eval(), qui produit le même résultat que double() (dans ce cas).

Notez que evalpeut avoir divers effets secondaires (see example) et doit être utilisé dans des cas extrêmement rares.

+0

vpa() ne fonctionnera pas? –

+1

@MohammadrezaKhoshbin - Merci pour ce commentaire. Vous avez raison que 'vpa (x)' transforme l'expression 'sin + cos' en un nombre, mais le nombre est de type' sym'. J'ai compris de la question que l'OP veut "un nombre réel", ce qui pour moi est un "double". Votre suggestion peut être tout aussi valable - tout est une question de ce que le PO veut. –

+0

Merci pour la clarification! Je ne savais pas sur le type du nombre résultant. –