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')/5ans = 13/5 ans = 133333333333333327872/5 ans = 133333333333333333333/5
Размещение номера в кавычках и использование sym обеспечивают самую высокую точность.
Если возможно, упростите систему уравнений вручную перед использованием solve. Попытайтесь сократить количество уравнений, параметров и переменных.