2017-05-02 2 views
0

Voici l'équation in WolframAlpha returning me the correct answer.renvoie une solution dans WolframAlpha, mais donner un zéro logique dans MATLAB. Comment puis-je réparer cela?

dans Matlab, j'ai écrit ce qui suit:

mu = 305; % Comme exemple temporaire car il est supérieur à c, qui est 300

syms x 
eqn = ((1 + (x/(mu + 300)))^((1/2) + (150/mu)))*((1 - (x/(mu - 300)))^((1/2) - (150/mu))) - 0.2 == 0 %matlab shows the answer is -605 
solve(eqn,x) 

C'est la même équation, à l'exception des substituts pour MATLAB® mu pour moi. MATLAB renvoie les éléments suivants:

eqn = logical 0 
ans = x 

Est-ce que je tape l'équation à tort en quelque sorte? Est-ce la raison pour laquelle il me montrant un zéro logique quand je ne suis pas supprimer l'équation? Comment puis-je obtenir les mêmes valeurs que WolframAlpha?

Je tiens également à noter que Maple semble se bloquer sur cette même équation.

Répondre

1

Sauf si vous avez une raison spécifique pour l'utilisation d'expressions symboliques, vous pouvez résoudre l'équation que vous avez en utilisant fsolve comme suit:

%Define your value of mu 
mu = 305; 
% Define the equation as an anonymous function 
fn = @(x) ((1 + (x/(mu + 300)))^((1/2) + (150/mu)))*((1 - (x/(mu - 300)))^((1/2) - (150/mu))) - 0.2; 
% Define the initial value for x so that fsolve can find the root nearest to that 
x0 = 1; 
root_x = fsolve(fn, x0); 

Cela conduit à la sortie root_x = 5.0000 + 0.0000i Vous pouvez également modifier la valeur initiale de x0

x0 = 400; 
root_x = fsolve(fn, x0); 

Cela renverra la sortie root_x = -4.9005e+02 - 2.6326e-05i

Cette méthode peut être utilisée pour résoudre l'une des équations que vous pourriez avoir.