用matlab2022b设抛物线方程为x^2-2py-324p-63726=0x范围-252252一段圆弧半径为300圆心在原点角度范围在-1-pi2 1-pi2。对过原点引出的射线交抛物线和圆弧的距离差转换为极坐标后在角度-1-pi2 1-pi2上积分用二分法查找在50到200之间求一个正p值使这个积分有最靠近零的值求出抛物线未知数p。和积分的值。给出完整代码。
抛物线方程为:
syms x y p
f = x^2 - 2*p*y - 324*p - 63726;
圆弧方程为:
theta = linspace(-1-pi/2, 1-pi/2, 1000);
r = 300;
x_arc = r*cos(theta);
y_arc = r*sin(theta);
过原点的直线方程为:
syms a b
g = a*x + b*y;
求交点:
[x0, y0] = solve([f==0, g==0], [x y]);
求距离差:
d = sqrt(x0.^2 + y0.^2) - r;
转换为极坐标:
theta0 = atan2(y0, x0);
r0 = sqrt(x0.^2 + y0.^2);
在角度范围内积分:
integrand = d.*r0;
integral_value = integral(@(theta) interp1(theta0, integrand, theta, 'linear'), -1-pi/2, 1-pi/2);
使用二分法查找最小值:
p_min = fminbnd(@(p) abs(subs(integral_value, p, 1)), 50, 200);
输出结果:
disp(['p = ', num2str(p_min)]);
disp(['integral value = ', num2str(subs(integral_value, p_min, 1))]);
完整代码如下:
syms x y p
f = x^2 - 2*p*y - 324*p - 63726;
theta = linspace(-1-pi/2, 1-pi/2, 1000);
r = 300;
x_arc = r*cos(theta);
y_arc = r*sin(theta);
syms a b
g = a*x + b*y;
[x0, y0] = solve([f==0, g==0], [x y]);
d = sqrt(x0.^2 + y0.^2) - r;
theta0 = atan2(y0, x0);
r0 = sqrt(x0.^2 + y0.^2);
integrand = d.*r0;
integral_value = integral(@(theta) interp1(theta0, integrand, theta, 'linear'), -1-pi/2, 1-pi/2);
p_min = fminbnd(@(p) abs(subs(integral_value, p, 1)), 50, 200);
disp(['p = ', num2str(p_min)]);
disp(['integral value = ', num2str(subs(integral_value, p_min, 1))]);
``
原文地址: https://www.cveoy.top/t/topic/dSPE 著作权归作者所有。请勿转载和采集!