求解非线性方程的的最优化算法C++程序
发布网友
发布时间:2022-05-20 14:27
我来回答
共1个回答
热心网友
时间:2023-10-28 20:59
j是复数单位吗?可以试试http://dlib.net/,下面是个示例,我没有提供导数什么的,所以不稳定。它的用法和matlab挺像,你应该能搞定。
#include <dlib/optimization.h>
#include <iostream>
using namespace std;
using namespace dlib;
typedef matrix<double, 2, 1> column_vector;
typedef complex<double> complex_t;
int const M = 3;
static matrix<double, 3, M> a;
void init(){
static bool tag = true;
if (tag){
a = 0, 1, 2, 3, 4, 5, 6, 7, 8;
tag = false;
}
}
double foo(const column_vector& x){
init();
complex_t res;
for (int i = 0; i != a.nc(); ++i){
res += exp(complex_t(
0,
a(0, i) + a(1, i)*x(0) + a(2, i)*x(1)
));
}
return norm(res) / M;
}
int main(){
try{
column_vector starting_point;
starting_point = 0, 0;
double max_value = find_max_box_constrained(bfgs_search_strategy(),
objective_delta_stop_strategy(1e-9),
foo, derivative(foo), starting_point, -50, 50);
cout << "x0 = \n" << starting_point << "\nfoo(x0) = " << max_value << "\n";
}
catch (std::exception const& e){
cerr << e.what() << "\n";
}
return 0;
}
运行结果:
追问对,j是复数单位,你说的那个是不是一个第三方开源库啊?没有提供倒数所以不稳定?是什么意思啊,这个有没有什么教程具体怎么用啊,谢谢您啊