一维牛顿法在Matlab里的实现
一维牛顿法在Matlab里的实现
在学习机械最优化设计过程中,有上机实验题,用到了一次牛顿法在matlab里实现最小值的求解。由于第一次使用matlab,现将代码放在此处,欢迎各路大神批评指正。
具体算法可自行百度,代码如下:
syms x
f=0.25*x^4-(2/3)*x^3-2*x^2-7*x+8; % 定义f(x)函数
x0=4; %初值为4
e=0.05; %精度0.05
k=0; %迭代次数计数
i=1;
f1=diff(f,x,1); %求函数一阶导
f2=diff(f,x,2); %求函数二阶导
while(i)
x0=x0-subs(f1,x,x0)/subs(f2,x,x0); %牛顿法迭代格式
if x0>=3&x0<=4 %迭代区间3~4
k=k+1;
else
i=0;
end
if abs(subs(f1,x,x0))<e %终止迭代的条件
i=0;
else
k=k+1;
end
end
fprintf('用牛顿法求得的解为%f\n',double(x0))
fprintf('迭代次数为%d\n',k)