Newton's method problem
이전 댓글 표시
clear all; close all;
a=4;
b=3;
x=zeros();
x(1)=1;
for i=1:1000;
f(x(i))=(x(i)-a)^2+b;
x(i+1) =x(i)-(f(x(i))/diff(f(x(i))));
end
댓글 수: 4
Grzegorz Knor
2011년 10월 7일
Could you describe a problem that you try to solve using this code?
Andrei Bobrov
2011년 10월 7일
Hi Grzegorz! This is method Newton?
Prozka
2011년 10월 7일
Walter Roberson
2011년 10월 7일
Code that has a "clear all" statement is broken 99 times out of 100.
답변 (3개)
Andrei Bobrov
2011년 10월 7일
for your case EDITED
f = @(x)(x - 4)^2 + 9;
syms x
ex = (x - 4)^2 + 9;
cf = double(coeffs(ex));
distxp = (4*prod(cf([1 end]))-cf(2)^2)/4/cf(3);
fun = matlabFunction(ex - distxp);
df = matlabFunction(diff(ex));
x = 10;
xout = x;
while abs(fun(x)) > 1e-6
x1 = x - fun(x)/df(x);
x = x1;
xout = [xout;x];
end
ADD corrected
f = @(x)(x - 4)^2 + 9;
syms x
ex = (x - 4)^2 + 9;
cf = fliplr(double(coeffs(expand(ex))));
distxp = (4*prod(cf([1 end]))-cf(2)^2)/4/cf(1);
fun = @(x)f(x)-distxp;
dcf = polyder(cf);
df = @(x)polyval(dcf,x);
x = 10;
xout = x;
while abs(fun(x)) > 1e-6
x1 = x - fun(x)/df(x);
x = x1;
xout = [xout;x];
end
output for the first 10 iterations and optimal x
if numel(xout)<=10
out = xout;
else
out = [xout(1:10);xout(end)];
end
댓글 수: 7
Prozka
2011년 10월 7일
Prozka
2011년 10월 9일
Andrei Bobrov
2011년 10월 9일
corrected
Prozka
2011년 10월 9일
Andrei Bobrov
2011년 10월 9일
outf = f(out(end))
Andrei Bobrov
2011년 10월 9일
Proshka, include your head (brain) 10000 iterations is very many
Prozka
2011년 10월 9일
Andreas Goser
2011년 10월 7일
0 개 추천
This code isn't working because diff(f(x(i))) returns [] and thus a scalar can't be divide by [].
Steve
2011년 10월 9일
You can use this Newton function implementation in general.
function n = newton(f,fp,x0,tol,Nmax)
n=0;
test_val = abs(poly_val(f,x0));
num1 = 1;
while (test_val > tol && num1<Nmax)
n = x0 - poly_val(f,x0)/poly_val(fp,x0);
test_val = abs(poly_val(f,n));
x0=n;
num1=num1+1;
end
end
카테고리
도움말 센터 및 File Exchange에서 Nonlinear Optimization에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!