Решать квадратные уравнения без индивидуального указания коэффициентов - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь решить уравнения как:

3*(3x-12)/(x+3)-2*(2x+3)/(3x-1) = 5

Это код, который я использую:

eqn1 = 3*(3*X-12)/(X+3)-2*(2*X+3)/(3*X-1) == 5;
sol = solve(eqn1, X);
xSol = sol.X

Это ошибка, которую я получаю:

Error using sym/subsref
Too many output arguments.

1 Ответ

0 голосов
/ 05 июля 2018

Первое, что я бы предложил, это выполнить графическое решение:

% Define the function:
f = @(X)3*(3*X-12)./(X+3)-2*(2*X+3)./(3*X-1)-5;
% Plot the function (solve graphically):
x = -30:0.1:30;
figure(); plot(x,f(x)); grid on; grid minor;

Crude plot

Эта функция имеет вертикальные асимптоты и горизонтальную асимптоту при x=-3, x=1/3 и y=8/3 (обнаружение этого оставлено в качестве упражнения для читателя). Давайте добавим их к графику и увеличим масштаб до 0:

hold on; plot([-3, -3, NaN, 1/3, 1/3], 600*[-1, 1, NaN, -1, 1],'--r');
plot([-30, 30], 8/3*[1 1], '--m'); ylim([-10 10]);

Zoom in with asymptotes

Похоже, есть два решения, одно между вертикальными асимптотами и другое справа от правой асимптоты. Мы можем определить эти регионы для fzero:

% Find zeros:
z = [ fzero(f, [-3+eps(3) 1/3-eps(1/3)] ),... First solution
      fzero(f, [1/3+eps, 30])];             % Second solution

(где 30 - достаточно большое число), и мы получаем:

z =

    0.1902   21.6848
...