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) %輸出結果