作业帮 > 数学 > 作业

Matlab用牛顿迭代法求角度的代码.

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:数学作业 时间:2024/05/02 11:33:00
Matlab用牛顿迭代法求角度的代码.

现已知

R=150

γ=b/R

b=60

δ=20

求θ值.


我之前是用solve函数求解的,可是发现获得的θ值是带虚数的,而且只有一个解.

代码如下:

R=150
b=60
r=R/b
a=20
syms theta
theta1=solve(R*sqrt(2-2*cos(theta)+theta^2-(cos(theta-r)-cos(r)-cos(theta)+theta*r+1)^2/(2-2*cos(r)+r^2))==a) 

我需要的角度值是要正数,且不带虚数的.求Matlab牛顿迭代法的代码.谢谢大神.


下面是可供验算的数值.

R=56

γ=b/R

b=73

δ=7.97

θ=16.87度


上面我的代码有个地方输错了.
应该是
R=150
b=60
r=b/R
a=20
Matlab用牛顿迭代法求角度的代码.
-20.5558285905308换成弧度是-0.358766883260444
选不同初值得到另外一个结果
0.758766883260445换成弧度 43.474140786708
两边同时平方相减得到fx
然后求导得到dfx
利用x = x - fx/dfx;进行迭代
再问: 你能不能够给我算出θ的完整代码?
再答: $b = 60;
$R = 150;
$r = $b/$R;
$a = 20;
$x = 1;

sub f{
$R**2*(2-2*cos($x)+$x**2 - 
        (cos($x-$r) -cos($r)-cos($x)+$r*$x+1)**2/(2-2*cos($r)+$r**2)
       ) - $a**2;
}
sub df
{
$R**2*(2*sin($x) + 2*$x
 -(-sin($x-$r) +sin($x) + $r)*2*(cos($x-$r) -cos($r)-cos($x)+$r*$x+1)/(2-2*cos($r)+$r**2)
   );
}
for (1..1000)
{
$x = $x - f()/df();
print f(), "  $x ", $x*180/3.1415926,"\n";
}
别的语言写的仅供参考
再问: 这是C语言写的?