Лабораторная работа №4
Предисловие Скопируйте текст и вставьте в текстовый редактор Scilab. Внимание! Некоторые функции не работают в пятом Scilab, поэтому делайте все в четвертой версии программы. Третья работа по интегралам, там вы должны вбить при Тимошине алгоритмы нахождения интегралов inttrap, integrate, intg. Лабораторная работа №1
clc clear function abc disp('РЕШЕНИЕ СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ МЕТОДОМ ГАУССА') mprintf('\n\n') A=input(' введите матрицу коэффициентов:'); mprintf('\n\n')
n=size(A, 'c'); m=size(A, 'r');
//for i=1:m; //for j=1:n; // mprintf('введите элемент %g строки, %g столбца',i,j) //A(i,j)=input(''); //mprintf('\n') //end //end
//mprintf('\n\n') //mprintf('Основная матрица системы\n\n') // for i=1:m; // for j=1:n; // mprintf('%10.8f ', A(i,j)) // end // mprintf('\n\n') // end //mprintf('\n')
A
for t=1:m; mprintf('введите свободный элемент %g-ый строки',t) B(t,1)=input(''); mprintf('\n') end
mprintf('\n\n') mprintf('столбец свободных элементов\n\n') for t=1:m; mprintf('%10.8f \n\n',B(t)) end
mprintf('\n')
if rank(A)==rank([A B]) K=rref([A B]);
if rank(A)==n mprintf('Система линейных уравнений определена\n\n') X=K(:,n+1); else P=K; mprintf('Система линейных уравнений не определена\n\n') disp(K) mm=rank(A); mprintf('\n\n') mprintf('Cвязанных переменных %g \n\n',mm) for t=1:mm; mprintf('введите номер %g связанной переменной',t) AA(t)=input(''); mprintf('\n') end mprintf('\n\n') mprintf('Cвободных переменных %g \n\n',n-mm) for t=1:n-mm; mprintf('введите номер %g свободной переменной',t) AAA(t)=input(''); mprintf('\n') end for s=1:mm mprintf('неизвестное X(%g)=%10.8f',AA(s),P(s,n+1)) for ss=1:n-mm mprintf('+(%10.8f)*C%g',-P(s,AAA(ss)),AAA(ss)) end mprintf('\n\n') end return end else mprintf('Система линейных уравнений несовместна\n\n') return end
mprintf('решение системы:\n\n') for h=1:n; mprintf('x%g=%11.9f\n\n',h,X(h)); mprintf('\n') end endfunction abc disp('Хотите ли вы решить еще одну систему?') lg=0; while lg==0 AH=input('Yes/No?(Внимание! Ввод производится в апострофах)\n') if AH=='Yes' abc end if AH=='No' mprintf('Спасибо за использование программы!') lg=lg+1; end end Лабораторная работа №2 В зависимости от своего варианта выбираем задания. Комбинированный метод //programma napisana dlya Scilab 4.xxx, kommentarii i prochii tekst napisani latinecei, chtobi ne bilo //problem s kodirovkoi. 'fsolve', 'numdiff' ne rabotayt na Scilab 5.xxx clcclear k=1;clf format('v',25); q1=input('vvedite function:','string')q2=input('vvedite vtoruy proizvodnuy function:','string') deff('otv=func(x)','otv='+string(q1));deff('proiz2=func2(x)','proiz2='+string(q2));while k<=1x1=input('vvedite nachalnuy tochku otrezka, na kotorom rassmatrivaetsya function:');x2=input('vvedite konechnuy tochku otrezka, na kotorom rassmatrivaetsya function:');clfx=[x1:0.1:x2];xgrid;plot(x,eval(q1),'color','r','thickness',2); plot(x,0,'color','g','thickness',2);disp('Ustraivaet li vas postroennii grafik?(WARNING! Vvod proizvoditsya v apostrofah):')xas=input('Yes/No');if xas=='Yes'k=k+1;endif xas=='No'k=k+0;endenda(1)=input('vvedite nachalnuy tochku otrezka, soderzhashego koren: ');b(1)=input('vvedite konechnuy tochku otrezka, soderzhashego koren: '); t=input('vvedite neobhodimoe kol-vo znakov posle zapyatoi: '); n1=func(a(1)); d1=func2(a(1)); e=10^(-t); i=1;if n1*d1<0 while (b(i)-a(i))>2*e a(i+1)=a(i)-func(a(i))*(b(i)-a(i))/(func(b(i))-func(a(i))); b(i+1)=b(i)-func(b(i))/numdiff(func,b(i)); i=i+1; endelse while (b(i)-a(i))>2*e b(i+1)=b(i)-func(b(i))*(b(i)-a(i))/(func(b(i))-func(a(i))); a(i+1)=a(i)-func(a(i))/numdiff(func,a(i)); i=i+1; endendxn=(a(i)+b(i))/2; str=msprintf('%s-10.%g%s','%',t,'g'); mprintf('\nx='+string(str),xn)deff('mashk=my_func(x)', 'mashk=eval(q1)');xmashk=fsolve(a(1),my_func);mprintf('\n')mprintf('Mashinnii koren uravneniya:%12.6f',xmashk)mprintf('\n')hhh=abs(xmashk-xn);mprintf('Doveritelnii interval:%g±%g',xmashk, hhh)
Метод половинного сечения (деления) clcclearclfz=input('Введите начальное значение отрезка');mprintf('\n');p=input('Введите конечное значение отрезка');mprintf('\n');c=input('Введите шаг отрезка');x=[z:c:p]; mprintf('\n');str=msprintf('введите функцию f(x)');f=input(str);u=evstr(f);plot(x,u);xgridmprintf('\n');t=input('введите начальное приближение');put=msprintf('y=%s',f);deff('[y]=p(x)',put);otv=fsolve(t,p);mprintf('\n');a=input('Введите левый предел отрезка определения решения'); mprintf('\n');b=input('Введите правый предел');g=input('Введите погрешность вычисления отрезка определения решения');while (b-a)>g; i=1; c=(a+b)/2;x(i)=c;x(i+1)=b;y=evstr(f);if y(i)*y(i+1)<0; a=c;else y(i)*y(i+1)>0; b=c;endi=i+1;endX=(a+b)/2;mprintf('\n\n');mprintf('Корень уравнения равен %g',X)v=abs(otv-X);mprintf('\n\n');mprintf('Машинный корень %g\n\n',otv) mprintf('Погрешность :%g',v) Метод Ньютона
clc clear clf disp('РЕШЕНИЕ НЕЛИНЕЙНЫХ УРАВНЕНИЙ') mprintf('\n\n'); x=input('введите начальный интервал'); mprintf('\n\n');
h=input('введите шаг'); mprintf('\n\n');
x=[x(1):h:x(length(x))];
str=msprintf('введите функцию f(x)'); f=input(str); y=evstr(f); mprintf('\n\n'); mprintf('f(x)= %s',f); mprintf('\n\n'); plot2d(x,y',rect=[0,-3,1,3],axesflag=5,leg=f,style=color(250,0,250)); //rect[ xmin,ymin,xmax,ymax] xgrid t=input('введите начальное приближение'); mprintf('\n\n'); put=msprintf('y=%s',f); deff('[y]=p(x)',put) otv=fsolve(t,p); mprintf('корень данного уравнения равен: X=%15.13f\n\n',otv) str1=msprintf('введите производную функции f(x)'); f1=input(str1); function p=myfunc(x,f) p=evstr(f) endfunction function p=myfunc2(x,f1) p=evstr(f1); endfunction for i=1:length(x) g1(i)=numdiff(myfunc,x(i)); end
for i=1:length(x) g2(i)=numdiff(myfunc2,x(i)); end
nach=x(1)-1;
if (y(1)*y(length(x))<0)&and(g1<>0)&and(g2<>0) if or([(and(g1>0)),(and(g1<0))]) if or([(and(g2>0)),(and(g2<0))]) if y(1)*g2(1)>0 nach=x(1); elseif y(length(x))*g2(length(x))>0 nach=x(length(x)); else disp('нет начальной точки') return end else disp('вторая производная функции не знакопостоянна') return end
else disp('первая производная функции не знакопостоянна') return end
else disp('на концах значение функции с одинаковым знаком, либо производные равны 0') return end
mprintf('\n\n');
function [y]=func(a,f) x=a y=evstr(f) endfunction
eps=input('введите точность с которой надо решить уравнение'); a=nach; del=1;
while del>=eps u=a; a=a-func(a)/numdiff(myfunc,a); del=(max(abs(g2))/(2*min(abs(g1))))*((a-u)^2); end mprintf('\n\n'); mprintf('корень полученный методом Ньютона = %16.10f',a)
delg=abs(otv-a);
mprintf('\n\n'); mprintf('абсолютная погрешность = %16.10f',delg)
Метод хорд
clc clear
h=input('Задайте шаг деления отрезка'); x=input('Задайте область определения'); x=[x(1):h:x(2)]; st=input('Задайте функцию','s');
str=msprintf('f=%s',st); deff('[f]=nelin(x)',str) Y=nelin(x); clf
plot(x,Y,'linestyle','-','color','g','thickness',3) xtitle(' ','x','Y') xgrid D='нет'; while D=='нет'
D=input('График построен верно?','s'); if D=='нет'
x=input('Задайте область определения'); x=[x(1):h:x(2)]; Y=nelin(x);
clf plot(x,Y,'linestyle','-','color','g','thickness',3) xtitle(' ','x','Y') xgrid end end e=length(x);
x0=input('Задайте начальное приближение'); deff('[f]=Y(x)',str) disp('Решение уравнения средствами SciLab') xs=fsolve(x0,Y)
t=input('Задайте погрешность'); disp(str) y2=input('Задайте вторую производную функции f','s');
str2=msprintf('f=%s',y2); deff('[f]=nelin2(x)',str2)
if nelin2(x(1))*nelin(x(1))<0 C=x(e);X=x(1); else C=x(1);X=x(e); end
Y1=nelin(C); Y2=nelin(X);
while abs(Y2)>t X=X-Y2*(X-C)/(Y2-Y1); Y2=nelin(X); end
disp('Решение уравнения методом хорд') X k=xs-X; disp('Ошибка вычислений: ') k
Лабораторная работа №4
clc clear //РЕШЕНИЕ ОБЫКНОВЕННЫХ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ // ДИФФЕРЕНЦИАЛЬНОЕ УРАВНЕНИЕ Y2+PI^2Y=PI^2/COS(PI*X) Y(0)=3 Y1(0)=0 //ВВОДИМ НОВЫЕ ПЕРЕМЕННЫЕ X(1)=Y, X(2)=Y1, T=X //ОПРЕДЕЛЯЕМ ПРАВЫЕ ЧАСТИ СООТВЕТСТВУЮЩЕЙ СИСТЕМЫ УРАВНЕНИЙ ПЕРВОГО ПОРЯДКА function dx=syst2(t,x) dx=zeros(2,1); dx(1)=x(2); dx(2)=-%pi^2*x(1)+%pi^2/cos(%pi*t); endfunction // ЧИСЛЕННОЕ РЕШЕНИЕ СИСТЕМЫ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ X0=[3;0];t0=0;t=0:0.01:0.4; y=ode("stiff",X0,t0,t,syst2); //ТОЧНОЕ РЕШЕНИЕ ОДУ z=3*cos(%pi*t)+%pi*t.*sin(%pi*t)+log(cos(%pi*t)).*cos(%pi*t); //ВЫВОД РЕШЕНИЙ В ОДНОМ ГРАФИЧЕСКОМ ОКНЕ rect=[min(t),-5,max(t),3]; tics=[2,11,10,5]; plotframe(rect,tics,[%t,%t],["Численное решение ОДУ"], [0,0.2,0.5,0.5]); plot(t,y); plotframe(rect,tics,[%t,%t],["Точное решение ОДУ"], [0.5,0.2,0.5,0.5]); plot(t,z);
Популярное: Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... ©2015-2020 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (261)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |