求:雅可比矩阵迭代法MATLAB编程
发布网友
发布时间:2022-04-29 03:55
我来回答
共2个回答
热心网友
时间:2023-10-10 00:07
对于求平方根,变成方程模式为f(x)=x^2-a,即求此方程的实根;
下面编写了两个function函数,可以直接调用。
二分法:
function
x=sqrt_bisect(a)
f=@(x)x^2-a;
if
a<0
warning(['负数不能求平方根']);
x=[];
elseif
a==0|a==1
x=a;
else
if
a<1
xa=a;xb=1;
else
xa=1.00;xb=a;
end
while
abs(xa-xb)>1e-6
x=(xa+xb)/2;
if
f(xb)*f(x)>0
xb=x;
elseif
f(xa)*f(x)>0
xa=x;
else
break
end
end
end
x;
牛顿迭代法:
function
x=sqrt_newton(a)
f=@(x)x^2-a;
df=diff(sym('x^2-a'));
if
a<0
warning('负数没有实平方根');
x1=[];
elseif
a==0;
x1=a;
else
x0=a;
x1=x0-f(x0)/subs(df,x0);
while
abs(x1-x0)>1e-6
x0=x1;
x1=x0-f(x0)/subs(df,x0);
end
end
x=x1;
调用格式为:
sqrt_bisect(3)
ans
=
1.7321
或者
sqrt_newton(2)
ans
=
1.4142
热心网友
时间:2023-10-10 00:08
x
=
zeros(size(b));
%初始解设置为与b同型的零向量
k
=
0;
%迭代次数的记数变量,初始量设为0
r
=
1;
%前后项之差的无穷范数
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
D
=
diag(diag(A));
B
=
inv(D)*(D-A);
f
=
inv(D)*b;
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
p
=
max(abs(eig(B)));
%谱半径大于等于1就不收敛
if
p
>=
1
'迭代法不收敛'
return
end
while
r
>e
x0
=
x;
x
=
B*x0
+
f;
k
=
k
+
1;
r
=
norm
(x-x0,inf);
end
'所求解为'
x
'迭代次数为'
k
自己以前编的。。。。
热心网友
时间:2023-10-10 00:07
对于求平方根,变成方程模式为f(x)=x^2-a,即求此方程的实根;
下面编写了两个function函数,可以直接调用。
二分法:
function
x=sqrt_bisect(a)
f=@(x)x^2-a;
if
a<0
warning(['负数不能求平方根']);
x=[];
elseif
a==0|a==1
x=a;
else
if
a<1
xa=a;xb=1;
else
xa=1.00;xb=a;
end
while
abs(xa-xb)>1e-6
x=(xa+xb)/2;
if
f(xb)*f(x)>0
xb=x;
elseif
f(xa)*f(x)>0
xa=x;
else
break
end
end
end
x;
牛顿迭代法:
function
x=sqrt_newton(a)
f=@(x)x^2-a;
df=diff(sym('x^2-a'));
if
a<0
warning('负数没有实平方根');
x1=[];
elseif
a==0;
x1=a;
else
x0=a;
x1=x0-f(x0)/subs(df,x0);
while
abs(x1-x0)>1e-6
x0=x1;
x1=x0-f(x0)/subs(df,x0);
end
end
x=x1;
调用格式为:
sqrt_bisect(3)
ans
=
1.7321
或者
sqrt_newton(2)
ans
=
1.4142
热心网友
时间:2023-10-10 00:08
x
=
zeros(size(b));
%初始解设置为与b同型的零向量
k
=
0;
%迭代次数的记数变量,初始量设为0
r
=
1;
%前后项之差的无穷范数
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
D
=
diag(diag(A));
B
=
inv(D)*(D-A);
f
=
inv(D)*b;
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
p
=
max(abs(eig(B)));
%谱半径大于等于1就不收敛
if
p
>=
1
'迭代法不收敛'
return
end
while
r
>e
x0
=
x;
x
=
B*x0
+
f;
k
=
k
+
1;
r
=
norm
(x-x0,inf);
end
'所求解为'
x
'迭代次数为'
k
自己以前编的。。。。