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