A problem while using lsqnonlin
조회 수: 15 (최근 30일)
이전 댓글 표시
I want to find the parameter x using nonlinear solver lsqnonlin.
I think the two functions are the same, but ErrorFunc2 doesn't seem to work properly with the optimization process.
Can you tell me what the problem is?

d = linspace(0,3);
y = exp(-1.3*d) + 0.05*randn(size(d));
ErrorFunc = @(r)exp(-d*r)-y;
x0 = 4;
x = lsqnonlin(ErrorFunc,x0);
x2 = lsqnonlin(@ErrorFunc2,x0);
figure()
hold on
plot(d,y,'ko') % DATA
plot(d,exp(-x*d),'b-') % BEST FIT
plot(d,exp(-x2*d)) % BEST FIT
legend('Data','x1 fit', 'x2 fit')
xlabel('t')
ylabel('exp(-tx)')
function [error] = ErrorFunc2(x)
d = linspace(0,3);
y = exp(-1.3*d) + 0.05*randn(size(d));
error = exp(-d*x) -y;
end
댓글 수: 0
채택된 답변
Stephan
2020년 6월 10일
편집: Stephan
2020년 6월 10일
Use the same random numbers for the same results:
rng('default')
d = linspace(0,3);
y = exp(-1.3*d) + 0.05*randn(size(d));
ErrorFunc = @(r)exp(-d*r)-y;
x0 = 4;
x = lsqnonlin(ErrorFunc,x0);
x2 = lsqnonlin(@ErrorFunc2,x0);
figure()
hold on
plot(d,y,'ko') % DATA
plot(d,exp(-x*d),'b-') % BEST FIT
plot(d,exp(-x2*d),'r--') % BEST FIT
legend('Data','x1 fit', 'x2 fit')
xlabel('t')
ylabel('exp(-tx)')
function [error] = ErrorFunc2(x)
rng('default')
d = linspace(0,3);
y = exp(-1.3*d) + 0.05*randn(size(d));
error = exp(-d*x) -y;
end
Another approach would be to generate random numbers only one time and use them as input to func2:
d = linspace(0,3);
y = exp(-1.3*d) + 0.05*randn(size(d));
ErrorFunc = @(r)exp(-d*r)-y;
x0 = 4;
x = lsqnonlin(ErrorFunc,x0);
x2 = lsqnonlin(@(x)ErrorFunc2(x,y),x0);
figure()
hold on
plot(d,y,'ko') % DATA
plot(d,exp(-x*d),'b-') % BEST FIT
plot(d,exp(-x2*d),'r--') % BEST FIT
legend('Data','x1 fit', 'x2 fit')
xlabel('t')
ylabel('exp(-tx)')
function [error] = ErrorFunc2(x,y)
d = linspace(0,3);
% y = exp(-1.3*d) + 0.05*randn(size(d));
error = exp(-d*x) -y;
end
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Random Number Generation에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!