【发布时间】:2020-02-13 19:14:24
【问题描述】:
足球踢球运动
目标函数是(2 * (v0)^2 * sind(a) * cosd(a)) / g)
使用黄金搜索法 我们必须通过以下结构为任何用户定义的初始速度选择一个角度来创建一个最大化 x 距离的程序:
给定a = [theta]
最大化x(a)
这样
0 < theta < 90
x > 0
y > 0
至少使用以下输入创建函数:v0 和 x(a)
clc
clear
%gravity
g = 9.81;
%objective function
func = @(v0,a) ((2 * (v0)^2 * sind(a) * cosd(a)) / g);
%angle bounds (degrees) 0 < xa < 90
Xup = 85;
Xlo = 1;
%golden ratio = ((1 + sqrt(5))/2
G = 1.618;
%iteration
d = (G - 1)*(Xup - Xlo);
x1 = (Xup - d);
x2 = (Xlo + d);
%error tolerance
et = 10^-2;
%error limit
error = inf;
%v0 is a user input
v0 = input('input intial velocity:')
% at end points
f_up = func(v0,Xup); %-8.1667
f_lo = func(v0,Xlo); %2.0525
%function iterations
f1 = func(v0,x1);
f2 = func(v0,x2);
while error > et
if f1 > f2
Xup = x2;
f_upper = f2;
x2 = x1;
f2 = f1;
d = (G - 1)*(Xup - Xlo);
Xlo = Xup - d;
f1 = func(v0,x1);
elseif f1 < f2
Xlo = x1;
f_lower = f1;
x1 = x2;
f1 = f2;
d = (G - 1)*(Xup - Xlo);
x2 = Xlo + d;
else
Xlo = (x1 + x2)/2;
Xup = Xlo;
end
%calculating absolute error determining convergence
error = abs(Xup - Xlo);
end
a = (x1 + x2)/2
distance = func(v0,a)
在调用函数前应输入初始速度v0,答案应始终显示45为角度,同时显示以该角度计算的距离。
【问题讨论】:
标签: matlab function optimization motion projectile