一、fminbnd函數求最大值
fminbnd是一種MATLAB的逐步縮小演算法,用於尋找一個標量輸入函數的單個峰值。
#include <stdio.h>
#include <math.h>
double f(double x)
{
return -pow(x, 3) + 3 * pow(x, 2) + 4 * x + 2;
}
double fminbnd(double (*f)(double), double a, double b, double tol)
{
double m, fm, mprev, fmprev;
mprev = m = (a + b) / 2.0; // 初始中心點為 (a+b)/2
fmprev = fm = f(mprev);
while ((b - a) / 2.0 > tol) // 當區間變得足夠小時停止循環
{
double l = m - a, r = b - m;
if (l fmprev) // 如果新的中心點的函數值比上一個大,那麼和前面的區間拼起來
{
b = mprev;
}
else // 否則,繼續向右縮小區間
{
a = m;
mprev = m;
fmprev = fm;
}
}
else // 右側區間
{
m = mprev + r / 2.0;
fm = f(m);
if (fm > fmprev)
{
a = mprev;
}
else
{
b = m;
mprev = m;
fmprev = fm;
}
}
}
return (a + b) / 2.0; // 返回最終的中心點
}
int main()
{
double x = fminbnd(f, -1, 4, 1e-8);
printf("x = %f, f(x) = %f\n", x, f(x));
return 0;
}
二、c語言fmod函數
fmod是C語言標準庫中的一個函數,它計算兩個浮點數的餘數,返回值的類型與被除數的類型一致。
fmod函數的定義為:double fmod(double x, double y)
下面是一個fmod函數的使用實例:
#include <stdio.h>
#include <math.h>
int main()
{
double x = 123.456;
double y = 7.89;
double r = fmod(x, y);
printf("%f %% %f = %f\n", x, y, r);
return 0;
}
三、fmincon函數
fmincon是MATLAB中的一個優化函數,它用於求解帶有等式、不等式約束的多元函數的最小值。其基本的數學模型為:
minimize f(x)
subject to: c(x) = 0 (等式約束)
g(x) ≤ 0 (不等式約束)
其中,f(x)為目標函數,x為自變數向量,c(x)和g(x)分別為等式約束和不等式約束函數,約束條件可以是任意的可微函數。
fmincon函數的調用方法為:
[x,fval,exitflag,output] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
具體的參數說明如下:
- fun:目標函數
- x0:自變數的初始值
- A, b:不等式約束的係數矩陣和常數向量
- Aeq, beq:等式約束的係數矩陣和常數向量
- lb, ub:自變數的下界和上界
- nonlcon:不等式約束和等式約束函數的句柄
- options:優化選項
四、math.fmod函數
math.fmod是Python中的一個標準庫函數,它和C語言的fmod函數一樣,計算兩個浮點數的餘數。下面是一個fmod函數的使用實例:
import math
x = 123.456
y = 7.89
r = math.fmod(x, y)
print("{0} % {1} = {2}".format(x, y, r))
五、fmincon函數用法
fmincon函數是MATLAB中的一種優化函數,它可以用來求解具有非線性等式和不等式約束的優化問題。下面是fmincon函數的使用方法示例:
function fmincon_demo()
x0 = [1.5, 2.5]; % 初始點
Aeq = [1, 1];
beq = 1;
lb = [0, 0];
ub = [Inf, Inf];
problem = createOptimProblem('fmincon', ...
'x0', x0, ...
'objective', @rosenbrock, ...
'Aeq', Aeq, 'beq', beq, ...
'lb', lb, 'ub', ub);
ms = MultiStart('UseParallel', true, 'Display', 'iter');
[x, fval] = run(ms, problem, 100);
fprintf('x = [%g, %g], fval = %g\n', x(1), x(2), fval);
end
function f = rosenbrock(x)
f = 100 * (x(2) - x(1) ^ 2) ^ 2 + (1 - x(1)) ^ 2;
end
六、fmincon函數怎麼讀
fmincon函數讀作「f-min-con」,其中f是函數function的縮寫,min是minimize(最小化)的縮寫,con是constraint(約束)的縮寫。
七、fmincon函數原理
fmincon函數的演算法原理是基於牛頓方法和擬牛頓方法的非線性優化演算法。牛頓方法是一種基於泰勒展開的一階優化演算法,它在每一步迭代時需要計算目標函數和約束條件的一階導數和二階導數。
擬牛頓方法是一種基於Broyden-Fletcher-Goldfarb-Shanno演算法(BFGS演算法)的二階優化演算法,它在每一步迭代時只需要計算目標函數和約束條件的一階導數,而二階導數通過擬牛頓公式逼近。
八、fmincon函數應用實例
fmincon函數可以應用於很多數學模型的求解,下面是一個簡單的二次函數的最小化問題的應用實例:
function f = myfun(x)
f = (x(1)-2)^2 + (x(2)-1)^2;
end
lb = [-Inf -Inf];
ub = [Inf Inf];
A = [1 2];
b = 2;
Aeq = [];
beq = [];
x0 = [0 0];
options = optimoptions('fmincon','Algorithm','sqp');
[x,fval] = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,[],options);
原創文章,作者:ODLGA,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/324958.html