Matlab 绘制多种情况下牛顿-拉斐逊解的结果

Matlab 绘制多种情况下牛顿-拉斐逊解的结果,matlab,plot,numerical-methods,angle,newtons-method,Matlab,Plot,Numerical Methods,Angle,Newtons Method,考虑以下问题: 我现在进入问题的第三部分。我写了向量循环方程(q=teta2,x=teta3和y=teta4): 我有这两个函数,除了x和y之外的所有变量都给出了。我在他的帮助下找到了根 现在我需要绘制q与x和q与y的曲线图,当q处于[0,2pi]时,δq为2.5度。我应该如何绘制这些图表 以下是我迄今为止的尝试: function [fval,jac] = lorenzSystem(X) %Define variables x = X(1); y = X(2); q = pi/2; r2

考虑以下问题:

我现在进入问题的第三部分。我写了向量循环方程(
q=teta2
x=teta3
y=teta4
):

我有这两个函数,除了
x
y
之外的所有变量都给出了。我在他的帮助下找到了根

现在我需要绘制
q
x
q
y
的曲线图,当
q
处于
[0,2pi]
时,δq为2.5度。我应该如何绘制这些图表

以下是我迄今为止的尝试:

function [fval,jac] = lorenzSystem(X)

%Define variables
x = X(1);
y = X(2);
q = pi/2;

r2 = 15
r3 = 50
r4 = 45
r1 = 40

%Define f(x)
fval(1,1)=r2*cos(q)+r3*cos(x)-r4*cos(y)-r1;
fval(2,1)=r2*sin(q)+r3*sin(x)-r4*sin(y);

%Define Jacobian
 jac = [-r3*sin(X(1)), r4*sin(X(2));
     r3*cos(X(1)), -r4*cos(X(2))];

%% Multivariate NR

%Initial conditions:
X0 = [0.5;1];
maxIter = 50;
tolX = 1e-6;

X = X0;
Xold = X0;
for i = 1:maxIter
    [f,j] = lorenzSystem(X);
    X = X - inv(j)*f;

    err(:,i) = abs(X-Xold);
    Xold = X;
    if (err(:,i)<tolX)
        break;
    end
