Помогите,пожалуйста,найти ошибку

Форум пользователей пакета Maple

Модератор: Admin

Ana_jovial
Сообщения: 9
Зарегистрирован: Чт ноя 17, 2011 6:53 pm

Помогите,пожалуйста,найти ошибку

Сообщение Ana_jovial » Вс дек 11, 2011 9:00 pm

Здравствуйте!Требуется приближенно посчитать интеграл методом Гаусса для 3 точек,делением отрезка интегрирования на r частей.

r:=3:
> MetGauss:=0:
> for i from 0 to r while b<=1 do
> b:=-1+2/r*(i+1):
> a:=-1+2/r*i:
> eqs1:={c1+c2+c3=b-a,c1*x1+c2*x2+c3*x3=1/2*(b^2-a^2),c1*x1^2+c2*x2^2+c3*x3^2=1/3*(b^3-a^3),c1*x1^3+c2*x2^3+c3*x3^3=1/4*(b^4-a^4),c1*x1^4+c2*x2^4+c3*x3^4=1/5*(b^5-a^5),c1*x1^5+c2*x2^5+c3*x3^5=1/6*(b^6-a^6)}:
> l:=solve(eqs1,{x1,x2,x3,c1,c2,c3});
> MetGauss:=evalf[13](MetGauss+l[4]*f(l[1])+l[5]*f(l[2])+l[6]*f(l[3])):
> od;

VSI
Сообщения: 305
Зарегистрирован: Вт мар 15, 2005 6:40 pm
Откуда: Мариуполь

Re: Помогите,пожалуйста,найти ошибку

Сообщение VSI » Пн дек 12, 2011 12:59 am

Ana_jovial писал(а):Здравствуйте!Требуется приближенно посчитать интеграл методом Гаусса для 3 точек,делением отрезка интегрирования на r частей.

> r:=3:
> MetGauss:=0:
> for i from 0 to r while b<=1 do
> b:=-1+2/r*(i+1):
> a:=-1+2/r*i:
> eqs1:={c1+c2+c3=b-a,c1*x1+c2*x2+c3*x3=1/2*(b^2-a^2),c1*x1^2+c2*x2^2+c3*x3^2=1/3*(b^3-a^3),c1*x1^3+c2*x2^3+c3*x3^3=1/4*(b^4-a^4),c1*x1^4+c2*x2^4+c3*x3^4=1/5*(b^5-a^5),c1*x1^5+c2*x2^5+c3*x3^5=1/6*(b^6-a^6)}:
> l:=solve(eqs1,{x1,x2,x3,c1,c2,c3});
> MetGauss:=evalf[13](MetGauss+l[4]*f(l[1])+l[5]*f(l[2])+l[6]*f(l[3])):
> od;


- в заголовке цикла у Вас условие прерывания цикла while b<=1 не определено! В этой точке у переменной b нет никакого значения! Перед циклом этой переменной нужно присвоить значение <=1. В противном случае цикл не будет выполняться...
- в строке
MetGauss:=evalf[13](MetGauss + l[4]*f(l[1]) + l[5]*f(l[2]) + l[6]*f(l[3])):
присутствует ФУНКЦИЯ? f(l[3]). Если это так, то ранее в Вашей программе эта функция тоже не определена... Что она, эта функция, должна делать? :)

Ana_jovial
Сообщения: 9
Зарегистрирован: Чт ноя 17, 2011 6:53 pm

Сообщение Ana_jovial » Пн дек 12, 2011 5:38 am

F(x)-это sin(x^2).И еще l это у меня не массив..это решения системы(они в фигурных скобочках выводятся)..этих решений может быть несколько..я не знаю,как написать,чтобы выбиралось,допустим,первое..тогда b:=-1,a:=-1 исправит ситуацию?

Ana_jovial
Сообщения: 9
Зарегистрирован: Чт ноя 17, 2011 6:53 pm

Сообщение Ana_jovial » Пн дек 12, 2011 9:06 am

Решая систему eqs1 ,получаем несколько различных решений,которые образуют список списков вида [[x1=bla,x2=bla..],[x1=bla1...]];как изменить этот список списков,чтобы в каждом его списке у каждого элемента отсутствовали его первые два символа?
символы х1,х2 и прочие мешают,значение функции от элементов списка списков уже не найдешь..

Markiyan Hirnyk
Сообщения: 1340
Зарегистрирован: Вс дек 04, 2011 11:07 pm

rhs

Сообщение Markiyan Hirnyk » Пн дек 12, 2011 11:13 am

> eqs1 := {c1+c2+c3 = b-a, c1*x1+c2*x2+c3*x3 = 1/2*(b^2-a^2), c1*x1^2+c2*x2^2+c3*x3^2 = 1/3*(b^3-a^3), c1*x1^3+c2*x2^3+c3*x3^3 = 1/4*(b^4-a^4), c1*x1^4+c2*x2^4+c3*x3^4 = 1/5*(b^5-a^5), c1*x1^5+c2*x2^5+c3*x3^5 = 1/6*(b^6-a^6)};

>solve(eqs1, {c1, c2, c3, x1, x2, x3});
> l[1]:
>ll1:= map(c-> rhs(c), l[1]);

{(1/2)*b+(1/2)*a, (4/9)*b-(4/9)*a, (5/18)*b-(5/18)*a, a-RootOf(10*_Z^2+(-10*a-10*b)*_Z+a^2+8*b*a+b^2)+b, RootOf(10*_Z^2+(-10*a-10*b)*_Z+a^2+8*b*a+b^2)}
>ll1[1];

(1/2)*b+(1/2)*a
См. справки ?rhs , ?map