Я хотел бы хранить значения математической функции в векторах / массивах (или есть другая возможность избежать процесса хранения)?
double func1()
{
double x;
double y = 1/sqrt(x);
return y;
}
Это пример функции, которая имеет теоретическое значение для каждого x
(без нуля). Но теперь возникает проблема: я действительно не понимаю, как я могу использовать значение — y(x)
— из func1()
в другой функции?
double func2()
{
double a, x;
double integral = a * x * pow(y, -4);
return integral;
// for the integration i'm going to use the gsl-library.
}
Впоследствии я хотел бы построить function1
& -2
, Есть ли библиотека, которая создает мне файл с таблицей значений для x
а также y
?
Если вы просите обработать несколько значений для x
а также y
для данного уравнения, то при условии, что у вас есть равное число x
а также y
элементы, вы можете использовать std::transform
обрабатывать каждый вход с вашим уравнением и сохранять результаты в третьем векторе ans
,
#include <iostream> ///< std::cout, std::endl
#include <vector> ///< std::vector, std::back_inserter
#include <algorithm> ///< std::transform
int main()
{
std::vector<double> x = { 1,2,3,4,5,6 };
std::vector<double> y = { 2,4,6,8,10,12 };
std::vector<double> ans;
// apply the function for every x and y
// record each result in ans
std::transform(x.begin(), x.end(), y.begin(), std::back_inserter(ans),
[](double x, double y) { return x*y - ((x+y)/2) + 1; });
for( const auto& a : ans )
{
std::cout << a << std::endl;
}
return 0;
}
Выходные данные для следующих примеров входных данных и выходов уравнения:
1.5
6
14.5
27
43.5
64
Если вы просто хотите создать файл, содержащий выходные данные (x, y) для обработки другой программой, вы можете просто использовать библиотеку потоков файлов:
#include <cmath>
#include <fstream>
//Move the variable x into the function definition an a function argumen
double func1(double x)
{
double y = 1/std::sqrt(x);
return y;
}
//Similar for a and x here
double func2(double a, double x)
{
double integral = a * x * std::pow(y, -4);
return integral;
// for the integration i'm going to use the gsl-library.
}int main() {
//...
std::ofstream file1("func1-output.txt"), file2("func2-output.txt");
// make sure the file is open
for( int x = 1; x < 100; x++ ) {
file1 << x << "\t" << func1(x) << std::endl;
file2 << x << "\t" << func2(1,x) << std::endl;
}
//....
file1.close(); file2.close();
return 0;
}