График результатов решения Ньютона-Рафсона для нескольких случаев

Рассмотрим следующую проблему:

Я сейчас в третьей части этого вопроса. Я написал уравнения векторной петли (q=teta2, x=teta3 и y=teta4):

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);

У меня есть эти 2 функции, и даны все переменные, кроме 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

Не могли бы вы опубликовать код/попытку, которая у вас есть? Это может помочь нам понять, что именно вы пытаетесь заговорить.

MichaelTr7 13.12.2020 01:19

Какой ввод X? У вас есть иллюстрация ожидаемого результата?

Dev-iL 13.12.2020 12:36

Добавляю картинку вопроса.

HollyPolly 13.12.2020 12:57

Это хорошее дополнение, но оно не отвечает на мой вопрос :( Знаете ли вы, как должны выглядеть диаграммы q vs x и q vs y? Какова связь между вводом функции X и иллюстрацией, которую вы только что добавили? ?

Dev-iL 13.12.2020 13:00

Извини за это. Я забыл ответить на ваш вопрос. Я не знаю, как именно должны выглядеть графики. Но это похоже на то, что изменение значения teta2 изменит два других угла. Я думаю, что графики выглядят как солнечные волны, но я не уверен.

HollyPolly 13.12.2020 13:09
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
320
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Пожалуйста, взгляните на мое решение ниже и изучите, чем оно отличается от вашего.

function [th2,th3,th4] = q65270276()
[th2,th3,th4] = lorenzSystem();

hF = figure(); hAx = axes(hF);
plot(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 = 'latex';
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$'});
set(hAx, 'XLim', [0 2*pi], 'YLim', [0 pi], 'FontSize', 16);
grid(hAx, 'on');
legend(hAx, '\theta_3', '\theta_4')
end

function [th2,th3,th4] = lorenzSystem()
th2 = (0:2.5:360).';
[th3,th4] = deal(zeros(size(th2)));

% Define geometry:
r1 = 40;
r2 = 15;
r3 = 50;
r4 = 45;

% Define the residual:
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

% Define the Jacobian:
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))]; % Accurate guess
maxIter = 500;
tolX = 1e-6;

for idx = 1:numel(th2)
  X = X0;
  Xold = X0;
  err = zeros(maxIter, 1); % Preallocation
  for it = 1:maxIter
    % Update the guess
    f = res( th2(idx), Xold );
    X = Xold - J(Xold) \ f;
%     X = X - pinv(J(X)) * res( q(idx), X ); % May help when J(X) is close to singular
    
    % Determine convergence
    err(it) = (X-Xold).' * (X-Xold);
    if err(it) < tolX
      break
    end
    % Update history
    Xold = X;    
  end
  
  % Unpack and store θ₃, θ₄
  th3(idx) = X(1);
  th4(idx) = X(2);
  
  % Update X0 for faster convergence of the next case:
  X0 = X;
end

end

Несколько примечаний:

  1. Все расчеты производятся в градусах.

  2. Конкретный код построения графика, который я использовал, менее интересен, важно то, что я определил все θ₂ заранее, а затем зациклился на них, чтобы найти θ₃ и θ₄ (без рекурсии, как это было сделано в вашей собственной реализации).

  3. Исходное предположение (собственно, аналитическое решение) для самого первого случая (θ₂=0) можно найти, решив задачу вручную (т.е. «на бумаге») по закону косинусов . Решатель также работает для других предположений, но вам может потребоваться увеличить maxIter. Кроме того, для некоторых предположений (например, X(1)==X(2)) якобиан плохо обусловлен, и в этом случае вы можете использовать pinv.

  4. Если мои вычисления верны, это результат:

Другие вопросы по теме