eqnproblem
방정식 문제 만들기
설명
eqnproblem
을 사용해 방정식 문제를 만듭니다.
팁
전체 워크플로는 방정식 풀이를 위한 문제 기반 워크플로 항목을 참조하십시오.
는 하나 이상의 이름-값 쌍 인수를 사용하여 추가 옵션을 지정합니다. 예를 들어, prob
= eqnproblem(Name,Value
)Equations
이름을 사용하여 문제를 생성할 때 방정식을 지정할 수 있습니다.
예제
문제 기반 접근법을 사용하여 비선형 연립방정식 풀기
문제 기반 접근법을 사용하여 다음과 같은 비선형 연립방정식을 풀려면
먼저 x
를 요소를 2개 가진 최적화 변수로 정의합니다.
x = optimvar('x',2);
첫 번째 방정식을 최적화 등식의 표현식으로 생성합니다.
eq1 = exp(-exp(-(x(1) + x(2)))) == x(2)*(1 + x(1)^2);
마찬가지로, 두 번째 방정식을 최적화 등식의 표현식으로 생성합니다.
eq2 = x(1)*cos(x(2)) + x(2)*sin(x(1)) == 1/2;
방정식 문제를 만들고, 방정식을 문제에 배치합니다.
prob = eqnproblem; prob.Equations.eq1 = eq1; prob.Equations.eq2 = eq2;
문제를 검토합니다.
show(prob)
EquationProblem : Solve for: x eq1: exp((-exp((-(x(1) + x(2)))))) == (x(2) .* (1 + x(1).^2)) eq2: ((x(1) .* cos(x(2))) + (x(2) .* sin(x(1)))) == 0.5
점 [0,0]
에서 시작하여 문제를 풉니다. 문제 기반 접근법에서는 초기점을 구조체로 지정하고 변수 이름을 구조체 필드로 사용합니다. 이 문제에는 변수가 x
하나만 있습니다.
x0.x = [0 0]; [sol,fval,exitflag] = solve(prob,x0)
Solving problem using fsolve. Equation solved. fsolve completed because the vector of function values is near zero as measured by the value of the function tolerance, and the problem appears regular as measured by the gradient.
sol = struct with fields:
x: [2x1 double]
fval = struct with fields:
eq1: -2.4070e-07
eq2: -3.8255e-08
exitflag = EquationSolved
해에 해당하는 점을 봅니다.
disp(sol.x)
0.3532 0.6061
지원되지 않는 함수는 fcn2optimexpr
을 필요로 함
방정식 함수가 기본 함수로 구성되지 않은 경우 fcn2optimexpr
을 사용하여 함수를 최적화 표현식으로 변환해야 합니다. 현재 예제의 경우 다음과 같습니다.
ls1 = fcn2optimexpr(@(x)exp(-exp(-(x(1)+x(2)))),x); eq1 = ls1 == x(2)*(1 + x(1)^2); ls2 = fcn2optimexpr(@(x)x(1)*cos(x(2))+x(2)*sin(x(1)),x); eq2 = ls2 == 1/2;
Supported Operations for Optimization Variables and Expressions 항목과 Convert Nonlinear Function to Optimization Expression 항목을 참조하십시오.
문제 기반 접근법을 사용하여 비선형 다항 연립방정식 풀기
x
가 2×2 행렬인 경우 다음 방정식
는 다항 연립방정식입니다. 여기서 은 행렬 곱셈을 이용한 를 의미합니다. 문제 기반 접근법을 사용하여 이 연립방정식을 쉽게 정식화하고 풀 수 있습니다.
먼저, 변수 x
를 2×2 행렬 변수로 정의합니다.
x = optimvar('x',2,2);
x
에 대해 풀려는 방정식을 정의합니다.
eqn = x^3 == [1 2;3 4];
이 방정식으로 방정식 문제를 만듭니다.
prob = eqnproblem('Equations',eqn);
점 [1 1;1 1]
에서 시작하여 문제를 풉니다.
x0.x = ones(2); sol = solve(prob,x0)
Solving problem using fsolve. Equation solved. fsolve completed because the vector of function values is near zero as measured by the value of the function tolerance, and the problem appears regular as measured by the gradient.
sol = struct with fields:
x: [2x2 double]
해를 검토합니다.
disp(sol.x)
-0.1291 0.8602 1.2903 1.1612
해의 세제곱을 표시합니다.
sol.x^3
ans = 2×2
1.0000 2.0000
3.0000 4.0000
입력 인수
이름-값 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN
으로 지정합니다. 여기서 Name
은 인수 이름이고 Value
는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name
을 따옴표로 묶으십시오.
예: prob = eqnproblem('Equations',eqn)
Equations
— 문제 방정식
[]
(디폴트 값) | OptimizationEquality
배열 | OptimizationEquality
배열을 필드로 갖는 구조체
문제 방정식으로, OptimizationEquality
배열 또는 OptimizationEquality
배열을 필드로 갖는 구조체로 지정됩니다.
예: sum(x.^2,2) == 4
Description
— 문제 레이블
''
(디폴트 값) | string형 | 문자형 벡터
문제 레이블로, string형 또는 문자형 벡터로 지정됩니다. Description
은 계산에 사용되지 않습니다. Description
은 사용자가 어떠한 이유로든 필요하면 사용할 수 있는 임의의 레이블입니다. 예를 들어, 모델이나 문제를 공유, 보관하거나 표현할 때 그 모델이나 문제를 설명하는 정보를 Description
에 저장할 수 있습니다.
예: "An iterative approach to the Traveling Salesman problem"
데이터형: char
| string
출력 인수
prob
— 방정식 문제
EquationProblem
객체
방정식 문제로, EquationProblem
객체로 반환됩니다. 일반적으로, 문제 설명을 완성하려면 prob.Equations
와 초기점 구조체(비선형 방정식의 경우)를 지정해야 합니다. 완성된 문제는 solve
를 호출하여 풉니다.
경고
문제 기반 접근법은 목적 함수, 비선형 등식, 비선형 부등식에서 복소수 값을 지원하지 않습니다. 함수 계산에 중간값으로라도 복소수 값이 포함될 경우, 최종 결과가 올바르지 않을 수 있습니다.
버전 내역
R2019b에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)