matlab牛顿算法
① 求教各位大神Matlab如何使用牛顿迭代法求下面方程的近似值
牛顿迭代法的原理是,
② 用牛顿法要matlab代码求函数最小值
用牛顿法可以求得函数f(x)=x^4-4x^3-6x^2-16x+4的型肢最小值为-156。
牛顿法的迭代原理是 Xk+1=Xk-f(xk)/f'(xk)
基于matlab的牛顿法求解主要代码
x0=6; %初值
tol = 0.001;%误差
x = newton(x0,tol); %牛顿迭代法函数
y=fun(x);
str=['f(x)=x^4-4x^3-6x^2-16x+4的最小值 ',num2str(y)];
fprintf('%s ',str);
str=['f(x)=x^4-4x^3-6x^2-16x+4的极值点,x=',num2str(x),';y=',num2str(y)];
fprintf('%s ',str);
运行结果虚宏,极值点,x=4;y=-156,最小值 -156
③ 用MATLAB编出牛顿迭代法的程序
function newton(x0,e,N)
%输入xo为估计的迭代初值,e为规定的误差,N为最大迭代次数.
%输出x,y为最后迭代的两个近似根,k为迭代次数.
clc
format long;
disp('迭代次数 近似根')
k=0;
x1=0;
x2=x0;
while (abs(x2-x1))>e
x1=x2;
x2=x1-f(x1)./df(x1);
k=k+1;
if k>N
return;
end
%%%%%%记录并输出%%%%%%%%%
o1=sprintf('%3d',k);
o2=sprintf('%3.8f',x2);
OL=[o1,' ' o2];
disp(OL);
y(k)=x2;
end
%%%%画图%%%%%%%
i=1:k;
figure(2)
plot(i,y,'rD-')
grid on
xlabel('迭代次数')
ylabel('近似根')
title(['牛顿法求出的该方程的近似根 x^*=', num2str(x2,9)])
function y=f(x)
y=x^2/2-sin(x)-1;
function y=df(x)
y=x-cos(x);
④ 用matlab做,牛顿迭代法
function [ A ] = cal( a,b,v )%a,b表示区间,v是精度
i=1;
x = (a+b)/2;
A=[i x];
t = x-(x^3-x-1)/(3*x^2-1);%迭代函数
while(abs(t-x)>v)
i=i+1;
x = t;
A = [A;i x];
t = x-(x^3-x-1)/(3*x^2-1);%迭代函数
end
A = [A;i+1 t];
end
运行结果:
>> format long;
>> cal(1,2,0.00001)
ans =
1.000000000000000 1.500000000000000
2.000000000000000 1.347826086956522
3.000000000000000 1.325200398950907
4.000000000000000 1.324718173999054
5.000000000000000 1.324717957244790
⑤ matlab中牛顿法程序
采用第一个。
首先你的两个代码的计算过程和方法以及步骤是一致的。
只不过第二个将k==N放在循环内部判断是没有必要的。
放在while外面,可以节省点计算量。
如果你要求结果精度高一些的话,你调用:
x=nanewton1(fname,dfname,x0,e,N)
时e要小一些,比如说取1e-6这样。
另外:
if nargin<4
e=1e-4; %这个值也下调几个量级,作为缺省的精度。
end
⑥ 牛顿迭代法的matlab代码
function y=f(x)
y=f(x);%函数f(x)的表达式
end
function z=h(x)
z=h(x);%函数h(x)的表达式
end x=X;%迭代初值
i=0;%迭代次数计算
while i<= 100%迭代次数
x0=X-f(X)/h(X);%牛顿迭代格式
if abs(x0-X)>0.01;%收敛判断
X=x0;
else break
end
i=i+1;
end
fprintf('
%s%.4f %s%d','X=',X,'i=',i) %输出结果