краевая задача, как выбрать коэффициент?

#c #math #boundary

#c #математика #граница

Вопрос:

Я должен решить следующую краевую задачу с начальными условиями

y»-sin(y) = exp(x), y(1) = 2, y(0) = 1

(некоторые теоретические вещи)

введите описание изображения здесь

для начала я решил сначала решить следующую задачу y»-y = exp (x), y (1) = 2, y (0) = 1 и алгоритм отлично работает. ответ правильный.

но в какой-то момент я немного запутался.решая вторую задачу, ясно, что -1 следует принимать за коэффициент C (поскольку -y) . Но как насчет случая с -sin(y), что я должен взять в качестве коэффициента?

 #include <iostream>
#include <cmath>
#include <cstdlib>


double F(double x)
{
    return exp(x);
}

int main(int argc, char** argv) {
    
    double a, b, h, dx;
    a = 0.0;
    b = 1.0;
    dx = 0;
    
    int n;
    printf("steps: ");
    scanf("%d", amp;n);
    h = (a   b)/(n-1);
    printf("%lfn", h);
    
    double *x = new double [n];
    for (int i = 0; i<n; i  )
    {
        x[i] = dx;
        dx = dx   h;
    }
    
    double *y = new double [n];
    double *A = new double [n];
    double *B = new double [n];
    double *C = new double [n];
    double *G = new double [n];
    
    for (int i = 0; i<n; i  )   
    {
        A[i] = 1;
        B[i] = (-1)*h*h - 2.0;
        C[i] = 1;
        G[i] = F(x[i])*h*h;
    }
    
    double *L = new double [n];
    double *N = new double [n];
    
    L[0] = 0;
    N[0] = 1;
    
    for (int i = 1; i<n-1; i  )
    {
        L[i] = (-C[i]) / (A[i] * L[i-1]   B[i]);
        N[i] = (G[i] - A[i] * N[i-1]) / (A[i] * L[i-1]   B[i]);
    }
    
    y[n-1] = 2;
    y[0] = 1;
    
    for(int i = n-2; i>0; i--)
    {
        y[i] = L[i] * y[i 1]   N[i];
    }
    
    for(int i = 0; i<n; i  )
    {
        printf("x = %.3lf ::: y = %.5lfn", x[i], y[i]);
    }
        
    return 0;
}
 

Комментарии:

1. Ваш код написан на C , а не на C (даже если вы по какой-то причине используете небезопасные для типа функции ввода / вывода C).

2. @Someprogrammerdude хорошо, отредактировано

3. Прежде чем пытаться решить математическую часть задачи, исправьте проблемы, связанные с программированием

4. @TedLyngmo мой код компилируется, я не знаю, в чем ваша проблема.

5. @Vs_De_S Я пытался помочь вам, показав, что даже если ваш код компилируется, он может делать вещи, из-за которых ваша программа имеет неопределенное поведение . Программу с неопределенным поведением довольно бессмысленно пытаться анализировать результат. Сначала исправьте эту часть.