How to solve this equations for alfa and beta ?
11 views (last 30 days)
Show older comments
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 Comments
Answers (1)
Shishir Reddy
on 24 Dec 2024
Edited: Shishir Reddy
on 27 Dec 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 Comments
See Also
Categories
Find more on Calculus in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!