必做題目比較簡單,寫得有些隨意,主要還是第二個拓展題目的難度比較高
1.Newton迭代法解非線性方程
function [] = Newton_Die(x,tol,N)
f=cos(x)-x; %f(x)
df=-sin(x)-1; %f(x)的導(dǎo)數(shù)
for k=1:N
x_old=x;
x=x_old-f/df;
f=cos(x)-x; %更新f的值
df=-sin(x)-1; %更新df的值
fprintf('迭代次數(shù)=%d\tx=%.10f\n',k,x)
if abs(x_old-x)<tol
break
end
if k==N
disp('達(dá)到最大迭代次數(shù)')
end
end
end
2.Newton迭代法解非線性方程組
function [X] = Newton_Z(X,tol,N)
n = input('輸入未知數(shù)的個數(shù):');
syms x [1 n] %創(chuàng)建n個未知數(shù)變量
ff=cell(n,1); %初始化f(xk)——帶入Xk值之前為符號表達(dá)式——cell儲存
F=zeros(n,1); %初始化f(xk)——帶入Xk值之后為矩陣——數(shù)組儲存
Jx=cell(n,n); %初始化J(xk)——帶入Xk值之前為符號表達(dá)式——cell儲存
J=zeros(n,n); %初始化J(xk)——帶入Xk值之后為矩陣——數(shù)組儲存
for i=1:n
f=input('請輸入方程:');
ff{i,1}=f;
for j=1:n
Jx{i,j}=diff(f,x(j)); %求Jacobi矩陣
end
end
Jx
for k=1:N %定義最大迭代次數(shù)
X_old = X;
for i=1:n
ff_cpoy=ff{i,1};
for u=1:n %求f(xk)的值
if u~=n
ff_cpoy=subs(ff_cpoy,x(u),X(u,1)); %對符號表達(dá)式逐個賦值
else
F(i,1)=vpa(subs(ff_cpoy,x(u),X(u,1)));%賦值完成后傳給F
end
end
for j=1:n
Jx_copy=Jx{i,j};
for v=1:n %求J(xk)的值
if v~=n
Jx_copy=subs(Jx_copy,x(v),X(v,1));%對符號表達(dá)式逐個賦值
else
J(i,j)=vpa(subs(Jx_copy,x(v),X(v,1)));%賦值完成后傳給J
end
end
end
end
X = X-J\F; %Newton迭代公式
fprintf('迭代次數(shù)=%d ',k)
for i=1:n
value=X(i,1);
fprintf('x%d=%.8f ',i,value)
end
fprintf('\t')
fprintf('精度:%.10f\n',norm(X_old-X, inf))
if norm(X_old-X, inf)<tol %無窮范數(shù)定義終止條件
break
end
if k==N
disp('達(dá)到最大迭代次數(shù)')
end
end
傳入題設(shè)數(shù)據(jù)有:
>> Newton_Die(0.5,1e-5,100)
迭代次數(shù)=1 x=0.7552224171
迭代次數(shù)=2 x=0.7391416661
迭代次數(shù)=3 x=0.7390851339
迭代次數(shù)=4 x=0.7390851332
Newton_Z([1;1;1],1e-5,100)
輸入未知數(shù)的個數(shù):3
請輸入方程:3*x1-cos(x2*x3)-0.5
請輸入方程:x1^2-81*(x2+0.1)^2+sin(x3)+1.06
請輸入方程:exp(-1*x1*x2)+20*x3+(10*pi-3)/3
Jx =
3×3 cell 數(shù)組
{[3 ]} {[x3*sin(x2*x3) ]} {[x2*sin(x2*x3)]}
{[2*x1 ]} {[- 162*x2 - 81/5]} {[cos(x3) ]}
{[-x2*exp(-x1*x2)]} {[-x1*exp(-x1*x2)]} {[20 ]}
迭代次數(shù)=1 x1=0.91968721 x2=0.46082246 x3=-0.50338764 精度:1.5033876355
迭代次數(shù)=2 x1=0.50100049 x2=0.18743348 x3=-0.52086923 精度:0.4186867278
迭代次數(shù)=3 x1=0.50054294 x2=0.06115345 x3=-0.52200096 精度:0.1262800240
迭代次數(shù)=4 x1=0.50010444 x2=0.01161711 x3=-0.52329515 精度:0.0495363479
迭代次數(shù)=5 x1=0.50000551 x2=0.00060562 x3=-0.52358294 精度:0.0110114900
迭代次數(shù)=6 x1=0.50000002 x2=0.00000183 x3=-0.52359873 精度:0.0006037894
迭代次數(shù)=7 x1=0.50000000 x2=0.00000000 x3=-0.52359878 精度:0.0000018264
另附運(yùn)行截圖
文章來源:http://www.zghlxwxcb.cn/news/detail-502113.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-502113.html
到了這里,關(guān)于牛頓(Newton)迭代法求解非線性方程以及方程組的Matlab實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!