lsqnonlin
비선형 최소제곱(비선형 데이터 피팅) 문제 풀기
구문
설명
비선형 최소제곱 솔버
다음 형식의 비선형 최소제곱 곡선 피팅 문제를 풉니다.
여기에는 다음 제약 조건이 적용됩니다.
x, lb
, ub
는 벡터 또는 행렬일 수 있습니다. 행렬 인수 항목을 참조하십시오.
목적 함수를 스칼라 값 (제곱합)로 지정하지 마십시오. lsqnonlin
에서는 목적 함수가 다음과 같은 벡터 값 함수여야 합니다.
은 점 x
= lsqnonlin(fun
,x0
)x0
에서 시작하여 fun
에 정의된 함수의 제곱합에 대한 최솟값을 구합니다. 함수 fun
은 값의 제곱합이 아니라 값으로 구성된 벡터(또는 배열)를 반환해야 합니다. 이 알고리즘은 fun(x)
의 성분에 대한 제곱합을 묵시적으로 계산합니다.
참고
추가 파라미터 전달하기에는 필요한 경우 추가 파라미터를 벡터 함수 fun(x)
에 전달하는 방법이 설명되어 있습니다.
예제
단순한 지수 감쇠 곡선을 데이터에 피팅합니다.
잡음이 추가된 지수 감쇠 모델에서 데이터를 생성합니다. 모델은 다음과 같습니다.
의 범위는 0부터 3까지이며 은 평균이 0이고 표준편차가 0.05인 정규분포된 잡음입니다.
rng default % for reproducibility d = linspace(0,3); y = exp(-1.3*d) + 0.05*randn(size(d));
문제: 데이터(d
, y
)가 주어진 경우 데이터를 최적으로 피팅하는 지수 감쇠율을 구합니다.
지수 감쇠율 을 받고 이 감쇠율을 갖는 모델과 데이터 간의 차이로 구성된 벡터를 반환하는 익명 함수를 만듭니다.
fun = @(r)exp(-d*r)-y;
최적의 감쇠율 값을 구합니다. 초기 추측값 x0
= 4를 임의로 선택합니다.
x0 = 4; x = lsqnonlin(fun,x0)
Local minimum possible. lsqnonlin stopped because the final change in the sum of squares relative to its initial value is less than the value of the function tolerance. <stopping criteria details>
x = 1.2645
데이터와 최적 피팅의 지수 곡선을 플로팅합니다.
plot(d,y,'ko',d,exp(-x*d),'b-') legend('Data','Best fit') xlabel('t') ylabel('exp(-tx)')
피팅 파라미터 중 일부에 범위가 있을 때의 최적의 피팅 모델을 구합니다.
다음 함수를 최적으로 피팅하는 중심화 와 스케일링 를 구합니다.
이때 피팅 대상은 다음과 같은 표준 정규 밀도입니다.
데이터 점으로 구성된 벡터 t
와 이러한 점에 대응하는 정규 밀도를 만듭니다.
t = linspace(-4,4); y = 1/sqrt(2*pi)*exp(-t.^2/2);
x(1)
을 스케일링 로 사용하고 x(2)
를 중심화 로 사용하여 정규분포 y
와 정규화된 함수 사이의 차이를 계산하는 함수를 만듭니다.
fun = @(x)x(1)*exp(-t).*exp(-exp(-(t-x(2)))) - y;
x0
= [1/2,0]
에서 시작하고 1/2과 3/2 사이의 스케일링 를 사용하고 -1과 3 사이의 중심화 를 사용하여 최적의 피팅을 구합니다.
lb = [1/2,-1]; ub = [3/2,3]; x0 = [1/2,0]; x = lsqnonlin(fun,x0,lb,ub)
Local minimum possible. lsqnonlin stopped because the final change in the sum of squares relative to its initial value is less than the value of the function tolerance. <stopping criteria details>
x = 1×2
0.8231 -0.2444
두 함수를 플로팅하여 피팅의 품질을 확인합니다.
plot(t,y,'r-',t,fun(x)+y,'b-') xlabel('t') legend('Normal density','Fitted function')
다음과 같이 제곱합이 있는 목적 함수를 살펴보겠습니다.
이 목적 함수 코드는 이 예제의 마지막 부분에 있는 myfun
함수에 나와 있습니다.
선형 제약 조건 를 적용하여 이 함수를 최소화합니다. 이 제약 조건을 으로 작성합니다.
A = [1 -1/2]; b = 0;
범위 , , , 를 적용합니다.
lb = [0 0]; ub = [2 4];
점 x0 = [0.3 0.4]
에서 최적화 과정을 시작합니다.
x0 = [0.3 0.4];
문제에 선형 등식 제약 조건이 없습니다.
Aeq = []; beq = [];
최적화를 실행합니다.
x = lsqnonlin(@myfun,x0,lb,ub,A,b,Aeq,beq)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. <stopping criteria details>
x = 1×2
0.1695 0.3389
function F = myfun(x) k = 1:10; F = 2 + 2*k - exp(k*x(1)) - 2*exp(2*k*(x(2)^2)); end
다음과 같이 제곱합이 있는 목적 함수를 살펴보겠습니다.
이 목적 함수 코드는 이 예제의 마지막 부분에 있는 myfun
함수에 나와 있습니다.
비선형 제약 조건 를 적용하여 이 함수를 최소화합니다. 이 비선형 제약 조건 함수 코드는 이 예제의 마지막 부분에 있는 nlcon
함수에 나와 있습니다.
범위 , , , 를 적용합니다.
lb = [0 0]; ub = [2 4];
점 x0 = [0.3 0.4]
에서 최적화 과정을 시작합니다.
x0 = [0.3 0.4];
문제에 선형 제약 조건이 없습니다.
A = []; b = []; Aeq = []; beq = [];
최적화를 실행합니다.
x = lsqnonlin(@myfun,x0,lb,ub,A,b,Aeq,beq,@nlcon)
Local minimum possible. Constraints satisfied. fmincon stopped because the size of the current step is less than the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance. <stopping criteria details>
x = 1×2
0.2133 0.3266
function F = myfun(x) k = 1:10; F = 2 + 2*k - exp(k*x(1)) - 2*exp(2*k*(x(2)^2)); end function [c,ceq] = nlcon(x) ceq = []; c = sin(x(1)) - cos(x(2)); end
데이터 피팅 문제에서 다른 lsqnonlin
알고리즘을 사용할 때의 결과를 비교합니다.
관측 시간 데이터 xdata
와 관측된 응답 변수 데이터 ydata
가 있고 파라미터 및 를 찾아 다음 형식의 모델을 피팅하기를 원한다고 가정하겠습니다.
관측 시간과 응답 변수를 입력합니다.
xdata = ... [0.9 1.5 13.8 19.8 24.1 28.2 35.2 60.3 74.6 81.3]; ydata = ... [455.2 428.6 124.1 67.3 43.2 28.1 13.1 -0.4 -1.3 -1.5];
단순한 지수 감쇠 모델을 만듭니다. 이 모델은 예측값과 관측값 사이의 차이로 구성된 벡터를 계산합니다.
fun = @(x)x(1)*exp(x(2)*xdata)-ydata;
시작점 x0 = [100,-1]
을 사용하여 모델을 피팅합니다. 먼저, 디폴트 'trust-region-reflective'
알고리즘을 사용합니다.
x0 = [100,-1]; options = optimoptions(@lsqnonlin,'Algorithm','trust-region-reflective'); x = lsqnonlin(fun,x0,[],[],options)
Local minimum possible. lsqnonlin stopped because the final change in the sum of squares relative to its initial value is less than the value of the function tolerance. <stopping criteria details>
x = 1×2
498.8309 -0.1013
'levenberg-marquardt'
알고리즘을 사용하여 차이가 있는지 확인합니다.
options.Algorithm = 'levenberg-marquardt';
x = lsqnonlin(fun,x0,[],[],options)
Local minimum possible. lsqnonlin stopped because the relative size of the current step is less than the value of the step size tolerance. <stopping criteria details>
x = 1×2
498.8309 -0.1013
두 알고리즘이 모두 같은 해를 찾았습니다. 해와 데이터를 플로팅합니다.
plot(xdata,ydata,'ko') hold on tlist = linspace(xdata(1),xdata(end)); plot(tlist,x(1)*exp(x(2)*tlist),'b-') xlabel xdata ylabel ydata title('Exponential Fit to Data') legend('Data','Exponential Fit') hold off
다음을 최소화하는 를 구하고
,
최소 제곱합의 값을 구합니다.
lsqnonlin
은 제곱합이 사용자 정의 함수에서 명시적으로 구성되지 않는다고 가정하기 때문에 lsqnonlin
에 전달되는 함수는 대신 다음과 같은 벡터 값을 갖는 함수를 계산해야 합니다.
,
여기서 은 입니다(즉, 는 개의 성분을 가져야 함).
10개 성분을 갖는 벡터 F를 계산하는 myfun
함수는 이 예제의 마지막 부분에 나와 있습니다.
점 x0 = [0.3,0.4]
에서 시작하여 최솟점과 최솟값을 구합니다.
x0 = [0.3,0.4]; [x,resnorm] = lsqnonlin(@myfun,x0)
Local minimum possible. lsqnonlin stopped because the size of the current step is less than the value of the step size tolerance. <stopping criteria details>
x = 1×2
0.2578 0.2578
resnorm = 124.3622
resnorm
출력값은 함수 값의 제곱합이며, 잔차 노름의 제곱입니다.
다음 함수는 벡터 값을 갖는 목적 함수를 계산합니다.
function F = myfun(x) k = 1:10; F = 2 + 2*k-exp(k*x(1))-exp(k*x(2)); end
수행 당시(Display
옵션을 'iter'
로 설정함)와 그 이후(output
구조체를 검토함) 모두에 대해 풀이 과정을 검토합니다.
관측 시간 데이터 xdata
와 관측된 응답 변수 데이터 ydata
가 있고 파라미터 및 를 찾아 다음 형식의 모델을 피팅하기를 원한다고 가정하겠습니다.
관측 시간과 응답 변수를 입력합니다.
xdata = ... [0.9 1.5 13.8 19.8 24.1 28.2 35.2 60.3 74.6 81.3]; ydata = ... [455.2 428.6 124.1 67.3 43.2 28.1 13.1 -0.4 -1.3 -1.5];
단순한 지수 감쇠 모델을 만듭니다. 이 모델은 예측값과 관측값 사이의 차이로 구성된 벡터를 계산합니다.
fun = @(x)x(1)*exp(x(2)*xdata)-ydata;
시작점 x0 = [100,-1]
을 사용하여 모델을 피팅합니다. Display
옵션을 'iter'
로 설정하여 풀이 과정을 검토합니다. 풀이 과정에 대한 자세한 정보를 얻기 위해 output
구조체를 가져옵니다.
x0 = [100,-1]; options = optimoptions('lsqnonlin','Display','iter'); [x,resnorm,residual,exitflag,output] = lsqnonlin(fun,x0,[],[],options);
Norm of First-order Iteration Func-count Resnorm step optimality 0 3 359677 2.88e+04 Objective function returned Inf; trying a new point... 1 6 359677 11.6976 2.88e+04 2 9 321395 0.5 4.97e+04 3 12 321395 1 4.97e+04 4 15 292253 0.25 7.06e+04 5 18 292253 0.5 7.06e+04 6 21 270350 0.125 1.15e+05 7 24 270350 0.25 1.15e+05 8 27 252777 0.0625 1.63e+05 9 30 252777 0.125 1.63e+05 10 33 243877 0.03125 7.48e+04 11 36 243660 0.0625 8.7e+04 12 39 243276 0.0625 2e+04 13 42 243174 0.0625 1.14e+04 14 45 242999 0.125 5.1e+03 15 48 242661 0.25 2.04e+03 16 51 241987 0.5 1.91e+03 17 54 240643 1 1.04e+03 18 57 237971 2 3.36e+03 19 60 232686 4 6.04e+03 20 63 222354 8 1.2e+04 21 66 202592 16 2.25e+04 22 69 166443 32 4.05e+04 23 72 106320 64 6.68e+04 24 75 28704.7 128 8.31e+04 25 78 89.7947 140.674 2.22e+04 26 81 9.57381 2.02599 684 27 84 9.50489 0.0619927 2.27 28 87 9.50489 0.000462261 0.0114 Local minimum possible. lsqnonlin stopped because the final change in the sum of squares relative to its initial value is less than the value of the function tolerance. <stopping criteria details>
output 구조체를 검토하여 풀이 과정에 대한 자세한 정보를 얻습니다.
output
output = struct with fields:
firstorderopt: 0.0114
iterations: 28
funcCount: 87
cgiterations: 0
algorithm: 'trust-region-reflective'
stepsize: 4.6226e-04
message: 'Local minimum possible.↵↵lsqnonlin stopped because the final change in the sum of squares relative to ↵its initial value is less than the value of the function tolerance.↵↵<stopping criteria details>↵↵Optimization stopped because the relative sum of squares (r) is changing↵by less than options.FunctionTolerance = 1.000000e-06.'
bestfeasible: []
constrviolation: []
비교를 위해, Algorithm
옵션을 'levenberg-marquardt'
로 설정합니다.
options.Algorithm = 'levenberg-marquardt';
[x,resnorm,residual,exitflag,output] = lsqnonlin(fun,x0,[],[],options);
First-order Norm of Iteration Func-count Resnorm optimality Lambda step 0 3 359677 2.88e+04 0.01 Objective function returned Inf; trying a new point... 1 13 340761 3.91e+04 100000 0.280777 2 16 304661 5.97e+04 10000 0.373146 3 21 297292 6.55e+04 1e+06 0.0589933 4 24 288240 7.57e+04 100000 0.0645444 5 28 275407 1.01e+05 1e+06 0.0741266 6 31 249954 1.62e+05 100000 0.094571 7 36 245896 1.35e+05 1e+07 0.0133606 8 39 243846 7.26e+04 1e+06 0.0094431 9 42 243568 5.66e+04 100000 0.0082162 10 45 243424 1.61e+04 10000 0.00777935 11 48 243322 8.8e+03 1000 0.0673933 12 51 242408 5.1e+03 100 0.675209 13 54 233628 1.05e+04 10 6.59804 14 57 169089 8.51e+04 1 54.6992 15 60 30814.7 1.54e+05 0.1 196.939 16 63 147.496 8e+03 0.01 129.795 17 66 9.51503 117 0.001 9.96069 18 69 9.50489 0.0714 0.0001 0.080486 19 72 9.50489 5.23e-05 1e-05 5.07043e-05 Local minimum possible. lsqnonlin stopped because the relative size of the current step is less than the value of the step size tolerance. <stopping criteria details>
'levenberg-marquardt'
는 반복 횟수는 더 적지만 함수 실행 횟수는 거의 같은 수준에서 수렴되었습니다.
output
output = struct with fields:
iterations: 19
funcCount: 72
stepsize: 5.0704e-05
cgiterations: []
firstorderopt: 5.2319e-05
algorithm: 'levenberg-marquardt'
message: 'Local minimum possible.↵lsqnonlin stopped because the relative size of the current step is less than↵the value of the step size tolerance.↵↵<stopping criteria details>↵↵Optimization stopped because the relative norm of the current step, 1.016463e-07,↵is less than options.StepTolerance = 1.000000e-06.'
bestfeasible: []
constrviolation: []
입력 인수
제곱합이 최소화되는 함수로, 함수 핸들 또는 함수의 이름으로 지정됩니다. 'interior-point'
알고리즘의 경우, fun
은 함수 핸들이어야 합니다. fun
은 배열 x
를 받고 배열 F
(x
에서 실행된 목적 함수)를 반환하는 함수입니다.
참고
제곱합을 명시적으로 구성해서는 안 됩니다. 대신, 사용자의 함수가 함수 값으로 구성된 벡터를 반환해야 합니다. 예제 항목을 참조하십시오.
함수 fun
은 다음과 같이 파일에 대한 파일 핸들로 지정할 수 있습니다.
x = lsqnonlin(@myfun,x0)
여기서 myfun
은 다음과 같은 MATLAB® 함수입니다.
function F = myfun(x) F = ... % Compute function values at x
fun
을 익명 함수에 대한 함수 핸들로 지정할 수도 있습니다.
x = lsqnonlin(@(x)sin(x.*x),x0);
lsqnonlin
함수는 x
를 x0
인수 형태로 목적 함수에 전달합니다. 예를 들어, x0
이 5×3 배열이면 lsqnonlin
함수는 x
를 5×3 배열로 fun
에 전달합니다.
야코비 행렬도 계산할 수 있고 'SpecifyObjectiveGradient'
옵션이 다음 설정처럼 true
인 경우
options = optimoptions('lsqnonlin','SpecifyObjectiveGradient',true)
함수 fun
은 x
에서 계산된 야코비 행렬 값 J
(행렬)로 두 번째 출력 인수를 반환해야 합니다. 함수는 nargout
의 값을 확인함으로써 fun
이 하나의 출력 인수만 사용하여 호출되는 경우(이 경우 최적화 알고리즘에는 J
가 아니라 F
의 값만 필요함) J
계산을 피할 수 있습니다.
function [F,J] = myfun(x) F = ... % Objective function values at x if nargout > 1 % Two output arguments J = ... % Jacobian of the function evaluated at x end
fun
이 m
개 성분으로 구성된 배열을 반환하고 x
가 n
개 요소를 가지는 경우(여기서 n
은 x0
의 요소 개수임), 야코비 행렬 J
는 m
×n
행렬입니다. 여기서 J(i,j)
는 x(j)
에 대한 F(i)
의 편도함수입니다. 야코비 행렬 J
는 F
의 기울기의 전치입니다.
예: @(x)cos(x).*exp(-x)
데이터형: char
| function_handle
| string
초기점으로, 실수형 벡터나 실수형 배열로 지정됩니다. 솔버는 x0
의 요소 개수와 x0
의 크기를 사용하여 fun
이 받는 변수의 개수와 크기를 확인합니다.
예: x0 = [1,2,3,4]
데이터형: double
하한으로, 실수형 벡터나 실수형 배열로 지정됩니다. x0
의 요소 개수가 lb
의 요소 개수와 같은 경우 lb
는 다음을 지정합니다.
모든 i
에 대해 x(i) >= lb(i)
numel(lb) < numel(x0)
이면 lb
는 다음을 지정합니다.
1 <= i <= numel(lb)
x(i) >= lb(i)
.
lb
의 요소 개수가 x0
의 요소 개수보다 적으면 솔버가 경고를 발생시킵니다.
예: 모든 x 성분이 양수가 되도록 지정하려면 lb = zeros(size(x0))
을 사용하십시오.
데이터형: single
| double
상한으로, 실수형 벡터나 실수형 배열로 지정됩니다. x0
의 요소 개수가 ub
의 요소 개수와 같은 경우 ub
는 다음을 지정합니다.
모든 i
에 대해 x(i) <= ub(i)
.
numel(ub) < numel(x0)
이면 ub
는 다음을 지정합니다.
1 <= i <= numel(ub)
x(i) <= ub(i)
ub
의 요소 개수가 x0
의 요소 개수보다 적으면 솔버가 경고를 발생시킵니다.
예: 모든 x 성분이 1보다 작도록 지정하려면 ub = ones(size(x0))
을 사용하십시오.
데이터형: single
| double
선형 부등식 제약 조건으로, 실수 행렬로 지정됩니다. A
는 M
×N
행렬입니다. 여기서 M
은 부등식 개수이고 N
은 변수 개수(x0
의 요소 개수)입니다. 희소 형식 데이터를 지원하는 알고리즘을 사용하는 대규모 문제의 경우, A
를 희소 행렬로 전달하십시오. 최적화 알고리즘의 희소성 항목을 참조하십시오.
A
는 다음과 같이 M
개의 선형 부등식을 인코딩합니다.
A*x <= b
,
여기서 x
는 N
개의 변수 x(:)
으로 구성된 열 벡터이고, b
는 M
개의 요소를 갖는 열 벡터입니다.
예를 들어, 다음 부등식을 살펴보겠습니다.
x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,
다음 제약 조건을 입력하여 부등식을 지정합니다.
A = [1,2;3,4;5,6]; b = [10;20;30];
예: x 성분의 합이 1 이하가 되도록 지정하려면 A = ones(1,N)
및 b = 1
을 사용하십시오.
데이터형: single
| double
선형 부등식 제약 조건으로, 실수 벡터로 지정됩니다. b
는 A
행렬과 관련된, 요소를 M
개 가진 벡터입니다. b
를 행 벡터로 전달하면 솔버는 내부적으로 b
를 열 벡터 b(:)
으로 변환합니다.
b
는 다음과 같이 M
개의 선형 부등식을 인코딩합니다.
A*x <= b
,
여기서 x
는 N
개의 변수 x(:)
으로 구성된 열 벡터이고, A
는 크기가 M
×N
인 행렬입니다.
예를 들어, 다음 부등식을 살펴보겠습니다.
x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30.
다음 제약 조건을 입력하여 부등식을 지정합니다.
A = [1,2;3,4;5,6]; b = [10;20;30];
예: x 성분의 합이 1 이하가 되도록 지정하려면 A = ones(1,N)
및 b = 1
을 사용하십시오.
데이터형: single
| double
선형 등식 제약 조건으로, 실수 행렬로 지정됩니다. Aeq
는 Me
×N
행렬입니다. 여기서 Me
는 부등식 개수이고 N
은 변수 개수(x0
의 요소 개수)입니다. 희소 형식 데이터를 지원하는 알고리즘을 사용하는 대규모 문제의 경우, A
를 희소 행렬로 전달하십시오. 최적화 알고리즘의 희소성 항목을 참조하십시오.
Aeq
는 다음과 같이 Me
개의 선형 등식을 인코딩합니다.
Aeq*x = beq
,
여기서 x
는 N
개의 변수 x(:)
으로 구성된 열 벡터이고, beq
는 Me
개의 요소를 갖는 열 벡터입니다.
예를 들어, 다음 부등식을 살펴보겠습니다.
x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20,
다음 제약 조건을 입력하여 부등식을 지정합니다.
Aeq = [1,2,3;2,4,1]; beq = [10;20];
예: x 성분의 합이 1이 되도록 지정하려면 Aeq = ones(1,N)
및 beq = 1
을 사용하십시오.
데이터형: single
| double
선형 등식 제약 조건으로, 실수 벡터로 지정됩니다. beq
는 Aeq
행렬과 관련된, 요소를 Me
개 가진 벡터입니다. beq
를 행 벡터로 전달하면 솔버는 내부적으로 beq
를 열 벡터 beq(:)
으로 변환합니다.
beq
는 다음과 같이 Me
개의 선형 등식을 인코딩합니다.
Aeq*x = beq
,
여기서 x
는 N
개의 변수 x(:)
으로 구성된 열 벡터이고, Aeq
는 크기가 Me
×N
인 행렬입니다.
예를 들어, 다음 등식을 살펴보겠습니다.
x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20.
다음 제약 조건을 입력하여 등식을 지정합니다.
Aeq = [1,2,3;2,4,1]; beq = [10;20];
예: x 성분의 합이 1이 되도록 지정하려면 Aeq = ones(1,N)
및 beq = 1
을 사용하십시오.
데이터형: single
| double
비선형 제약 조건으로, 함수 핸들로 지정됩니다. nonlcon
은 벡터 또는 배열 x
를 받고 두 개의 배열 c(x)
와 ceq(x)
를 반환하는 함수입니다.
c(x)
는x
의 비선형 부등식 제약 조건으로 구성된 배열입니다.lsqnonlin
은 다음을 충족하려고 시도합니다.모든 c
요소에 대해c(x) <= 0
.(1) ceq(x)
는x
의 비선형 등식 제약 조건으로 구성된 배열입니다.lsqnonlin
은 다음을 충족하려고 시도합니다.모든 ceq
요소에 대해ceq(x) = 0
.(2)
예를 들면 다음과 같습니다.
x = lsqnonlin(@myfun,x0,lb,ub,A,b,Aeq,beq,@mycon,options)
여기서 mycon
은 다음과 같은 MATLAB 함수입니다.
function [c,ceq] = mycon(x) c = ... % Compute nonlinear inequalities at x. ceq = ... % Compute nonlinear equalities at x.
SpecifyConstraintGradient
옵션이 true
인 경우options = optimoptions('lsqnonlin','SpecifyConstraintGradient',true)
nonlcon
은 세 번째 출력 인수와 네 번째 출력 인수로 c(x)
의 야코비 행렬 GC
와 ceq(x)
의 야코비 행렬 GCeq
도 반환해야 합니다. 벡터 함수 F(x)의 야코비 행렬 G(x)는 다음과 같습니다.GC
와 GCeq
는 희소 행렬 또는 조밀 행렬일 수 있습니다. GC
또는 GCeq
가 대규모이고 0이 아닌 요소가 상대적으로 적은 경우 이러한 요소를 희소 행렬로 나타내면 'interior-point'
알고리즘에서 실행 시간과 메모리를 절약할 수 있습니다. 자세한 내용은 비선형 제약 조건 항목을 참조하십시오.
데이터형: function_handle
최적화 옵션으로, optimoptions
의 출력값 또는 optimset
등이 반환하는 구조체로 지정됩니다.
옵션에 따라 모든 알고리즘에 적용되는 옵션이 있고 특정 알고리즘에만 유효한 옵션이 있습니다. 자세한 내용은 최적화 옵션 참조 항목을 참조하십시오.
일부 옵션은 optimoptions
표시에 나타나지 않습니다. 이러한 옵션은 다음 표에서 기울임꼴로 표시되어 있습니다. 자세한 내용은 최적화 옵션 보기 항목을 참조하십시오.
모든 알고리즘 | |
|
알고리즘을 선택하는 방법에 대한 자세한 내용은 알고리즘 선택하기 항목을 참조하십시오. |
CheckGradients | 사용자 제공 도함수(목적 함수 또는 제약 조건의 기울기)를 유한 차분 도함수와 비교합니다.
|
Diagnostics | 최소화하거나 풀려는 함수에 대한 진단 정보를 표시합니다. |
DiffMaxChange | 유한 차분 기울기에 대한 변수의 최대 변화량입니다(양의 스칼라). 디폴트 값은 |
DiffMinChange | 유한 차분 기울기에 대한 변수의 최소 변화량입니다(양의 스칼라). 디폴트 값은 |
| 표시 수준입니다(반복 과정 표시 참조):
|
FiniteDifferenceStepSize | 유한 차분에 대한 스칼라 또는 벡터 스텝 크기 인자입니다.
sign′(x) = sign(x) 입니다(단, sign′(0) = 1 임). 중심 유한 차분은 다음과 같습니다.
FiniteDifferenceStepSize 는 벡터로 확장됩니다. 디폴트 값은 전향 유한 차분의 경우 sqrt(eps) 이고 중심 유한 차분의 경우 eps^(1/3) 입니다.
|
FiniteDifferenceType | 기울기를 추정하는 데 사용되는 유한 차분으로, 알고리즘은 두 유형의 유한 차분을 모두 추정하는 경우 범위를 준수하려고 노력합니다. 예를 들어, 범위 외부에 있는 점에서 실행되는 것을 방지하기 위해 전향 차분이 아니라 후향 차분을 사용할 수 있습니다.
|
| 함수 값에 대한 종료 허용오차로, 음이 아닌 스칼라입니다. 디폴트 값은
|
FunValCheck | 함수 값이 유효한지 여부를 확인합니다. |
| 허용되는 함수 실행의 최대 횟수로, 음이 아닌 정수입니다. 디폴트 값은
|
| 허용되는 최대 반복 횟수로, 음이 아닌 정수입니다. 디폴트 값은
|
OptimalityTolerance | 1차 최적성에 대한 종료 허용오차(음이 아닌 스칼라)입니다. 디폴트 값은 내부적으로,
|
OutputFcn | 각 반복마다 최적화 함수가 호출하는 하나 이상의 사용자 정의 함수를 지정합니다. 함수 핸들 또는 함수 핸들 셀형 배열을 전달합니다. 디폴트 값은 없음( |
| 알고리즘이 실행되는 동안 다양한 진행률 측정값을 플로팅합니다. 미리 정의된 플롯에서 선택하거나 사용자가 직접 작성할 수 있습니다. 이름, 함수 핸들 또는 이름이나 함수 핸들로 구성된 셀형 배열을 전달합니다. 사용자 지정 플롯 함수의 경우, 함수 핸들을 전달하십시오. 디폴트 값은 없음(
사용자 지정 플롯 함수는 출력 함수와 동일한 구문을 사용합니다. Optimization Toolbox의 출력 함수 항목과 Output Function and Plot Function Syntax 항목을 참조하십시오.
|
SpecifyObjectiveGradient |
|
|
|
| 일반적인 |
UseParallel |
|
Trust-Region-Reflective 알고리즘 | |
JacobianMultiplyFcn | 야코비 행렬의 곱셈 함수로, 함수 핸들로 지정됩니다. 특정 구조를 가진 대규모 문제의 경우, 이 함수는 W = jmfun(Jinfo,Y,flag) 여기서 W = jmfun(Jinfo,Y,flag,xdata) 여기서 데이터 [F,Jinfo] = fun(x)
% or [F,Jinfo] = fun(x,xdata)
어느 경우든 참고 솔버가 이와 유사한 예제를 보려면 Minimization with Dense Structured Hessian, Linear Equalities 항목과 Jacobian Multiply Function with Linear Least Squares 항목을 참조하십시오.
|
JacobPattern | 유한 차분을 위한 야코비 행렬의 희소성 패턴입니다.
구조를 알 수 없는 경우 |
MaxPCGIter | 최대 PCG(선조건 적용 켤레 기울기) 반복 횟수로, 양의 스칼라입니다. 디폴트 값은 |
PrecondBandWidth | PCG에 대한 선조건자의 상부 대역폭으로, 음이 아닌 정수입니다. 디폴트 값 |
SubproblemAlgorithm | 반복 스텝이 계산되는 방식을 결정합니다. 디폴트 값 |
TolPCG | PCG 반복에 대한 종료 허용오차로, 양의 스칼라입니다. 디폴트 값은 |
Levenberg-Marquardt 알고리즘 | |
InitDamping | Levenberg-Marquardt 파라미터의 초기값으로, 양의 스칼라입니다. 디폴트 값은 |
ScaleProblem |
|
Interior-Point 알고리즘 | |
BarrierParamUpdate |
이 옵션은 솔버의 속도와 수렴에 영향을 줄 수 있지만, 그 영향을 예측하기가 쉽지 않습니다. |
ConstraintTolerance | 제약 조건 위반에 대한 허용오차로, 음이 아닌 스칼라입니다. 디폴트 값은
|
InitBarrierParam | 초기 장벽 값으로, 양의 스칼라입니다. 경우에 따라 디폴트 값 |
SpecifyConstraintGradient | 사용자가 정의하는 비선형 제약 조건 함수의 기울기입니다. 디폴트 값
|
SubproblemAlgorithm | 반복 스텝이 계산되는 방식을 결정합니다. 디폴트 값
|
예: options = optimoptions('lsqnonlin','FiniteDifferenceType','central')
문제 구조체로, 다음 필드를 가진 구조체로 지정됩니다.
필드 이름 | 항목 |
---|---|
| 목적 함수 |
| x 의 초기점 |
| 선형 부등식 제약 조건에 대한 행렬 |
| 선형 부등식 제약 조건에 대한 벡터 |
| 선형 등식 제약 조건에 대한 행렬 |
| 선형 등식 제약 조건에 대한 벡터 |
lb | 하한으로 구성된 벡터 |
ub | 상한으로 구성된 벡터 |
| 비선형 제약 조건 함수 |
| 'lsqnonlin' |
| optimoptions 로 생성되는 옵션 |
problem
구조체에 적어도 objective
, x0
, solver
, options
필드는 반드시 제공해야 합니다.
데이터형: struct
출력 인수
해로, 실수형 벡터나 실수형 배열로 반환됩니다. x
의 크기는 x0
의 크기와 같습니다. 일반적으로 x
는 exitflag
가 양수인 경우 문제에 대한 국소해입니다. 해의 품질에 대한 자세한 내용은 솔버가 성공한 경우 항목을 참조하십시오.
잔차에 대한 노름의 제곱으로, 음이 아닌 실수로 반환됩니다. resnorm
은 x
에서 계산된 잔차에 대한 2-노름의 제곱(sum(fun(x).^2)
)입니다.
해에서 계산된 목적 함수의 값으로, 배열로 반환됩니다. 일반적으로, residual = fun(x)
입니다.
솔버가 중지된 이유로, 정수로 반환됩니다.
| 함수가 해 |
|
|
| 잔차의 변화량이 지정된 허용오차보다 작습니다. |
| 탐색 방향의 상대 크기가 스텝 허용오차보다 작습니다. |
| 반복 횟수가 |
| 플롯 함수 또는 출력 함수가 솔버를 중지했습니다. |
| 실현가능점을 찾지 못했습니다. 범위 |
최적화 과정에 대한 정보로, 다음 필드를 가진 구조체로 반환됩니다.
firstorderopt | 1차 최적성에 대한 측정값 |
iterations | 수행된 반복 횟수 |
funcCount | 함수 실행 횟수 |
cgiterations | 총 PCG 반복 횟수( |
stepsize |
|
constrviolation | 제약 조건 함수의 최댓값( |
bestfeasible | 최상의(가장 낮은 목적 함수) 실현가능점을 발견함(
실현가능점을 찾지 못한 경우
|
algorithm | 사용된 최적화 알고리즘 |
message | 종료 메시지 |
해에서 계산된 야코비 행렬로, 실수형 행렬로 반환됩니다. jacobian(i,j)
는 해 x
에서 계산된 x(j)
에 대한 fun(i)
의 편도함수입니다.
해에서 활성 제약 조건이 있는 문제의 경우 jacobian
은 신뢰구간을 추정하는 데 유용하지 않습니다.
제한 사항
trust-region-reflective 알고리즘은 부족 결정 시스템을 풀지 않습니다. 이 알고리즘을 사용하려면 방정식 개수, 즉 F의 행 차원이 최소한 변수 개수여야 합니다. 부족 결정 시스템의 경우
lsqnonlin
은 Levenberg-Marquardt 알고리즘을 사용합니다.lsqnonlin
은 복소수 값을 갖는 문제를 직접 풀 수 있습니다. 제약 조건은 복소수 값에 적합하지 않다는 점에 유의하십시오. 복소수는 순서대로 정렬될 수 없기 때문에 한 복소수 값이 다른 복소수 값보다 크거나 작은지 여부를 요구하는 것은 무의미합니다. 범위 제약 조건이 있는 복소수 문제의 경우 변수를 실수부와 허수부로 분리하십시오. 복소수 데이터로'interior-point'
알고리즘을 사용하지 마십시오. 복소수 값 데이터에 모델 피팅하기 항목을 참조하십시오.trust-region-reflective 방법의 선조건 적용 켤레 기울기 부분에 사용되는 선조건자 계산은 선조건자를 계산하기 전에 JTJ(여기서 J는 야코비 행렬임)를 형성합니다. 따라서, 0이 아닌 요소를 많이 포함하는 J의 행은 거의 조밀한 곱 JTJ를 생성하며, 이는 대규모 문제에서 비용이 많이 드는 풀이 과정을 초래할 수 있습니다.
x의 성분에 상한(또는 하한)이 없는 경우
lsqnonlin
은 기본적으로ub
(또는lb
)의 대응하는 성분을 임의적이지만 매우 큰 양수(또는 하한의 경우 음수)로 설정하는 대신inf
(또는 하한의 경우-inf
)로 설정합니다.
중소 규모 문제에서는 fun
에서 야코비 행렬을 계산하거나 야코비 행렬의 희소성 패턴을 제공하지 않고 lsqnonlin
, lsqcurvefit
, fsolve
에 trust-region reflective 알고리즘을 사용할 수 있습니다. 이는 헤세 행렬을 계산하거나 헤세 행렬의 희소성 패턴을 제공하지 않고 fmincon
또는 fminunc
를 사용하는 경우에도 적용됩니다. 중소 규모는 얼마나 작은가요? 절대적인 답은 없습니다. 컴퓨터 시스템 구성의 가상 메모리 크기에 따라 달라지기 때문입니다.
문제에 m
개의 방정식과 n
개의 미지수가 있다고 가정하겠습니다. 명령 J = sparse(ones(m,n))
을 실행할 때 컴퓨터에 Out of memory
오류가 발생한다면 이 문제는 확실히 너무 큰 문제입니다. 오류가 발생하지 않은 경우에도 여전히 너무 큰 문제일 수 있습니다. 이를 확인할 수 있는 유일한 방법은 문제를 실행하고 MATLAB이 시스템에서 사용할 수 있는 가상 메모리 크기 내에서 실행되는지 확인하는 것입니다.
세부 정보
다음 몇 가지 항목은 lsqnonlin
에서 반환될 수 있는 향상된 종료 메시지를 나열한 것입니다. 향상된 종료 메시지에는 자세한 정보를 볼 수 있는 링크가 메시지의 첫 문장으로 제공됩니다.
1차 최적성 측정값이 0에 가까우므로 솔버가 제곱합의 국소 최솟값으로 보이는 점을 찾았습니다.
진행 방법에 대한 제안 사항은 솔버가 성공한 경우 항목을 참조하십시오.
솔버가 국소 최솟값에 도달했을 수 있지만 1차 최적성 측정값이 OptimalityTolerance 허용오차(Levenberg-Marquardt 알고리즘에 대한 1e-4*OptimalityTolerance
)보다 작지 않기 때문에 확실하지 않을 수 있습니다.
진행 방법에 대한 제안 사항은 국소 최솟값일 수 있음 항목을 참조하십시오.
1차 최적성 측정값이 0에 가깝기 때문에 초기점이 제곱합의 국소 최솟값인 것으로 보입니다.
진행 방법에 대한 제안 사항은 최종점과 초기점이 동일함 항목을 참조하십시오.
다음 몇 가지 항목은 lsqnonlin
종료 메시지에 나오는 용어에 대한 정의를 포함합니다.
함수의 국소 최솟값이란 함수 값이 인근 점에서보다는 더 작지만 멀리 있는 점에서보다는 더 클 수 있는 점을 말합니다.
전역 최솟값이란 함수 값이 다른 모든 실현가능점에서보다 작은 점을 말합니다.
솔버는 국소 최솟값을 구하려고 합니다. 그 결과는 전역 최솟값일 수 있습니다. 자세한 내용은 국소 최적해와 전역 최적해 항목을 참조하십시오.
제약 조건이 없는 문제의 경우 1차 최적성 측정값은 기울기 벡터 성분의 절댓값의 최댓값입니다(기울기의 무한대 노름이라고도 함). 이 값은 최소화 점에서 0이어야 합니다.
범위를 갖는 문제의 경우 1차 최적성 측정값은 i에 대해 |vi*gi|의 최댓값입니다. 여기서 gi는 기울기의 i번째 성분이고, x는 현재 점이며, 다음과 같습니다.
xi가 경계에 있는 경우, vi는 0입니다. xi가 경계에 있지 않는 경우 최소화 점에서 기울기 gi는 0이어야 합니다. 따라서 1차 최적성 측정값은 최소화 점에서 0이어야 합니다.
자세한 내용은 1차 최적성 측정값 항목을 참조하십시오.
일반적으로, 허용오차는 이 값을 넘는 경우 솔버의 반복이 중지되는 임계값입니다. 허용오차에 대한 자세한 내용은 허용오차와 중지 기준 항목을 참조하십시오.
OptimalityTolerance
라고 하는 허용오차는 1차 최적성 측정값과 관련이 있습니다. 1차 최적성 측정값이 OptimalityTolerance
보다 작은 경우 반복이 종료됩니다.
FunctionTolerance
라고 하는 함수 허용오차는 목적 함수 값의 최근 변화량의 크기와 관련이 있습니다.
기울기 벡터는 제곱합의 기울기입니다. 제약 조건이 없는 문제의 경우 기울기 크기는 기울기 벡터 성분의 절댓값의 최댓값입니다(기울기의 무한대 노름이라고도 함). 이 값은 최소화 점에서 0이어야 합니다.
범위를 갖는 문제의 경우 기울기 크기는 i에 대해 |vi*gi|의 최댓값입니다. 여기서 gi는 기울기의 i번째 성분이고, x는 현재 점이며, 다음과 같습니다.
xi가 경계에 있는 경우, vi는 0입니다. xi가 경계에 있지 않는 경우 최소화 점에서 기울기 gi는 0이어야 합니다. 따라서 기울기 크기는 최소화 점에서 0이어야 합니다.
자세한 내용은 1차 최적성 측정값 항목을 참조하십시오.
현재 스텝의 크기는 마지막 반복의 현재 점 위치에서의 변화량 크기입니다.
자세한 내용은 허용오차와 중지 기준 항목을 참조하십시오.
Levenberg-Marquardt 정규화 파라미터는 신뢰 영역 반지름에 대한 역수와 관련이 있습니다. 이 파라미터는 함수 값의 제곱합이 2차 모델에 가깝지 않을 때 커집니다. 자세한 내용은 Levenberg-Marquardt 방법 항목을 참조하십시오.
솔버는 유한 차분을 사용해 목적 함수 벡터의 야코비 행렬을 추정합니다. 유한 차분 계산이 목적 함수가 잘 정의된 영역을 벗어났으며 이로 인해 Inf
, NaN
또는 복소수 결과가 반환됩니다.
솔버가 야코비 행렬 J를 사용하는 방법에 대한 자세한 내용은 Levenberg-Marquardt 방법 항목을 참조하십시오. 진행 방법에 대한 제안 사항은 6. 기울기 또는 야코비 행렬 제공하기 항목을 참조하십시오.
알고리즘
Levenberg-Marquardt 방법과 trust-region-reflective 방법은 fsolve
에도 사용된 동일한 비선형 최소제곱 알고리즘을 기반으로 합니다.
디폴트 trust-region-reflective 알고리즘은 부분공간 trust-region 방법이며 interior-reflective 뉴턴 방법([1] 및 [2]에 설명되어 있음)을 기반으로 합니다. 각 반복에는 선조건 적용 켤레 기울기(PCG) 방법을 사용한 대규모 선형 시스템의 근사해 풀이 작업이 포함됩니다. Trust-Region-Reflective 최소제곱 항목을 참조하십시오.
Levenberg-Marquardt 방법은 참고 문헌 [4], [5], [6]에 설명되어 있습니다. Levenberg-Marquardt 방법 항목을 참조하십시오.
'interior-point'
알고리즘은 몇 가지 수정 사항이 적용된 fmincon
'interior-point'
알고리즘을 사용합니다. 자세한 내용은 제약 조건이 있는 최소제곱에 대해 수정된 fmincon 알고리즘 항목을 참조하십시오.
대체 기능
앱
최적화 라이브 편집기 작업은 lsqnonlin
에 대한 시각적 인터페이스를 제공합니다.
참고 문헌
[1] Coleman, T.F. and Y. Li. “An Interior, Trust Region Approach for Nonlinear Minimization Subject to Bounds.” SIAM Journal on Optimization, Vol. 6, 1996, pp. 418–445.
[2] Coleman, T.F. and Y. Li. “On the Convergence of Reflective Newton Methods for Large-Scale Nonlinear Minimization Subject to Bounds.” Mathematical Programming, Vol. 67, Number 2, 1994, pp. 189–224.
[3] Dennis, J. E. Jr. “Nonlinear Least-Squares.” State of the Art in Numerical Analysis, ed. D. Jacobs, Academic Press, pp. 269–312.
[4] Levenberg, K. “A Method for the Solution of Certain Problems in Least-Squares.” Quarterly Applied Mathematics 2, 1944, pp. 164–168.
[5] Marquardt, D. “An Algorithm for Least-squares Estimation of Nonlinear Parameters.” SIAM Journal Applied Mathematics, Vol. 11, 1963, pp. 431–441.
[6] Moré, J. J. “The Levenberg-Marquardt Algorithm: Implementation and Theory.” Numerical Analysis, ed. G. A. Watson, Lecture Notes in Mathematics 630, Springer Verlag, 1977, pp. 105–116.
[7] Moré, J. J., B. S. Garbow, and K. E. Hillstrom. User Guide for MINPACK 1. Argonne National Laboratory, Rept. ANL–80–74, 1980.
[8] Powell, M. J. D. “A Fortran Subroutine for Solving Systems of Nonlinear Algebraic Equations.” Numerical Methods for Nonlinear Algebraic Equations, P. Rabinowitz, ed., Ch.7, 1970.
확장 기능
lsqcurvefit
과lsqnonlin
은codegen
(MATLAB Coder) 함수 또는 MATLAB Coder™ 앱을 사용한 코드 생성을 지원합니다. 코드를 생성하려면 MATLAB Coder 라이선스가 있어야 합니다.타깃 하드웨어는 표준 배정밀도 부동소수점 계산을 지원해야 합니다. 단정밀도 또는 고정소수점 계산에 대해서는 코드를 생성할 수 없습니다.
코드 생성 대상은 MATLAB 솔버와 동일한 수학 커널 라이브러리를 사용하지 않습니다. 따라서 특히 조건이 나쁜 문제인 경우에 코드 생성의 해가 솔버의 해와 다를 수 있습니다.
생성을 위한 모든 코드는 MATLAB 코드여야 합니다. 구체적으로, 사용자 지정 블랙박스 함수는
lsqcurvefit
또는lsqnonlin
에 대한 목적 함수로 사용할 수 없습니다. C 또는 C++에서 코딩된 사용자 지정 함수는coder.ceval
을 사용하여 실행할 수 있습니다. 단, 사용자 지정 함수를 MATLAB 함수 내부에서 호출해야 합니다.현재
lsqcurvefit
와lsqnonlin
에 대한 코드 생성 시 선형 제약 조건 또는 비선형 제약 조건이 지원되지 않습니다.lsqcurvefit
과lsqnonlin
은 코드 생성 시problem
인수를 지원하지 않습니다.[x,fval] = lsqnonlin(problem) % Not supported
목적 함수를 지정할 때는 문자열이나 문자 이름이 아니라 함수 핸들을 사용해야 합니다.
x = lsqnonlin(@fun,x0,lb,ub,options) % Supported % Not supported: lsqnonlin('fun',...) or lsqnonlin("fun",...)
입력 행렬
lb
와ub
는 모두 희소 행렬이 아니라 비희소 행렬이어야 합니다.full
함수를 사용하여 희소 행렬을 비희소 행렬로 변환할 수 있습니다.lb
인수와ub
인수는x0
인수와 동일한 개수의 요소를 가지거나 비어 있어야 합니다([]
).타깃 하드웨어가 무한 범위를 지원하지 않는 경우
optim.coder.infbound
를 사용하십시오.임베디드 프로세서가 사용되는 고급 코드 최적화의 경우에는 Embedded Coder® 라이선스도 필요합니다.
lsqcurvefit
또는lsqnonlin
에 대한 옵션을 포함하고optimoptions
를 사용하여 옵션을 지정해야 합니다. 옵션에는'levenberg-marquardt'
로 설정된Algorithm
옵션이 포함되어야 합니다.options = optimoptions('lsqnonlin','Algorithm','levenberg-marquardt'); [x,fval,exitflag] = lsqnonlin(fun,x0,lb,ub,options);
코드 생성에 지원되는 옵션은 다음과 같습니다.
Algorithm
—'levenberg-marquardt'
이어야 함FiniteDifferenceStepSize
FiniteDifferenceType
FunctionTolerance
MaxFunctionEvaluations
MaxIterations
SpecifyObjectiveGradient
StepTolerance
TypicalX
생성된 코드는 옵션에 대해 제한적인 오류 검사를 수행합니다. 옵션을 업데이트할 때 권장하는 방법은 점 표기법이 아니라
optimoptions
를 사용하는 것입니다.opts = optimoptions('lsqnonlin','Algorithm','levenberg-marquardt'); opts = optimoptions(opts,'MaxIterations',1e4); % Recommended opts.MaxIterations = 1e4; % Not recommended
파일에서 옵션을 불러오지 마십시오. 파일에서 불러오면 코드 생성이 실패할 수 있습니다. 대신 코드에서 옵션을 만드십시오.
일반적으로, 지원되지 않는 옵션을 지정하면 코드 생성 시에 해당 옵션이 별다른 표시 없이 무시됩니다. 그러나 점 표기법을 사용하여 플롯 함수 또는 출력 함수를 지정하면 코드 생성에서 오류가 발생할 수 있습니다. 안정적인 코드 생성을 위해 지원되는 옵션만 지정하십시오.
출력 함수와 플롯 함수는 지원되지 않으므로 솔버는 종료 플래그 –1을 반환하지 않습니다.
예제는 Generate Code for lsqcurvefit or lsqnonlin 항목을 참조하십시오.
병렬로 실행하려면 'UseParallel'
옵션을 true
로 설정하십시오.
options = optimoptions('
solvername
','UseParallel',true)
자세한 내용은 Using Parallel Computing in Optimization Toolbox 항목을 참조하십시오.
버전 내역
R2006a 이전에 개발됨JacobianMultiplyFcn
옵션에 대한 구문은 다음과 같습니다.
W = jmfun(Jinfo, Y, flag)
MATLAB이 함수 jmfun
에 전달하는 Jinfo
데이터는 이제 어떤 데이터형도 될 수 있습니다. 예를 들어 이제 Jinfo
는 구조체가 될 수 있습니다. 이전 릴리스에서는 Jinfo
가 표준 double형 배열이어야 했습니다.
Jinfo
데이터는 목적 함수의 두 번째 출력값입니다.
[F,Jinfo] = myfun(x)
CheckGradients
옵션은 향후 릴리스에서 제거될 예정입니다. 목적 함수 또는 비선형 제약 조건 함수의 1계 도함수를 검사하려면 checkGradients
함수를 사용하십시오.
lsqnonlin
은 선형 제약 조건과 비선형 제약 조건을 모두 지원받게 됩니다. 제약 조건을 충족하도록 하기 위해 솔버는 fmincon
에서 "interior-point"
알고리즘을 사용합니다.
제약 조건은 지정하고 알고리즘은 지정하지 않는 경우 솔버는 자동으로
"interior-point"
알고리즘으로 전환합니다.제약 조건과 알고리즘을 지정하는 경우
"interior-point"
알고리즘을 지정해야 합니다.
알고리즘에 대한 자세한 내용은 제약 조건이 있는 최소제곱에 대해 수정된 fmincon 알고리즘 항목을 참조하십시오. 예제는 Compare lsqnonlin and fmincon for Constrained Nonlinear Least Squares 항목을 참조하십시오.
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- 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)