Stuck at Gauss-Newton Method code

3 ビュー (過去 30 日間)
seoung gi Sin
seoung gi Sin 2022 年 5 月 5 日
編集済み: Torsten 2022 年 5 月 5 日
I am trying to make a code with a formula (𝑦 = 𝑎0 (1 − 𝑒 ^(−𝑎1𝑥 ))).
Help
x=[0.25,0.75,1.25,1.75,2.25];
y=[0.23,0.58,0.70,0.76,0.79];
disp('iterations a0 a1 da0 da1')
tol= 10^-8;
a=[0.5 1];
error=1;
n=length(x);
itermax=100;
for iter=1:itermax
a0=a(1);
a1=a(2);
for i=1:n
f(i)=a0*(1-exp(-a1.*x(i)));
j(i,1)=1-exp(-a1.*x(i));
j(i,2)=a0*a1*exp(-a1.*x(i));
d(i)=y(i)-f(i);
end
da=(j'*j)\(j'*d');
a=a+da';
out= [iter a da']
disp(out);
if (abs(da(1))<tol && abs(da(2))<tol)
break
end
end
x1=min(x);
x2=max(x);
xx=linspace(x1,x2,100);
yy=(a0*xx).*(1-exp(-a1*xx));
p=plot(xx,yy,x,y,'o');
  2 件のコメント
KSSV
KSSV 2022 年 5 月 5 日
What is the question? Where are you stuck?
seoung gi Sin
seoung gi Sin 2022 年 5 月 5 日
the plot does not correctly reflect the data.

サインインしてコメントする。

回答 (2 件)

Walter Roberson
Walter Roberson 2022 年 5 月 5 日
your j 2 is the derivative with respect to x, but you need it to be the derivative with respect to a1 which is a0*x*exp(-a1*x)
  2 件のコメント
seoung gi Sin
seoung gi Sin 2022 年 5 月 5 日
Your advice is a bit helpful to me, but the graph still don't reflect the data at all.
Walter Roberson
Walter Roberson 2022 年 5 月 5 日
da=(j'*j)\(j'*d');
I am clear why you do not factor out the j' giving you
da = j\d';
?

サインインしてコメントする。


Torsten
Torsten 2022 年 5 月 5 日
編集済み: Torsten 2022 年 5 月 5 日
Change
j(i,2)=a0*a1*exp(-a1.*x(i));
to
j(i,2)=a0*x(i)*exp(-a1.*x(i));
and
xx=linspace(x1,x2,100);
yy=(a0*xx).*(1-exp(-a1*xx));
to
xx=linspace(x1,x2,100);
yy=(a0).*(1-exp(-a1*xx));

カテゴリ

Help Center および File ExchangeAnimation についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by