q=p^2sin(w)^2+63726.4585+324.182p; g=(p*sin(w)+sqrt(q))/cos(w)^2; f=@(p)g; fun=int(f,w,-1,1);求fun的最小值和最小值对应的点(用matlab编写)用二分查找法编写
时间: 2024-05-11 07:18:38 浏览: 128
以下是用 Matlab 编写的代码:
```matlab
p = 0:0.001:10; % 定义 p 的范围
q = p.^2 .* sin(63726.4585 .* 324.182 .* p).^2; % 计算 q 的值
g = (p .* sin(63726.4585 .* 324.182 .* p) .* sqrt(q)) ./ cos(63726.4585 .* 324.182 .* p).^2; % 计算 g 的值
f = @(p) g; % 定义函数 f
fun = zeros(size(p)); % 初始化 fun 的值
for i = 1:length(p)
fun(i) = integral(f, -1, 1, 'ArrayValued', true); % 计算 fun 的值
end
[min_fun, min_index] = min(fun); % 找到 fun 的最小值和对应的下标
min_p = p(min_index); % 最小值对应的 p 的值
```
其中,`integral` 函数用于计算定积分,`min` 函数用于找到最小值及其下标。接下来,使用二分查找法来寻找 `fun` 的最小值。
```matlab
left = 1; % 定义左边界
right = length(p); % 定义右边界
while left < right
mid = floor((left + right) / 2); % 找到中间位置
if fun(mid) < fun(mid+1)
right = mid; % 最小值在左半边
else
left = mid + 1; % 最小值在右半边
end
end
min_fun = fun(left); % 找到最小值
min_p = p(left); % 最小值对应的 p 的值
```
最终,`min_fun` 即为 `fun` 的最小值,`min_p` 即为最小值对应的 `p` 的值。
阅读全文