exponenta event banner

Устранение неполадок в решениях уравнений из solve Функция

Если solve возвращает решения, которые выглядят сложными, или если solve не может обработать ввод, существует много опций. Эти опции упрощают пространство решения для solve. Эти опции также помогают solve когда ввод сложен и может позволить solve чтобы вернуть решение, где оно было ранее застряло.

Возвращайте только реальные решения

Решить уравнение x^5 - 1 == 0. Это уравнение имеет пять решений.

syms x
solve(x^5 - 1 == 0, x)
ans =
                                                     1
 - (2^(1/2)*(5 - 5^(1/2))^(1/2)*1i)/4 - 5^(1/2)/4 - 1/4
   (2^(1/2)*(5 - 5^(1/2))^(1/2)*1i)/4 - 5^(1/2)/4 - 1/4
   5^(1/2)/4 - (2^(1/2)*(5^(1/2) + 5)^(1/2)*1i)/4 - 1/4
   5^(1/2)/4 + (2^(1/2)*(5^(1/2) + 5)^(1/2)*1i)/4 - 1/4

Если нужны только реальные решения, укажите Real вариант как true. solve функция возвращает одно реальное решение.

solve(x^5 - 1, x, 'Real', true)
ans =
1

Применить правила упрощения

Решите следующее уравнение. solve функция возвращает сложное решение.

syms x
solve(x^(5/2) + 1/x^(5/2) == 1, x)
ans =
                                                       1/(1/2 - (3^(1/2)*1i)/2)^(2/5)
                                                       1/((3^(1/2)*1i)/2 + 1/2)^(2/5)
 -(5^(1/2)/4 - (2^(1/2)*(5 - 5^(1/2))^(1/2)*1i)/4 + 1/4)/(1/2 - (3^(1/2)*1i)/2)^(2/5)
 -((2^(1/2)*(5 - 5^(1/2))^(1/2)*1i)/4 + 5^(1/2)/4 + 1/4)/(1/2 - (3^(1/2)*1i)/2)^(2/5)
 -(5^(1/2)/4 - (2^(1/2)*(5 - 5^(1/2))^(1/2)*1i)/4 + 1/4)/(1/2 + (3^(1/2)*1i)/2)^(2/5)
 -((2^(1/2)*(5 - 5^(1/2))^(1/2)*1i)/4 + 5^(1/2)/4 + 1/4)/(1/2 + (3^(1/2)*1i)/2)^(2/5)

Чтобы применить правила упрощения при решении уравнений, укажите IgnoreAnalyticConstraints вариант как true. Применяемые правила упрощения обычно не верны математически, но могут дать полезные решения, особенно в физике и технике. При этой опции решатель не гарантирует правильность и полноту результата.

solve(x^(5/2) + 1/x^(5/2) == 1, x, 'IgnoreAnalyticConstraints', true)
ans =
 1/(1/2 - (3^(1/2)*1i)/2)^(2/5)
 1/((3^(1/2)*1i)/2 + 1/2)^(2/5)

Это решение проще и удобнее в использовании.

Использование допущений для сужения результатов

Для решений конкретных случаев установите допущения, чтобы вернуть соответствующие решения. Решите следующее уравнение. solve функция возвращает семь решений.

syms x
solve(x^7 + 2*x^6 - 59*x^5 - 106*x^4 + 478*x^3 + 284*x^2 - 1400*x + 800, x)
ans =
                  1
      - 5^(1/2) - 1
 - 17^(1/2)/2 - 1/2
   17^(1/2)/2 - 1/2
         -5*2^(1/2)
          5*2^(1/2)
        5^(1/2) - 1

Принять x является положительным числом и решить уравнение снова. solve функция возвращает только четыре положительных решения.

assume(x > 0)
solve(x^7 + 2*x^6 - 59*x^5 - 106*x^4 + 478*x^3 + 284*x^2 - 1400*x + 800, x)
ans =
                1
 17^(1/2)/2 - 1/2
        5*2^(1/2)
      5^(1/2) - 1

Разместите дополнительное предположение, что x - целое число с использованием in(x,'integer'). Размещение дополнительных допущений на переменных с использованием assumeAlso.

assumeAlso(in(x,'integer'))
solve(x^7 + 2*x^6 - 59*x^5 - 106*x^4 + 478*x^3 + 284*x^2 - 1400*x + 800, x)
ans =
1

solve возвращает единственное положительное, целочисленное решение для x.

Очистить допущения x для дальнейших вычислений путем его повторного создания с использованием syms.

syms x

В качестве альтернативы, чтобы сделать несколько допущений, используйте & оператор. Сделайте следующие предположения и решите следующие уравнения.

syms a b c f g h y
assume(f == c & a == h & a~= 0)
S = solve([a*x + b*y == c, h*x - g*y == f], [x, y], 'ReturnConditions', true);
S.x
S.y
S.conditions
ans =
f/h
ans =
0
ans =
b + g ~= 0

При указанных допущениях решение: x = f/h и y = 0 при условии b + g ~= 0.

Очистите допущения по переменным для дальнейших вычислений, повторно создав их с помощью syms.

syms a c f h

Упрощение решений

solve функция не вызывает функции упрощения для конечных результатов. Для упрощения решений позвоните по телефону simplify.

Решите следующее уравнение. Преобразование чисел в символьные с помощью sym для возврата символического результата.

syms x
S = solve((sin(x) - 2*cos(x))/(sin(x) + 2*cos(x)) == 1/2, x)
S =
 -log(-(- 140/37 + 48i/37)^(1/2)/2)*1i
  -log((- 140/37 + 48i/37)^(1/2)/2)*1i

Звонить simplify для упрощения решения S.

simplify(S)
ans =
        -log(37^(1/2)*(- 1/37 - 6i/37))*1i
 log(2)*1i - (log(- 140/37 + 48i/37)*1i)/2

Звонить simplify с дополнительными шагами, чтобы еще больше упростить результат.

simplify(S, 'Steps', 50)
ans =
 atan(6) - pi
      atan(6)

Совет

  • Чтобы точно представить число, используйте sym для преобразования числа в объект с плавающей запятой. Например, использовать sym(13)/5 вместо 13/5. Это представляет собой 13/5 точно вместо преобразования 13/5 в число с плавающей запятой. Для большого числа поместите число в кавычки. Выдержать сравнение sym(13)/5, sym(133333333333333333333)/5, и sym('133333333333333333333')/5.

    sym(13)/5
    sym(133333333333333333333)/5
    sym('133333333333333333333')/5
    ans =
    13/5
    ans =
    133333333333333327872/5
    ans =
    133333333333333333333/5

    Размещение числа в кавычках и использование sym обеспечивает высочайшую точность.

  • По возможности упростите систему уравнений вручную перед использованием solve. Попробуйте уменьшить число уравнений, параметров и переменных.