我被困在一个循环后到达南的价值

4视图(30天)
%牛顿
清晰;clc
%符号数学计算导数
信谊x y
u = x ^ 2 + x * y-10;
v = y + 3 * x * y ^ 2-57;
dudx = diff (u, x);
dudy = diff (u, y);
dvdx = diff (v, x);
dvdy = diff (v, y);
%符号函数转换成正则函数的输入(x, y)
u = matlabFunction (u);
v = matlabFunction (v);
dudx = matlabFunction (dudx,“var”,(x, y));
dudy = matlabFunction (dudy,“var”,(x, y));
dvdx = matlabFunction (dvdx,“var”,(x, y));
dvdy = matlabFunction (dvdy,“var”,(x, y));
%初始猜测根
xr = 1;
年= 1;
%最大数量的步骤
N = 1000;
托尔= 1 e-5;
%绘制函数
x = linspace (5100);
y = linspace (5100);
U = 0 (100100);
V = 0 (100100);
i = 1:10 0
j = 1:10 0
U (i, j) = U (x (i), y (j));
V (i, j) = (x (i), y (j));
结束
结束
图(1);clf (1);
%的阴谋u (x, y)
冲浪(x, y, U ')
持有
%的阴谋v (x, y)
冲浪(x, y, V”)
%进行迭代
i = 1:1000
%保存旧值
xro = xr;
yro =年;
%更新xr &年
xr = xro - (u (xro yro) * dvdy (xro yro) - v (xro yro) * dudy (xro yro))
/ (dudx (xro yro) * dvdy (xro yro) -dudy (xro yro) * dvdx (xro yro));
年= yro - (v (xro yro) * dudx (xro yro) - u (xro yro) * dvdy (xro yro)
/ (dudx (xro yro) * dvdy (xro yro) -dudy (xro yro) * dvdx (xro yro)));
%的阴谋当前猜根
持有
plot3 (xr,年,u (xr,年)“o”,“Markersize”,10)
plot3 (xr,年,u (xr,年)“o”,“Markersize”,10)
暂停(1);
%输出到命令窗口
流(”我Iter = % 5, xr f = % 5.5, 5.5年= % f,错误= % 5.5 e \ n ',
xr,我年,马克斯(abs (xr-xro), max (abs (yr-yro))))
如果聚合%停止循环
如果马克斯(abs (xr-xro), abs (yr-yro)) <托尔
流(“根(x, y) = (% 5.10 f, % 5.10 f) \ n”xr,年)
打破%停止循环
结束
结束
3评论
保罗Hoffrichter
保罗Hoffrichter 2021年9月8日
如果xr是南,马克斯(abs (xr-xro), abs (yr-yro))也是南和 马克斯(abs (xr-xro), abs (yr-yro)) <托尔 是假的。为南测试,使用 isnan 。但是然后你落入假如身体,因为xr是南,你会得到NaN的结果。

登录置评。

接受的答案

每•艾萨克森
每•艾萨克森 2021年9月8日
编辑:每•艾萨克森 2021年9月8日
的值 xr 不收敛于一个你希望的解决办法。 xr 趋于零, →“无穷”。
> > Newton_Raphson_multidim
Iter = 100, xr = 1.17年= 1.57 e + 02、错误= 1.56 e + 02
Iter = 100, xr = 0.14年= -1.37 e + 07、错误= 1.37 e + 7
Iter = 100, xr = -0.00年= 1.10 e + 21日误差e + 21 = 1.10
Iter = 100, xr = 0.00年= 5.96 e + 57岁的错误= 5.96 e + 57
Iter = 100, xr = 0.00年= -1.19 e + 154, e = 1.19 + 154错误
Iter = 100, xr =南,年= NaN,错误= NaN
Iter = 100, xr =南,年= NaN,错误= NaN
Iter = 100, xr =南,年= NaN,错误= NaN
“循环假设打破NaN值时” 我修改了“输出”语句
%输出到命令窗口
流(”我Iter = % 5, xr = % 5.2 f,年= % 5.2 e,错误= % 5.2 e \ n ',
xr,我年,马克斯(abs (xr-xro), max (abs (yr-yro))))
如果聚合%停止循环
如果马克斯(abs (xr-xro), abs (yr-yro)) < tol | | isnan (xr) | | isnan(年)
流(“根(x, y) = (% 5.2 e % 5.2 e) \ n”xr,年)
打破%停止循环
结束
现在我得到
> > Newton_Raphson_multidim
Iter = 100, xr = 1.17年= 1.57 e + 02、错误= 1.56 e + 02
Iter = 100, xr = 0.14年= -1.37 e + 07、错误= 1.37 e + 7
Iter = 100, xr = -0.00年= 1.10 e + 21日误差e + 21 = 1.10
Iter = 100, xr = 0.00年= 5.96 e + 57岁的错误= 5.96 e + 57
Iter = 100, xr = 0.00年= -1.19 e + 154, e = 1.19 + 154错误
Iter = 100, xr =南,年= NaN,错误= NaN
根(x, y) =(南南)
> >

更多的答案(0)

类别

找到更多的在数据类型转换帮助中心文件交换

s manbetx 845


释放

R2019a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的