vector — программа на C ++ перестала работать — решение обыкновенных дифференциальных уравнений

Я пишу программу на C ++, чтобы найти решения для дифференциальных уравнений первого порядка для заданий в колледже. Программа запускается, а затем, после того как я ввожу количество итераций для выполнения, я получаю сообщение об ошибке «Euler’s method.exe перестал работать». Это мой код:

#include <functional>
#include <vector>

using namespace std;double f_r(double x, double r) {
return r;
}

double f_s(double x, double s) {
return -x/s;
}double eulerstep(const function<double(double,double)>& f, double xsub0, double ysub0, double h) {
double ysub1 = ysub0+ h * f(xsub0,ysub0);
return ysub1;
}double euler(const function<double(double,double)>& f, double xsub0, double ysub0, double h, int n) {
vector<double> xsub;
vector<double> ysub;
xsub[0] = xsub0;
ysub[0] = ysub0;
n = ysub.size();
for (int i=1; i<n; i++){
xsub[i+1] = xsub[i] + h;
ysub[i+1] = ysub[i] + h * f(xsub[i],ysub[i]);
cout << xsub[i] << " , " << ysub[i] << endl;
}
return ysub[n];
}

int main() {
int nsteps = 0;
cout << "Number of steps?" << endl;
cin >> nsteps;
double h = 1.0 / nsteps;

double r = euler(f_r,0,1,h,nsteps);double s = euler(f_s,0,1,h,nsteps);

return 0;
}

2

Решение

Вот обновленная функция. Вы должны установить размеры, а не запрашивать пустой вектор для его размера.

double euler(const function<double(double, double)>& f, double xsub0, double ysub0, double h, int n)
{
vector<double> xsub;
vector<double> ysub;
xsub.resize(n+1); // so we can access [n], it must be size n+1
ysub.resize(n+1);
xsub[0] = xsub0;
ysub[0] = ysub0;
for (int i = 1; i<n; i++) {
xsub[i + 1] = xsub[i] + h;
ysub[i + 1] = ysub[i] + h * f(xsub[i], ysub[i]);
cout << xsub[i] << " , " << ysub[i] << endl;
}
return ysub[n];
}
1

Другие решения

vector<double> xsub;
vector<double> ysub;

Вы создаете пару векторов. Они изначально пусты.

xsub[0] = xsub0;
ysub[0] = ysub0;

Затем вы продолжаете присваивать значения содержимому вектора. Здесь происходит сбой, поскольку векторы пусты и не содержат значений.

vector[x] ссылается на существующий элемент в векторе. Вектор должен уже иметь хотя бы x+1 элементы в них, но ни один из ваших векторов не имеет ничего в них. У них нет ни элемента 0, ни элемента 1, ни какого-либо элемента.

Похоже, ваш код ожидает, что каждый вектор будет содержать n+1 элементы, так что вы должны явно вызывать каждый вектор resize() метод, соответственно, прежде чем пытаться использовать каждый вектор.

0

По вопросам рекламы [email protected]