end
函数[fval,jac]=lorenzSystem(X)
%定义变量
x=x(1);
y=X(2);
q=pi/2;
r2=15
r3=50
r4=45
r1=40
%定义f(x)
fval(1,1)=r2*cos(q)+r3*cos(x)-r4*cos(y)-r1;
fval(2,1)=r2*sin(q)+r3*sin(x)-r4*sin(y);
%定义雅可比矩阵
jac=[-r3*sin(X(1)),r4*sin(X(2));
r3*cos(X(1)),-r4*cos(X(2));
%%多元NR
%初始条件:
X0=[0.5;1];
maxIter=50;
通行费=1e-6;
X=X0;
Xold=X0;
对于i=1:maxIter
[f,j]=lorenzSystem(X);
X=X-存货(j)*f;
err(:,i)=abs(X-Xold);
Xold=X;

如果(err(:,i)请查看下面我的解决方案,并研究它与您自己的不同之处

函数[th2,th3,th4]=q65270276()
[th2,th3,th4]=lorenzSystem();
hF=图();hAx=轴(hF);
图(hAx、deg2rad(th2)、deg2rad(th3)、deg2rad(th2)、deg2rad(th4));
xlabel(hAx,'\theta_2')
xticks(hAx,0:pi/3:2*pi);
xticklabels(hAx,{'$0$'、'$\frac{\pi}{3}$'、'$\frac{2\pi}{3}$'、'$\pi$'、'$\frac{4\pi}{3}$'、'$\frac{5\pi}{3}$'、'$2\pi$');
hAx.TickLabelInterpreter=‘乳胶’;
yticks(hAx,0:pi/6:pi);
yticklabels(hAx,{'$0$'、'$\frac{\pi}{6}$'、'$\frac{\pi}{3}$'、'$\frac{\pi}{2}$'、'$\frac{2\pi}{3}$'、'$\frac{5\pi}{6}$'、'$\pi$');
集合(hAx,'XLim',[02*pi],'YLim',[0pi],'FontSize',16);
网格(hAx,'on');
图例(hAx,“\theta_3',“\theta_4')
结束
函数[th2,th3,th4]=lorenzSystem()
th2=(0:2.5:360)。”;
[th3,th4]=交易(零(大小(th2));
%定义几何图形:
r1=40;
r2=15;
r3=50;
r4=45;
%定义残差:
res=@(q,X)[r2*cosd(q)+r3*cosd(X(1))-r4*cosd(X(2))-r1;…ΔX=0
r2*sind(q)+r3*sind(X(1))-r4*sind(X(2))];%Δy=0
%定义雅可比矩阵:
J=@(X)[-r3*sind(X(1)),r4*sind(X(2));
r3*cosd(X(1)),-r4*cosd(X(2));
X0=[acosd((45^2-25^2-50^2)/(-2*25*50));180 acosd((50^2-25^2-45^2)/(-2*25*45));%准确猜测
maxIter=500;
通行费=1e-6;
对于idx=1:numel(th2)
X=X0;
Xold=X0;
err=0(最大值,1);%Preallocation
对于it=1:maxIter
%更新猜测
f=res(th2(idx),Xold);
X=Xold-J(Xold)\f;
%当J(X)接近单数时,X=X-pinv(J(X))*res(q(idx),X);%可能有帮助
%确定收敛性
err(it)=(X-Xold)。*(X-Xold);
如果出错(it)
几点注意:

  • 所有计算均以度为单位进行

  • 我使用的特定绘图代码不太有趣,重要的是我定义了所有
    θ₂然后在其上循环找到
    θ₃
    θ₄(没有递归,就像在您自己的实现中所做的那样)

  • 第一种情况(
    θ)的初始猜测(实际上是解析解)₂=0
    )可以通过使用定律手动解决问题(即“在纸上”)来找到。该解算器也适用于其他猜测,但您可能需要增加
    最大值
    。此外,对于某些猜测(例如
    X(1)=X(2)
    ),雅可比矩阵是病态的,在这种情况下,您可以使用

  • 如果我的计算正确,结果如下:


  • 您能发布您到目前为止的代码/尝试吗?这可能有助于我们了解您正试图绘制的内容。输入是什么
    X
    ?您有预期结果的插图吗?我添加了问题的图片。这是一个很好的补充,但没有回答我的问题:(你知道q vs x和q vs y图表应该是什么样子吗?函数的输入,
    x
    ,和你刚才添加的插图之间的关系是什么?很抱歉。我忘了回答你的问题。我不知道图表应该是什么样子。但是,teta2值的改变会改变其他两个角度。我认为这些图看起来像太阳波,但我不确定。
    function [fval,jac] = lorenzSystem(X)
    
    %Define variables
    x = X(1);
    y = X(2);
    q = pi/2;
    
    r2 = 15
    r3 = 50
    r4 = 45
    r1 = 40
    
    %Define f(x)
    fval(1,1)=r2*cos(q)+r3*cos(x)-r4*cos(y)-r1;
    fval(2,1)=r2*sin(q)+r3*sin(x)-r4*sin(y);
    
    %Define Jacobian
     jac = [-r3*sin(X(1)), r4*sin(X(2));
         r3*cos(X(1)), -r4*cos(X(2))];
    
    %% Multivariate NR
    
    %Initial conditions:
    X0 = [0.5;1];
    maxIter = 50;
    tolX = 1e-6;
    
    X = X0;
    Xold = X0;
    for i = 1:maxIter
        [f,j] = lorenzSystem(X);
        X = X - inv(j)*f;
    
        err(:,i) = abs(X-Xold);
        Xold = X;
        if (err(:,i)<tolX)
            break;
        end
    end