Я не знаю алгоритм, но ваш код неверен.
Первый:
while(n<10)
{
L[0]=1;
L[1]=x;
//legendre coef
for (int i=1;i<=10;i++){
L[i+1]=((2.0*i+1.0)*x*L[i] - i*L[i-1])/(i+1.0);
}
Вы должны изменить значение n
(увеличение, уменьшение и т. Д.), Иначе это бесконечный цикл.
Второй:
//weights w
w=0;
for (int i=1;i<=10;i++){
w[i]+=(2.0*(1.0-x*x))/(i*i*(L[i-1]*L[i-1]));
}
w
- указатель. Если вы хотите сбросить его, используйте memset(w,0,sizeof(double)*n);
Не делайте его равным 0.
Последний раз:
result=w*f(*t);
Поскольку вы используете указатели w
и t
в качестве массивов, вы должны предоставить какой-то индекс, например result=w[ind] * f(t[ind]);
. Здесь вы просто умножаете значение указателя w
, а не значение, на которое указывает w
(значение w
равно 0, образуйте ваш код, кстати) на первое значение двойного массива, на которое указывает t
.
Также я не смог получить какую-либо связь между вашим кодом и формулами в вопросе. Поэтому мой скромный совет: не используйте C или C ++ для этого. Если вы должны, то не используйте указатели, потому что кажется, что вы не знакомы с ними. Вы можете легко использовать std :: vector вместо указателей.