How to solve this equations for alfa and beta ?
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
clc;
clear;
syms r alfa beta x0 y0 z0 x1 y1 z1
dist(alfa,beta) = norm(([x0 - r*(sin(alfa))*(cos(beta)),y0 - r*(sin(alfa))*(sin(beta)),z0 - r*(cos(alfa))] - [x1,y1,z1]));
D(alfa,beta) = diff(dist,alfa,2)*diff(dist,beta,2) - (diff(diff(dist,alfa),beta))^2;
[ALFA_MAX,BETA_MAX] = solve(D > 0, dist(alfa,beta) < 0,alfa,beta);
[ALFA_MIN,BETA_MIN] = solve(D > 0, dist(alfa,beta) > 0,alfa,beta);
[ALFA_SAD,BETA_SAD] = solve(D < 0,alfa,beta);
[ALFA_NAN,BETA_NAN] = solve(D == 0,alfa,beta);
Hi, I want solve distance equation of between any points and any point on sphere for alfa and beta. I have get distance equation and apply second derivation test but i can not any solution.
(x1,y1,z1) : coordinates of any points.
(x0,y0,z0) : center point of sphere.
alfa : angle between z axis or parallel line passes through (x0,y0,z0) and radius.
beta : angle between radius and xy-plane.
r : radius.
0 comentarios
Respuestas (1)
Shishir Reddy
el 24 de Dic. de 2024
Editada: Shishir Reddy
el 27 de Dic. de 2024
Hi Tarik
As per my understanding, you would like to find the angles 'alpha' and 'beta' that minimize or maximize the distance between a point (x1, y1, z1) and any point on the surface of a sphere centered at (x0, y0, z0) with radius r.
Kindly refer the following steps to solve this problem -
1. Define the Distance Function - We'll start by defining the distance function symbolically.
syms r alpha beta x0 y0 z0 x1 y1 z1
x = x0 - r * sin(alpha) * cos(beta);
y = y0 - r * sin(alpha) * sin(beta);
z = z0 - r * cos(alpha);
dist = sqrt((x - x1)^2 + (y - y1)^2 + (z - z1)^2);
2. Find Critical Points - Compute the first derivatives and set them to zero to find critical points.
d_dist_alpha = diff(dist, alpha);
d_dist_beta = diff(dist, beta);
critical_points = solve([d_dist_alpha == 0, d_dist_beta == 0], [alpha, beta]);
3. Second Derivative Test - Compute the second derivatives and form the Hessian matrix to classify the critical points.
d2_dist_alpha2 = diff(d_dist_alpha, alpha);
d2_dist_beta2 = diff(d_dist_beta, beta);
d2_dist_alphabeta = diff(d_dist_alpha, beta);
Hessian = [d2_dist_alpha2, d2_dist_alphabeta; d2_dist_alphabeta, d2_dist_beta2];
Hessian_det = det(Hessian);
Numerical Optimization - If symbolic solutions are complex or not feasible, numerical methods like fminunc can be used.
distanceFunc = @(vars) sqrt((x0 - r*sin(vars(1))*cos(vars(2)) - x1)^2 + ...
(y0 - r*sin(vars(1))*sin(vars(2)) - y1)^2 + ...
(z0 - r*cos(vars(1)) - z1)^2);
initial_guess = [pi/4, pi/4];
options = optimoptions('fminunc', 'Algorithm', 'quasi-newton', 'Display', 'iter');
[optimal_vars, min_distance] = fminunc(distanceFunc, initial_guess, options);
optimal_alpha = optimal_vars(1);
optimal_beta = optimal_vars(2);
fprintf('Optimal alpha: %.4f\n', optimal_alpha);
fprintf('Optimal beta: %.4f\n', optimal_beta);
fprintf('Minimum distance: %.4f\n', min_distance);
Adjust the initial guess and options in fminunc based on your specific problem setup for best results.
For more information regarding fminunc function, kindly refer the following documentation - https://www.mathworks.com/help/optim/ug/fminunc.html
I hope this helps.
0 comentarios
Ver también
Categorías
Más información sobre Calculus en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!