Trying to answer a math problem using newton's method but having problem in the function.
1 次查看(过去 30 天)
显示 更早的评论
This is the last function when newton's method is applied:
I used z=log(x) in my function to make it easier to understand:
clc
x=0.25;
y=0;
while (y-x)<10^-4
z=log10(x);
y = x-((((x ^ 2)z-(x ^ 0.5)-20)2.x ^0.5)/(-1+4.x ^ (3/2)z+2.x ^ (3/2)))
x=y;
end
0 个评论
采纳的回答
Alan Stevens
2023-3-17
Matlab doesn't like implied multiplication
(x ^ 2)z
should be
(x ^ 2)*z
etc.
Also, in Matlab
log(x)
is ln(x)
0 个评论
更多回答(2 个)
Cris LaPierre
2023-3-17
You need to include the multiplication operator when coding your equation. Also, it is '*', not '.'. Nothing is inferred.
I think your conditional will be problematic, since the last line of your loop sets x equal to y.
x=0.25;
y=0;
while (y-x)<10^-4
z=log10(x);
y = x-((((x ^ 2)*z-(x ^ 0.5)-20)*2*x ^0.5)/(-1+4*x ^ (3/2)*z+2*x ^ (3/2)))
x=y;
end
1 个评论
Cris LaPierre
2023-3-17
编辑:Cris LaPierre
2023-3-17
+1 about log10 vs log for natural ln.
Also wanted to point out that you have created an infinite loop. Since x=y, (y-x) is 0, which is <1e-4. Since your condition will always be true, your loop will never end.
Just changing the < to > will prevent the infinite loop, but won't fix the issue that y=x. Consider creating a third variable to prevent this.
Also consider the case that the difference of (y-x) may be positive or negative. You may want your condition to compare to the absolute value of this difference.
Voss
2023-3-17
Multiplication is * or .* but never . as in 4.x and never implicit as in (x^2)z
log10 is base-10 logarithm. log is natural logarithm.
z = log(x);
y = x-((((x^2)*z-(x^0.5)-20)*2*x^0.5)/(-1+4*x^(3/2)*z+2*x^(3/2)));
0 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!