Giac — свободная система компьютерной алгебры, разработанная в университете им. Жозефа Фурье (г. Гренобль, Франция). Среди других свободных систем Giac выделяется тем, что в нем реализован режим совместимости с Maple (а также MuPAD и несколькими калькуляторами). Это означает, что Giac «понимает» большое число команд Maple и позволяет импортировать рабочие файлы Maple «классического» формата (.mws). Giac позволяет также сохранять результаты работы в виде текстовой записи команд Maple. Более подробно, возможности Giac описаны в книге «Symbolic algebra and Mathematics with Xcas» Renée De Graeve и Bernard Parisse.
Giac реализован в виде библиотеки на С++, что позволяет вызывать его функции их других программ на C++, Python, Java и JavaScript, а также использовать с различными графическими интерфейсами, например, Xcas (реализован на FLTK), qcas (Qt) и wxCAS.
Giac работает под всеми основными платформами, в том числе, под Android и iOS.
Ниже приведена краткая сводка примеров, работающих в Maple и в Giac. Русские комментарии, сделанные в Maple, в Giac не читаются. Поэтому для удобства работы лучше скачать готовый mws-файл, ссылка на который приводится в конце каждого пункта. Его можно как запускать в Maple или импортировать в Giac.
1. Основы
В Giac нет необходимости завершать строку символами ';' или ':' — они используются только для разделения операторов внутри строки.
Группа выражений в Giac не может начинаться с комментария (#
).
> 1+3-2; # Арифметические операции.
> 1/2+3^2;
> sqrt(100);
> n1:=10; # Присвоение значения.
> n1^-1; # Возведение в степень: n1^-1 = 1/n1
> sin(Pi/3); # В Maple - Pi, в Giac - Pi и pi.
> y:=sin(x)+3*x^2;
> diff(y,x); # Производная dy/dx.
> x:=1:
evalf(y); # Вычислим y(1).
> y:='y': # Вернемся к исходным значениям y и x.
x:='x':
> diff(x^3*y^2,x$1,y$2); # Вычисление частных производных.
> int(cos(x),x); # Неопределенный интеграл.
> int(1/(1+x^2),x=0..1); # Определенный интеграл.
> int(1/x^2,x=1..infinity); # Несобственный интеграл.
> convert(1/((s+1)*(s+2)),parfrac,s); # Разложение на простейшие дроби.
> expand(sin(x+y)); # Раскрываем скобки.
> factor(x^2-y^2); # Разложение на множители.
> limit((cos(x)-1)/x,x=0); # Вычисление предела.
> z1:=3+2*I; # Операции с комплексными числами.
z2:=2-I;
> z3:=z1+z2;
z4:=z1*z2/z3;
> modz1:=abs(z1); # Вычисление модуля комплексного числа.
> evalc(exp(I*z1)); # Вычисление значения выражения, содержащего
# комплексные числа.
> solve({x+2*y=1,x-y=3},{x,y}); # Решение системы уравнений (результат - формула).
> fsolve(x*cos(x)=0,x=7..9); # Решение системы уравнений (результат - число).
> S:=sum(i^2,i=1..n); # Сумма ряда.
> simplify((sin(3*x)+sin(7*x))/sin(5*x)); # Упрощение выражения
2. Матрицы
> A:=matrix([Скачать matrices-2.mws](1,2],[3,4]]);
> B:=matrix([[1,0],[-1,3]]);
> evalm(B^(-1)); # Вычисление матрицы.
> C:=evalm(A+2*B);
> AB:=evalm(A &* B);
> A1:=matrix([[1,0,4],[0,2,0],[3,1,-3]]);
> with(linalg): # Без пакета linalg следующие далее операции не будут выполняться в Maple,
# а в Giac - будут.
> det(A1); # Вычисление детерминанта.
> eigenvals(A1);# Собственные числа.
3. Графики
> plot(cos(2*x),x=0..4*Pi);
> plot(x*(x^2-1),x=-3..3,y=-10..10,title="A cubic polynomial");
> plot(tan(x),x=-2*Pi..2*Pi,y=-10..10,
> discont=true); # Мы можем перенести часть оператора на другую строчку
# с помощью Shift+Enter - в Maple и в Giac.
> plot({x*cos(x),x-2},x=-5..5);
> with(plots): # Следующие далее графики не будут построены в Maple без подключения
# пакета plots
> implicitplot(y^2+y=x^3-x,x=-2..3,y=-3..3);
> animate(sin(x*t),x=-4*Pi..4*Pi,t=0..1, color=red); # 2-D animation.
> plot3d(sin(x)*exp(-y),x=0..Pi,y=0..3,axes=boxed);
4. Дифференциальные уравнения
> dsolve(diff(y(x),x)=x,y(x));
> dsolve({diff(v(t),t)+2*t=0,v(1)=5},v(t)); # Неизвестная функция: v(t).
> dsolve(diff(x(t),t$2)+8*diff(x(t),t)+25*x(t)=0,x(t)); # Уравнение 2-го порядка.
5. Простейшие программы
> norm3d:=proc(a,b,c) # Процедура.
> sqrt(a^2+b^2+c^2);
> end:
> norm3d(3,4,5);
> total:=0: # Оператор цикла for.
> for i from 0 to 100 do
> total:=i+total:
> od:
> total;
> p:=4: # Условный оператор.
> if p<2 then print("p is less than 2"):
> elif p>=2 then print("p is not less than 2"):
> fi:
> imax:=14: # Числа Фибоначчи.
> F:=[seq(0,i=1..imax)]:
> F[1]:=0:
> F[2]:=1:
> for i from 3 to imax do
> F[i]:=F[i-1]+F[i-2]:
> od:
> seq(F[i],i=1..imax);
Комментарии
comments powered by Disqus