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
. Попытайтесь сократить количество уравнений, параметров и переменных.