Main Content

문제 기반 접근법을 사용하여 비선형 연립방정식 풀기

문제 기반 접근법을 사용하여 다음과 같은 비선형 연립방정식을 풀려면

exp(-exp(-(x1+x2)))=x2(1+x12)x1cos(x2)+x2sin(x1)=12

먼저 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 항목을 참조하십시오.

참고 항목

|

관련 항목